Multi-Time Frame True Momentum Oscillator (MTF) for ThinkorSwim

@HighBredCloud Here's the latest code (including the FisherTransform) for your review:

Code:
# filename: MR__EZ_TMO_MTF_Fisher_
# source: https://usethinkscript.com/d/91-tmo-with-higher-agg-mobius-tsl

# TMO ((T)rue (M)omentum (O)scillator) With Higher Aggregation
# Mobius
# V01.05.2018
#hint: TMO calculates momentum using the DELTA of price. Giving a much better picture of trend, trend reversals and divergence than momentum oscillators using price.

declare lower;

input length = 10; # default -> 14;
def calcLength = 5;
def smoothLength = 3;
input agg = AggregationPeriod.FIVE_MIN;
 
def o = open(period = agg);
def c = close(period = agg);
def data = fold i = 0 to length
           with s
           do s + (if c > getValue(o, i)
                   then 1
                   else if c < getValue(o, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
plot Main = ExpAverage(EMA5, smoothLength);
plot Signal = ExpAverage(Main, smoothLength);
     Main.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Signal.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Main.SetLineWeight(3);
     Signal.SetLineWeight(3);
     Signal.HideBubble();
     Signal.HideTitle();


# JQ_FisherTransform_wLabels v02
# assistance provided by AlphaInvestor, amalia, randyr and nube

# v02 9.23.2018 JQ added arrows

input Fisherprice = hl2;
input FisherLength = 10;
input TriggerLineOffset = 1; # Ehler's value of choice is 1
input TriggerLine_Color_Choice = {"magenta", "cyan", "pink", default "gray", "Mustard", "red", "green", "dark_gray", "Pale Yellow", "white"};
input deBug = no;

def maxHigh = Highest(Fisherprice, FisherLength);
def minLow = Lowest(Fisherprice, FisherLength);
def range = maxHigh - minLow;
def value = if IsNaN(Fisherprice)
then Double.NaN
else if IsNaN(range)
then value[1]
else if range == 0
then 0
else 0.66 * ((Fisherprice - minLow) / range - 0.5) + 0.67 * value[1];
def truncValue = if value > 0.99 then 0.999 else if value < -0.99 then -0.999 else value;
def fish = 0.5 * (Log((1 + truncValue) / (1 - truncValue)) + fish[1]);
def FTOneBarBack = fish[TriggerLineOffset];
def FT = fish;

plot FisherBullCross = if FT crosses above FTOneBarBack then lowestall(Main) else Double.NaN;
FisherBullCross.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
FisherBullCross.SetDefaultColor(Color.UPTICK);

plot FisherBearCross = if FT crosses below FTOneBarBack then highestall(Main) else Double.NaN;
FisherBearCross.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
FisherBearCross.SetDefaultColor(Color.DOWNTICK);


input length2 = 10; # default -> 14;
def calcLength2 = 5;
def smoothLength2 = 3;
input agg2 = AggregationPeriod.FIFTEEN_MIN;
 
def o2 = open(period = agg2);
def c2 = close(period = agg2);
def data2 = fold i2 = 0 to length2
           with s2
           do s2 + (if c2 > getValue(o2, i2)
                   then 1
                   else if c2 < getValue(o2, i2)
                        then - 1
                        else 0);
def EMA52 = ExpAverage(data2, calcLength2);
plot Main2 = ExpAverage(EMA52, smoothLength2);
plot Signal2 = ExpAverage(Main2, smoothLength2);
     Main2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.HideBubble();
     Signal2.HideTitle();

input length3 = 10; # default -> 14;
def calcLength3 = 5;
def smoothLength3 = 3;
input agg3 = AggregationPeriod.THIRTY_MIN;
 
def o3 = open(period = agg3);
def c3 = close(period = agg3);
def data3 = fold i3 = 0 to length3
           with s3
           do s3 + (if c3 > getValue(o3, i3)
                   then 1
                   else if c3 < getValue(o3, i3)
                        then - 1
                        else 0);
def EMA53 = ExpAverage(data3, calcLength3);
plot Main3 = ExpAverage(EMA53, smoothLength3);
plot Signal3 = ExpAverage(Main3, smoothLength3);
Main3.AssignValueColor(if Main3 > Signal3
                                then CreateColor(0, 191, 0) #Green
                                else CreateColor(191, 0, 0)); #Red;
     Signal3.AssignValueColor(if Main3 > Signal3
                                  then CreateColor(0, 191, 0) #Green
                                  else CreateColor(191, 0, 0)); #Red
     Signal3.HideBubble();
     Signal3.HideTitle();

addCloud(Main, Signal, color.GREEN, color.RED);
addCloud(Main2, Signal2, color.UPTICK, color.DOWNTICK);
addCloud(Main3, Signal3, color.DARK_GREEN, color.DARK_RED);

plot ZeroLine = 0;
     ZeroLine.SetDefaultColor(Color.ORANGE);
     ZeroLine.HideBubble();
     ZeroLine.HideTitle();

plot ob = if isNaN(c) then double.nan else round(length * .7);
ob.SetDefaultColor(Color.dark_red);
ob.HideBubble();
ob.HideTitle();
plot os = if isNaN(c) then double.nan else -round(length * .7);
os.SetDefaultColor(Color.dark_green);
os.HideBubble();
os.HideTitle();
addCloud(ob, length, color.dark_red, color.dark_red, no);
addCloud(-length, os, color.dark_green, color.dark_green);
 
@tomsk Well that clears it up...I somehow thought it was the way the Main and Signal line were plotted. This puts my head at rest. Personally I like the Fisher Transform as an indicator...and IMO opinion it works good with the TMO...as long as its not a choppy market the signals do come faster at times than actual TMO...Anything that gets rid of an indicator and saves space on the screen gets my vote...

Besides I don't think Mobius will mind...In fact @netarchitech made it in the same fashion as Mobius intended TMO to be used...WIN WIN...
 
@netarchitech This looks great! One thing...can you change the color green on the length 2 15 min in the example to something lighter tone of green? The reds look great and can be easily set apart...but the greens on the TMO 2 and 3 look similar...Other than that...its PERFECT!

EDIT: I should emphasize the trim lines colors on the TMO 2 not the actual cloud...
 
@HighBredCloud I couldn't "brighten" TMO2 so I "darkened" TMO3...Latest code for your review:

Code:
# filename: MR__EZ_TMO_MTF_Fisher_
# source: https://usethinkscript.com/d/91-tmo-with-higher-agg-mobius-tsl

# TMO ((T)rue (M)omentum (O)scillator) With Higher Aggregation
# Mobius
# V01.05.2018
#hint: TMO calculates momentum using the DELTA of price. Giving a much better picture of trend, trend reversals and divergence than momentum oscillators using price.

declare lower;

input length = 10; # default -> 14;
def calcLength = 5;
def smoothLength = 3;
input agg = AggregationPeriod.FIVE_MIN;
 
def o = open(period = agg);
def c = close(period = agg);
def data = fold i = 0 to length
           with s
           do s + (if c > getValue(o, i)
                   then 1
                   else if c < getValue(o, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
plot Main = ExpAverage(EMA5, smoothLength);
plot Signal = ExpAverage(Main, smoothLength);
     Main.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Signal.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Main.SetLineWeight(3);
     Signal.SetLineWeight(3);
     Signal.HideBubble();
     Signal.HideTitle();


# JQ_FisherTransform_wLabels v02
# assistance provided by AlphaInvestor, amalia, randyr and nube

# v02 9.23.2018 JQ added arrows

input Fisherprice = hl2;
input FisherLength = 10;
input TriggerLineOffset = 1; # Ehler's value of choice is 1
input TriggerLine_Color_Choice = {"magenta", "cyan", "pink", default "gray", "Mustard", "red", "green", "dark_gray", "Pale Yellow", "white"};
input deBug = no;

def maxHigh = Highest(Fisherprice, FisherLength);
def minLow = Lowest(Fisherprice, FisherLength);
def range = maxHigh - minLow;
def value = if IsNaN(Fisherprice)
then Double.NaN
else if IsNaN(range)
then value[1]
else if range == 0
then 0
else 0.66 * ((Fisherprice - minLow) / range - 0.5) + 0.67 * value[1];
def truncValue = if value > 0.99 then 0.999 else if value < -0.99 then -0.999 else value;
def fish = 0.5 * (Log((1 + truncValue) / (1 - truncValue)) + fish[1]);
def FTOneBarBack = fish[TriggerLineOffset];
def FT = fish;

plot FisherBullCross = if FT crosses above FTOneBarBack then lowestall(Main) else Double.NaN;
FisherBullCross.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
FisherBullCross.SetDefaultColor(Color.UPTICK);

plot FisherBearCross = if FT crosses below FTOneBarBack then highestall(Main) else Double.NaN;
FisherBearCross.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
FisherBearCross.SetDefaultColor(Color.DOWNTICK);


input length2 = 10; # default -> 14;
def calcLength2 = 5;
def smoothLength2 = 3;
input agg2 = AggregationPeriod.FIFTEEN_MIN;
 
def o2 = open(period = agg2);
def c2 = close(period = agg2);
def data2 = fold i2 = 0 to length2
           with s2
           do s2 + (if c2 > getValue(o2, i2)
                   then 1
                   else if c2 < getValue(o2, i2)
                        then - 1
                        else 0);
def EMA52 = ExpAverage(data2, calcLength2);
plot Main2 = ExpAverage(EMA52, smoothLength2);
plot Signal2 = ExpAverage(Main2, smoothLength2);
     Main2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.HideBubble();
     Signal2.HideTitle();

input length3 = 10; # default -> 14;
def calcLength3 = 5;
def smoothLength3 = 3;
input agg3 = AggregationPeriod.THIRTY_MIN;
 
def o3 = open(period = agg3);
def c3 = close(period = agg3);
def data3 = fold i3 = 0 to length3
           with s3
           do s3 + (if c3 > getValue(o3, i3)
                   then 1
                   else if c3 < getValue(o3, i3)
                        then - 1
                        else 0);
def EMA53 = ExpAverage(data3, calcLength3);
plot Main3 = ExpAverage(EMA53, smoothLength3);
plot Signal3 = ExpAverage(Main3, smoothLength3);
Main3.AssignValueColor(if Main3 > Signal3
                                then CreateColor(0, 125, 0) #Green
                                else CreateColor(125, 0, 0)); #Red;
     Signal3.AssignValueColor(if Main3 > Signal3
                                  then CreateColor(0, 125, 0) #Green
                                  else CreateColor(125, 0, 0)); #Red
     Signal3.HideBubble();
     Signal3.HideTitle();

addCloud(Main, Signal, color.GREEN, color.RED);
addCloud(Main2, Signal2, color.UPTICK, color.DOWNTICK);
addCloud(Main3, Signal3, color.DARK_GREEN, color.DARK_RED);

plot ZeroLine = 0;
     ZeroLine.SetDefaultColor(Color.ORANGE);
     ZeroLine.HideBubble();
     ZeroLine.HideTitle();

plot ob = if isNaN(c) then double.nan else round(length * .7);
ob.SetDefaultColor(Color.dark_red);
ob.HideBubble();
ob.HideTitle();
plot os = if isNaN(c) then double.nan else -round(length * .7);
os.SetDefaultColor(Color.dark_green);
os.HideBubble();
os.HideTitle();
addCloud(ob, length, color.dark_red, color.dark_red, no);
addCloud(-length, os, color.dark_green, color.dark_green);
 
@netarchitech PERFECT! I think Mobius himself would be jealous of this TMO! This is a GREAT addition to the TMO family!

Now can you update and make a 2 TMO version for those not wanting the 3 TMO version? Same colors just delete TMO 3...

I had to do a double take at this thing once again before I finished typing this...Absolute Shock and Awe!
 
Multi-Timeframe True Momentum Oscillator - Two Timeframe version:

Code:
# filename: MR__EZ_TMO_MTF_Fisher_2Agg_
# source: https://usethinkscript.com/d/91-tmo-with-higher-agg-mobius-tsl

# TMO ((T)rue (M)omentum (O)scillator) With Higher Aggregation
# Mobius
# V01.05.2018
#hint: TMO calculates momentum using the DELTA of price. Giving a much better picture of trend, trend reversals and divergence than momentum oscillators using price.

declare lower;

input length = 10; # default -> 14;
def calcLength = 5;
def smoothLength = 3;
input agg = AggregationPeriod.FIVE_MIN;
 
def o = open(period = agg);
def c = close(period = agg);
def data = fold i = 0 to length
           with s
           do s + (if c > getValue(o, i)
                   then 1
                   else if c < getValue(o, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
plot Main = ExpAverage(EMA5, smoothLength);
plot Signal = ExpAverage(Main, smoothLength);
     Main.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Signal.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Main.SetLineWeight(3);
     Signal.SetLineWeight(3);
     Signal.HideBubble();
     Signal.HideTitle();


# JQ_FisherTransform_wLabels v02
# assistance provided by AlphaInvestor, amalia, randyr and nube

# v02 9.23.2018 JQ added arrows

input Fisherprice = hl2;
input FisherLength = 10;
input TriggerLineOffset = 1; # Ehler's value of choice is 1
input TriggerLine_Color_Choice = {"magenta", "cyan", "pink", default "gray", "Mustard", "red", "green", "dark_gray", "Pale Yellow", "white"};
input deBug = no;

def maxHigh = Highest(Fisherprice, FisherLength);
def minLow = Lowest(Fisherprice, FisherLength);
def range = maxHigh - minLow;
def value = if IsNaN(Fisherprice)
then Double.NaN
else if IsNaN(range)
then value[1]
else if range == 0
then 0
else 0.66 * ((Fisherprice - minLow) / range - 0.5) + 0.67 * value[1];
def truncValue = if value > 0.99 then 0.999 else if value < -0.99 then -0.999 else value;
def fish = 0.5 * (Log((1 + truncValue) / (1 - truncValue)) + fish[1]);
def FTOneBarBack = fish[TriggerLineOffset];
def FT = fish;

plot FisherBullCross = if FT crosses above FTOneBarBack then lowestall(Main) else Double.NaN;
FisherBullCross.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
FisherBullCross.SetDefaultColor(Color.UPTICK);

plot FisherBearCross = if FT crosses below FTOneBarBack then highestall(Main) else Double.NaN;
FisherBearCross.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
FisherBearCross.SetDefaultColor(Color.DOWNTICK);


input length2 = 10; # default -> 14;
def calcLength2 = 5;
def smoothLength2 = 3;
input agg2 = AggregationPeriod.FIFTEEN_MIN;
 
def o2 = open(period = agg2);
def c2 = close(period = agg2);
def data2 = fold i2 = 0 to length2
           with s2
           do s2 + (if c2 > getValue(o2, i2)
                   then 1
                   else if c2 < getValue(o2, i2)
                        then - 1
                        else 0);
def EMA52 = ExpAverage(data2, calcLength2);
plot Main2 = ExpAverage(EMA52, smoothLength2);
plot Signal2 = ExpAverage(Main2, smoothLength2);
     Main2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.HideBubble();
     Signal2.HideTitle();

addCloud(Main, Signal, color.GREEN, color.RED);
addCloud(Main2, Signal2, color.UPTICK, color.DOWNTICK);

plot ZeroLine = 0;
     ZeroLine.SetDefaultColor(Color.ORANGE);
     ZeroLine.HideBubble();
     ZeroLine.HideTitle();

plot ob = if isNaN(c) then double.nan else round(length * .7);
ob.SetDefaultColor(Color.dark_red);
ob.HideBubble();
ob.HideTitle();
plot os = if isNaN(c) then double.nan else -round(length * .7);
os.SetDefaultColor(Color.dark_green);
os.HideBubble();
os.HideTitle();
addCloud(ob, length, color.dark_red, color.dark_red, no);
addCloud(-length, os, color.dark_green, color.dark_green);
 
Multi-Timeframe True Momentum Oscillator - Three Timeframe version:

Code:
# filename: MR__EZ_TMO_MTF_Fisher_3Agg_
# source: https://usethinkscript.com/d/91-tmo-with-higher-agg-mobius-tsl

# TMO ((T)rue (M)omentum (O)scillator) With Higher Aggregation
# Mobius
# V01.05.2018
#hint: TMO calculates momentum using the DELTA of price. Giving a much better picture of trend, trend reversals and divergence than momentum oscillators using price.

declare lower;

input length = 10; # default -> 14;
def calcLength = 5;
def smoothLength = 3;
input agg = AggregationPeriod.FIVE_MIN;

def o = open(period = agg);
def c = close(period = agg);
def data = fold i = 0 to length
           with s
           do s + (if c > getValue(o, i)
                   then 1
                   else if c < getValue(o, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
plot Main = ExpAverage(EMA5, smoothLength);
plot Signal = ExpAverage(Main, smoothLength);
     Main.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Signal.AssignValueColor(if Main > Signal
                            then color.GREEN
                            else color.RED);
     Main.SetLineWeight(3);
     Signal.SetLineWeight(3);
     Signal.HideBubble();
     Signal.HideTitle();


# JQ_FisherTransform_wLabels v02
# assistance provided by AlphaInvestor, amalia, randyr and nube

# v02 9.23.2018 JQ added arrows

input Fisherprice = hl2;
input FisherLength = 10;
input TriggerLineOffset = 1; # Ehler's value of choice is 1
input TriggerLine_Color_Choice = {"magenta", "cyan", "pink", default "gray", "Mustard", "red", "green", "dark_gray", "Pale Yellow", "white"};
input deBug = no;

def maxHigh = Highest(Fisherprice, FisherLength);
def minLow = Lowest(Fisherprice, FisherLength);
def range = maxHigh - minLow;
def value = if IsNaN(Fisherprice)
then Double.NaN
else if IsNaN(range)
then value[1]
else if range == 0
then 0
else 0.66 * ((Fisherprice - minLow) / range - 0.5) + 0.67 * value[1];
def truncValue = if value > 0.99 then 0.999 else if value < -0.99 then -0.999 else value;
def fish = 0.5 * (Log((1 + truncValue) / (1 - truncValue)) + fish[1]);
def FTOneBarBack = fish[TriggerLineOffset];
def FT = fish;

plot FisherBullCross = if FT crosses above FTOneBarBack then lowestall(Main) else Double.NaN;
FisherBullCross.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
FisherBullCross.SetDefaultColor(Color.UPTICK);

plot FisherBearCross = if FT crosses below FTOneBarBack then highestall(Main) else Double.NaN;
FisherBearCross.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
FisherBearCross.SetDefaultColor(Color.DOWNTICK);


input length2 = 10; # default -> 14;
def calcLength2 = 5;
def smoothLength2 = 3;
input agg2 = AggregationPeriod.FIFTEEN_MIN;

def o2 = open(period = agg2);
def c2 = close(period = agg2);
def data2 = fold i2 = 0 to length2
           with s2
           do s2 + (if c2 > getValue(o2, i2)
                   then 1
                   else if c2 < getValue(o2, i2)
                        then - 1
                        else 0);
def EMA52 = ExpAverage(data2, calcLength2);
plot Main2 = ExpAverage(EMA52, smoothLength2);
plot Signal2 = ExpAverage(Main2, smoothLength2);
     Main2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.AssignValueColor(if Main2 > Signal2
                            then color.UPTICK
                            else color.DOWNTICK);
     Signal2.HideBubble();
     Signal2.HideTitle();

input length3 = 10; # default -> 14;
def calcLength3 = 5;
def smoothLength3 = 3;
input agg3 = AggregationPeriod.THIRTY_MIN;

def o3 = open(period = agg3);
def c3 = close(period = agg3);
def data3 = fold i3 = 0 to length3
           with s3
           do s3 + (if c3 > getValue(o3, i3)
                   then 1
                   else if c3 < getValue(o3, i3)
                        then - 1
                        else 0);
def EMA53 = ExpAverage(data3, calcLength3);
plot Main3 = ExpAverage(EMA53, smoothLength3);
plot Signal3 = ExpAverage(Main3, smoothLength3);
Main3.AssignValueColor(if Main3 > Signal3
                                then CreateColor(0, 125, 0) #Green
                                else CreateColor(125, 0, 0)); #Red;
     Signal3.AssignValueColor(if Main3 > Signal3
                                  then CreateColor(0, 125, 0) #Green
                                  else CreateColor(125, 0, 0)); #Red
     Signal3.HideBubble();
     Signal3.HideTitle();

addCloud(Main, Signal, color.GREEN, color.RED);
addCloud(Main2, Signal2, color.UPTICK, color.DOWNTICK);
addCloud(Main3, Signal3, color.DARK_GREEN, color.DARK_RED);

plot ZeroLine = 0;
     ZeroLine.SetDefaultColor(Color.ORANGE);
     ZeroLine.HideBubble();
     ZeroLine.HideTitle();

plot ob = if isNaN(c) then double.nan else round(length * .7);
ob.SetDefaultColor(Color.dark_red);
ob.HideBubble();
ob.HideTitle();
plot os = if isNaN(c) then double.nan else -round(length * .7);
os.SetDefaultColor(Color.dark_green);
os.HideBubble();
os.HideTitle();
addCloud(ob, length, color.dark_red, color.dark_red, no);
addCloud(-length, os, color.dark_green, color.dark_green);
 
@netarchitech I say what I feel...AND seeing a better more enhanced indicator unfold right before my eyes is really something...This was VERY productive session indeed. Opening bell tomorrow with this TMO should yield great results from my testing earlier just by overlapping the TMO's...Now with this enhanced cleaner more readable version...WOW...eye candy at the very least! This simple observational strategy that I described earlier really works wonders especially within the first 30 min to 1 hour of market open. Try it out for yourself.
 
This is SICK!!! Amazing work. Two of the 2 timeframe ones is pretty much all you need, maybe a MACD... but you really don't need anything else to make good decisions it seems, for intraday at least. I am trying a 2 and 10 minute, and a 5 and 15 minute for intraday, and it looks amazing.

What would happen when using these with tick charts? I do some futures and prefer tick charts for that.
 
Last edited:
@dolomick Thanks for the kind words :) It makes the hard work much more worthwhile knowing our indicators are well received and you and other members of the community benefit from them...

What would happen when using these with tick charts?
Unfortunately, tick charts are not a possibility with Multi-TimeFrame indicators...

Good Luck and Good Trading :cool:
 
@netarchitech Let me tell you...THIS TMO MTF is great! Did a small share for my testing 100 shares of SHOP and right off the opening bell locked in over $300.00 in about 10 min...so I stopped trading and just focused more on testing...I am assuming you tested it out today as well? Hope you were also in the GREEN!

One thing if I can bother you to change on the TMO with 3 instances... the dark RED and GREEN tend to blend in with the OB/OS regions as they are the same color and are a bit too dark to read especially when the line is thin awaiting a trend reversal...or when all the lines are on top of each other...

I don't know if possibly changing to some sort Orange to replace the Dark Red...such as this TOS code FF6600 and the Dark Green to some sort of Cyan maybe TOS code 00FFFF would remedy the problem? Other than that...this is a SOLID indicator.

I am trying to pair TMO MTF with an exit indicator...Was testing it with SMI DSS EUO...I took out the DSS line and focused more on the EUO and the SMI...It seems to work but it does not keep you in the trend for long as its very sensitive...

I was also testing out an indicator that another member here @vvcv Schaff Trend Line and Wave Line suggested...to possibly see how well it goes with the TMO MTF...

I am looking for an indicator that will keep you in the trend longer and one that works in confluence with TMO...as sometimes TMO has fake outs on the primary smaller timeframe instance...

AND I just noticed this today...but when I was waiting for the 5 min TMO to cross over the 15 min TMO in an upward trend...even tho the 5 TMO was GREEN and the 15 min TMO was RED...once the cross over happened the 15 min TMO painted the lines GREEN 3 bars back...I should have known this is going to happen as its 3x the timeframe...BUT it makes backtesting not accurate unless you're trading live market or IF ON DEMAND decides to work. LOL...hence why would like to seen TMO MTF paired with another similar indicator to avoid such fake outs.

I know we've enhanced many great indicators together and some of them go together as good as peanut butter and jelly...for example MACD_FREMA & PercentR_MAC...

Take a look at the code below and let me know what you think and how well the STSW indicator would work with TMO MTF...

Just an FYI...the first field settings of 48 104 36 8 is for the trend line that is 4x the default MACD setting. (which BTW I am not very fond off and would like to see other possible solutions for it...possibly some sort of a Tillson line in its place)

The secondary settings of 12 26 9 2 are for the WAVE...On higher time frames such as 15 min and up I used 8 17 9 3...

THIS combination of these two indicators COULD be the next PB&J once enhanced...I'd love to hear your thoughts on this.


Code:
#STSW = Schaff Trend Line and Schaff Wave Line
#Schaff Trend Line = Used for quick up/down trend declaration
#Schaff Wave Line = Trade Wave in the direction of trend as
#declared by Trend Line.
#Schaff Wave Line can be used alone to enter trend
#declared by the MACD.
#Schaff Wave can be used with the EMA for signals

declare lower;

input fastLengthTrend = 48;
input slowLengthTrend = 104;
input KPeriodTrend = 36;
input DPeriodTrend = 8;
input averageTypeTrend = AverageType.EXPONENTIAL;
input fastLengthWave = 12;
input slowLengthWave = 26;
input KPeriodWave = 9;
input DPeriodWave = 2;
input over_bought = 75;
input over_sold = 25;
input averageTypeWave = AverageType.EXPONENTIAL;

def macdTrend = MovingAverage(averageTypeTrend, close, fastLengthTrend) - MovingAverage(averageTypeTrend, close, slowLengthTrend);
def macdWave = MovingAverage(averageTypeWave, close, fastLengthWave) - MovingAverage(averageTypeWave, close, slowLengthWave);
def fastK1Trend = FastKCustom(macdTrend, KPeriodTrend);
def fastK1Wave = FastKCustom(macdWave, KPeriodWave);
def fastD1Trend = MovingAverage(averageTypeTrend, fastK1Trend, DPeriodTrend);
def fastD1Wave = MovingAverage(averageTypeWave, fastK1Wave, DPeriodWave);
def fastK2Trend = FastKCustom(fastD1Trend, KPeriodTrend);
def fastK2Wave = FastKCustom(fastD1Wave, KPeriodWave);
plot STCTrend = MovingAverage(averageTypeTrend, fastK2Trend, DPeriodTrend);
plot STCWave = MovingAverage(averageTypeWave, fastK2Wave, DPeriodWave);
plot OverBought = over_bought;
plot OverSold = over_sold;

STCTrend.SetDefaultColor(GetColor(8));
STCWave.SetDefaultColor(GetColor(8));
OverBought.SetDefaultColor(GetColor(7));
OverSold.SetDefaultColor(GetColor(7));

plot Fifty_Line = 50;
fifty_line.SetDefaultColor(GetColor(8));
fifty_line.HideTitle();
fifty_line.SetStyle(Curve.SHORT_DASH);

STCTrend.DefineColor("Up", GetColor(1));
STCTrend.DefineColor("Down", GetColor(0));
STCTrend.AssignValueColor(if STCTrend > STCTrend[1] then STCTrend.Color("Up") else STCTrend.Color("Down"));
STCWave.DefineColor("Up", GetColor(1));
STCWave.DefineColor("Down", GetColor(0));
STCWave.AssignValueColor(if STCWave > STCWave[1] then STCWave.Color("Up") else STCWave.Color("Down"));

input lengthWave = 10;
plot AvgExpWave = ExpAverage(STCWave, lengthWave);
AvgExpWave.SetDefaultColor(GetColor(1));

PIC of the SWTS with TMO MTF

 
Last edited:
This is great Team work and having Good Heart for sharing this valuable information to all. :love:
@San Thanks! Just like @netarchitech told me once...PAY IT FORWARD! Personally I'd like to see EVERYONE here get their piece of the pie when it comes to trading...hence why the hard work that is put into EVERY indicator that made here. Hope you enjoy it as much as I did...

AND don't forget to check out other indicators that @netarchitech enhanced...
 
@netarchitech Let me tell you...THIS TMO MTF is great! Did a small share for my testing 100 shares of SHOP and right off the opening bell locked in over $300.00 in about 10 min...so I stopped trading and just focused more on testing...I am assuming you tested it out today as well? Hope you were also in the GREEN!

One thing if I can bother you to change on the TMO with 3 instances... the dark RED and GREEN tend to blend in with the OB/OS regions as they are the same color and are a bit too dark to read especially when the line is thin awaiting a trend reversal...or when all the lines are on top of each other...

I don't know if possibly changing to some sort Orange to replace the Dark Red...such as this TOS code FF6600 and the Dark Green to some sort of Cyan maybe TOS code 00FFFF would remedy the problem? Other than that...this is a SOLID indicator.

I am trying to pair TMO MTF with an exit indicator...Was testing it with SMI DSS EUO...I took out the DSS line and focused more on the EUO and the SMI...It seems to work but it does not keep you in the trend for long as its very sensitive...

I was also testing out an indicator that another member here @vvcv Schaff Trend Line and Wave Line suggested...to possibly see how well it goes with the TMO MTF...

I am looking for an indicator that will keep you in the trend longer and one that works in confluence with TMO...as sometimes TMO has fake outs on the primary smaller timeframe instance...

AND I just noticed this today...but when I was waiting for the 5 min TMO to cross over the 15 min TMO in an upward trend...even tho the 5 TMO was GREEN and the 15 min TMO was RED...once the cross over happened the 15 min TMO painted the lines GREEN 3 bars back...I should have known this is going to happen as its 3x the timeframe...BUT it makes backtesting not accurate unless you're trading live market or IF ON DEMAND decides to work. LOL...hence why would like to seen TMO MTF paired with another similar indicator to avoid such fake outs.

I know we've enhanced many great indicators together and some of them go together as good as peanut butter and jelly...for example MACD_FREMA & PercentR_MAC...

Take a look at the code below and let me know what you think and how well the STSW indicator would work with TMO MTF...

Just an FYI...the first field settings of 48 104 36 8 is for the trend line that is 4x the default MACD setting. (which BTW I am not very fond off and would like to see other possible solutions for it...possibly some sort of a Tillson line in its place)

The secondary settings of 12 26 9 2 are for the WAVE...On higher time frames such as 15 min and up I used 8 17 9 3...

THIS combination of these two indicators COULD be the next PB&J once enhanced...I'd love to hear your thoughts on this.


Code:
#STSW = Schaff Trend Line and Schaff Wave Line
#Schaff Trend Line = Used for quick up/down trend declaration
#Schaff Wave Line = Trade Wave in the direction of trend as
#declared by Trend Line.
#Schaff Wave Line can be used alone to enter trend
#declared by the MACD.
#Schaff Wave can be used with the EMA for signals

declare lower;

input fastLengthTrend = 48;
input slowLengthTrend = 104;
input KPeriodTrend = 36;
input DPeriodTrend = 8;
input averageTypeTrend = AverageType.EXPONENTIAL;
input fastLengthWave = 12;
input slowLengthWave = 26;
input KPeriodWave = 9;
input DPeriodWave = 2;
input over_bought = 75;
input over_sold = 25;
input averageTypeWave = AverageType.EXPONENTIAL;

def macdTrend = MovingAverage(averageTypeTrend, close, fastLengthTrend) - MovingAverage(averageTypeTrend, close, slowLengthTrend);
def macdWave = MovingAverage(averageTypeWave, close, fastLengthWave) - MovingAverage(averageTypeWave, close, slowLengthWave);
def fastK1Trend = FastKCustom(macdTrend, KPeriodTrend);
def fastK1Wave = FastKCustom(macdWave, KPeriodWave);
def fastD1Trend = MovingAverage(averageTypeTrend, fastK1Trend, DPeriodTrend);
def fastD1Wave = MovingAverage(averageTypeWave, fastK1Wave, DPeriodWave);
def fastK2Trend = FastKCustom(fastD1Trend, KPeriodTrend);
def fastK2Wave = FastKCustom(fastD1Wave, KPeriodWave);
plot STCTrend = MovingAverage(averageTypeTrend, fastK2Trend, DPeriodTrend);
plot STCWave = MovingAverage(averageTypeWave, fastK2Wave, DPeriodWave);
plot OverBought = over_bought;
plot OverSold = over_sold;

STCTrend.SetDefaultColor(GetColor(8));
STCWave.SetDefaultColor(GetColor(8));
OverBought.SetDefaultColor(GetColor(7));
OverSold.SetDefaultColor(GetColor(7));

plot Fifty_Line = 50;
fifty_line.SetDefaultColor(GetColor(8));
fifty_line.HideTitle();
fifty_line.SetStyle(Curve.SHORT_DASH);

STCTrend.DefineColor("Up", GetColor(1));
STCTrend.DefineColor("Down", GetColor(0));
STCTrend.AssignValueColor(if STCTrend > STCTrend[1] then STCTrend.Color("Up") else STCTrend.Color("Down"));
STCWave.DefineColor("Up", GetColor(1));
STCWave.DefineColor("Down", GetColor(0));
STCWave.AssignValueColor(if STCWave > STCWave[1] then STCWave.Color("Up") else STCWave.Color("Down"));

input lengthWave = 10;
plot AvgExpWave = ExpAverage(STCWave, lengthWave);
AvgExpWave.SetDefaultColor(GetColor(1));

PIC of the SWTS with TMO MTF

If you are looking for a similar indicator, Try the RSI LaGuerre with FE. JQ and I are both guilty of putting both on a chart. Just drag one over the other. What would really go well, otherwise, is just the Fractal Energy or the Chop indicator. (Different math, same result) That is, Single TMO and RSI Laguerre in the same lower just to see how they lay over each other. I believe that I placed all three indicators in the Tutorials section.
 

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
303 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top