Normalized Scale TMO w/ RSI Candles

rlohmeyer

Member
Though I do not want to add to any confusion about uses for TMO, I liked the indicator and wanted to compare it's behavior directly with RSI. I felt together they might add to scalping a (1 minute) set up that needs quick decisions. This indicator may add something to the decision process with a quick glance. Below is a chart with the indicator in the lower panel.

The chart is a 1 minute chart I scalped Friday for a high average daily range stock (use several different stocks for this type of scalping). The chart has explanations for what is on the chart. The indicator is the TMO in yellow, and RSI candles in Cyan, on a normalized scale. The are both using the close as the data set, both are set to 5 as the number of data points, and both are smoothed by a Wilders Average, TMO 5 and RSI 2. I like the way this indicator adds to the decision whether I am going to place a short or long bet for a scalp at a pullback area. And in the 2 instances on the chart it only took a quick glance to confirm which choice. I share the indicator if any one wants to fool around with it.

Shout out to @BenTen for the TMO posting. @markos for contributions and @germanburrito for the idea to use RSI candles. If BenTen feels this post should be moved to another thread, my feelings won't be hurt.

Chart is below. Code is below chart.

PnaWeN6.jpg


Code:
# TMO ((T)rue (M)omentum (O)scilator)
# Mobius
# V01.05.2018
# hint: TMO calculates momentum using the delta of price. Giving a much better picture of trend, tend reversals and divergence than momentum oscillators using price.#RSI,TMO on_volume normalized scale
# RSI as Candles
# Mobius
# German Burrito mods
#rlohmeyer normalization of scales to compare indicators
declare lower;
#Scale Normaliztion Script
script normalizePlot {
    input normalize_data = close;
    input MinRng = -1;
    input MaxRng = 1;
    def HH = HighestAll( normalize_data );
    def LL = LowestAll( normalize_data );
    plot NR = ((( MaxRng - MinRng ) * ( normalize_data - LL )) / ( HH - LL )) + MinRng;
}

#TMO data
input Tmo_Price = close;
input Tmo_data_length = 10;
input Tmo_Ema_Length = 5;
def o = open;
def TMOdata = fold i = 0 to TMO_data_length with s do s + (if TMO_price > getValue(o, i)
       then 1 else if TMO_price < getValue(o, i)    then - 1 else 0);
def TMOavg = MovingAverage(AverageType.WILDERS,TMOdata, TMO_EMA_Length);

#RSI data
input RSI_price = close;
def RSI_Average = AverageType.WILDERS;
input RSI_Avg_Length = 2;
def NetChgAvg = MovingAverage(RSI_Average, RSI_price - RSI_price[1], RSI_Avg_Length);
def TotChgAvg = MovingAverage(RSI_Average, AbsValue(RSI_price - RSI_price[1]), RSI_Avg_Length);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
def RS = 50 * (ChgRatio + 1);
input Rsi_Ema_Length = 2;
def RSIavg =  ExpAverage(RS, RSI_EMA_Length);

#Scale parameters
input MaxRng = 100;#Max range value
input MinRng = 0;#Min range value
input OBH = 95;
input OBL = 90;
Addcloud(OBH,OBL,color.green);
input OSH = 10;
input OSL = 5;
Addcloud(OSH,OSL,color.red);

#Scale normalization based on parameters
def newTMO = normalizePlot(TMOavg, MinRng, MaxRng );
def newRSI = normalizePlot(RSIavg, MinRng, MaxRng );

#Plot TMO
plot TMO = newTMO;
TMO.setdefaultColor(color.yellow);
TMO.Hidebubble();
TMO.hidetitle();

#Plot RSI Chart
def h = Max(newRSI, newRSI[1]);
def l = Min(newRSI, newRSI[1]);
def c = newRSI;
def op = c[1];
AddChart(high = h, low = l, open = op, close = c, type = ChartType.CANDLE, Color.cyan);

#Midrange
plot Mid = (MaxRng + MinRng)/2;
Mid.setdefaultColor(color.light_gray);
Mid.hidebubble();
Mid.hidetitle();
 
Top