Lower Heiken Ashi MT indicator can't get the painting correct

theLEMband

Member
VIP
EDIT: Nevermind, got it sorted.

I put this Multi Timeframe Heiken Ashi indicator together today if anyone would like to take a look at it on a 5 minute chart. I've got a couple problems.
1. I've got it almost there, but I've been digging around for hours now to try to get the background coloring figured out. I would like the green background to trigger on the first time that all timeframes are all aligned as green and then stay that way until they switch until all align as red.
2. I would like a notification that displays a message whenever the lowest timeframe being used in the study does not match the timeframe of the chart. I found some code on that but could not get it to work.
Thanks in advance.

MoPvtSm.png

 
Last edited:

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

@theLEMband You may found this code I did awhile ago useful also. It has multiple periods, multiple methods, and clouds amongst some of the features.

Capture.jpg
Ruby:
# Choose how the candles are being colored (green/red) in Multiple user defined TimeFrames by one of 4 methods.
# Labels show current color status
# Trend method is similar but not exactly like TTM_Trend
# Move study from lower to upper and select "upper" at the input useupperlower to display dots on upper price panel. Uncheck at input screen "use left axis"
# Using the study on the lower panel, select "lower" at the input useupperlower to lower to display dots on lower panel
# Dots can be turned off/on at the input screen
# Summary line shows only if all colors are the same, otherwise blank.
declare lower;
input method         = {default "HASmooth", "Open_Close", "Close_Close[1]", "HAOpen_HAClose", "Trend", "SuperTrend"};
input useupper_lower = {default upper, lower};
input showdotplot    = yes;
input agg1           = AggregationPeriod.MIN;
input agg2           = AggregationPeriod.TWO_MIN;
input agg3           = AggregationPeriod.THREE_MIN;
input agg4           = AggregationPeriod.five_MIN;

#Heiken Ashi defined
def HAclose1 = ohlc4(period = agg1);
def HAopen1  = CompoundValue( 1, ( HAopen1[1] + HAclose1[1] ) / 2, HAclose1 );
def HAclose2 = ohlc4(period = agg2);
def HAopen2  = CompoundValue( 1, ( HAopen2[1] + HAclose2[1] ) / 2, HAclose2 );
def HAclose3 = ohlc4(period = agg3);
def HAopen3  = CompoundValue( 1, ( HAopen3[1] + HAclose3[1] ) / 2, HAclose3 );
def HAclose4 = ohlc4(period = agg4);
def HAopen4  = CompoundValue( 1, ( HAopen4[1] + HAclose4[1] ) / 2, HAclose4 );

#Trend defined
input trend_lookback = 6;
def HH1      = (Highest(high(period = agg1) , trend_lookback) + Lowest(low(period = agg1), trend_lookback)) / 2;
def Trend1   = close(period = agg1) > HH1;
def HH2      = (Highest(high(period = agg2) , trend_lookback) + Lowest(low(period = agg2), trend_lookback)) / 2;
def Trend2   = close(period = agg2) > HH2;
def HH3      = (Highest(high(period = agg3) , trend_lookback) + Lowest(low(period = agg3), trend_lookback)) / 2;
def Trend3   = close(period = agg3) > HH3;
def HH4      = (Highest(high(period = agg4) , trend_lookback) + Lowest(low(period = agg4), trend_lookback)) / 2;
def Trend4   = close(period = agg4) > HH4;


# SuperTrend - "Strategy" by Mobius
# Chat Room Request
# V03.10.2015
input AtrMult        = 0.7;
input nATR           = 4;
input AvgType        = AverageType.HULL;
input price          = FundamentalType.HL2;

#SuperTrend1
def ATR1 = MovingAverage(AvgType, TrueRange(high(period = agg1), close(period = agg1), low(period = agg1)), nATR);
def UP1 = Fundamental(price, period = agg1) + (AtrMult * ATR1);
def DN1 = Fundamental(price, period = agg1) + (-AtrMult * ATR1);
def ST1 = if close(period = agg1) < ST1[1]
          then UP1
          else DN1;
def T1  = if close(period = agg1) > ST1
          then 1
          else 0;

#SuperTrend2

def ATR2 = MovingAverage(AvgType, TrueRange(high(period = agg2), close(period = agg2), low(period = agg2)), nATR);
def UP2 = Fundamental(price, period = agg2) + (AtrMult * ATR2);
def DN2 = Fundamental(price, period = agg2) + (-AtrMult * ATR2);
def ST2 = if close(period = agg2) < ST2[1]
          then UP2
          else DN2;
def T2  = if close(period = agg2) > ST2 then 1 else 0;

#SuperTrend3
def ATR3 = MovingAverage(AvgType, TrueRange(high(period = agg3), close(period = agg3), low(period = agg3)), nATR);
def UP3 = Fundamental(price, period = agg3) + (AtrMult * ATR3);
def DN3 = Fundamental(price, period = agg3) + (-AtrMult * ATR3);
def ST3 = if close(period = agg3) < ST3[1]
          then UP3
          else DN3;
def T3  = if close(period = agg3) > ST3
          then 1
          else 0;

#SuperTrend4
def ATR4 = MovingAverage(AvgType, TrueRange(high(period = agg4), close(period = agg4), low(period = agg4)), nATR);
def UP4 = Fundamental(price, period = agg4) + (AtrMult * ATR4);
def DN4 = Fundamental(price, period = agg4) + (-AtrMult * ATR4);
def ST4 = if close(period=agg4) < ST4[1]
          then UP4
          else DN4;
def T4  = if close(period = agg4) > ST4
          then 1
          else 0;

# HAsmoothed:
input avgha = averageType.simple;
input lenha = 10;
def o1 = MovingAverage(avgha, HAopen1, lenha);
def c1 = MovingAverage(avgha, HAclose1, lenha);
def o2 = MovingAverage(avgha, HAopen2, lenha);
def c2 = MovingAverage(avgha, HAclose2, lenha);
def o3 = MovingAverage(avgha, HAopen3, lenha);
def c3 = MovingAverage(avgha, HAclose3, lenha);
def o4 = MovingAverage(avgha, HAopen4, lenha);
def c4 = MovingAverage(avgha, HAclose4, lenha);

#Method applied to each aggregation

def Agg1per;
def Agg2per;
def Agg3per;
def Agg4per;
plot Agg1lower;
plot Agg2lower;
plot Agg3lower;
plot Agg4lower;

if method == method."Close_Close[1]" {
Agg1per= close(period = agg1) > close(period = agg1)[1];
Agg2per= close(period = agg2) > close(period = agg2)[1];
Agg3per= close(period = agg3) > close(period = agg3)[1];
Agg4per= close(period = agg4) > close(period = agg4)[1];
}else if method == method."HAOpen_HAClose" {
Agg1per= HAclose1 > HAopen1;
Agg2per= HAclose2 > HAopen2;
Agg3per= HAclose3 > HAopen3;
Agg4per= HAclose4 > HAopen4;
}else if method == method."HASmooth" {
Agg1per= c1 > o1;
Agg2per= c2 > o2;
Agg3per= c3 > o3;
Agg4per= c4 > o4;
}else if method == method."Trend" {
Agg1per= Trend1;
Agg2per= Trend2;
Agg3per= Trend3;
Agg4per= Trend4;
}else if method == method."SuperTrend" {
Agg1per= T1;
Agg2per= T2;
Agg3per= T3;
Agg4per= T4;
}else {
Agg1per= close(period = agg1) > open(period = agg1);
Agg2per= close(period = agg2) > open(period = agg2);
Agg3per= close(period = agg3) > open(period = agg3);
Agg4per= close(period = agg4) > open(period = agg4);
}
          
#Labels with selection to turn them on/off
input showlabels = yes;
AddLabel(showlabels,
            if agg1 / 60000 <= 240
            then (agg1 / 60000 + " Min")
            else if agg1 / 60000 == 1440
            then "Day"
            else if agg1 / 60000 == 10080
            then "Week"
            else if agg1 / 60000 == 43200
            then "Month"
            else " ",
            if Agg1per == 1
            then Color.GREEN
            else Color.RED);
AddLabel(showlabels,
            if agg2 / 60000 <= 240
            then (agg2 / 60000 + " Min")
            else if agg2 / 60000 == 1440
            then "Day"
            else if agg2 / 60000 == 10080
            then "Week"
            else if agg2 / 60000 == 43200
            then "Month"
            else " ",
            if Agg2per == 1
            then Color.GREEN
            else Color.RED);
AddLabel(showlabels,
            if agg3 / 60000 <= 240
            then (agg3 / 60000 + " Min")
            else if agg3 / 60000 == 1440
            then "Day"
            else if agg3 / 60000 == 10080
            then "Week"
            else if agg3 / 60000 == 43200
            then "Month"
            else " ",
            if Agg3per == 1
            then Color.GREEN
            else Color.RED);

AddLabel(showlabels,
            if agg4 / 60000 <= 240
            then (agg4 / 60000 + " Min")
            else if agg4 / 60000 == 1440
            then "Day"
            else if agg4 / 60000 == 10080
            then "Week"
            else if agg4 / 60000 == 43200
            then "Month"
            else " ",
            if Agg4per == 1
            then Color.GREEN
            else Color.RED);

# Label identifying method and color green/red if all green/red otherwise white
def aggsum = Agg1per + Agg2per + Agg3per + Agg4per;
AddLabel(showlabels,
            if method == method."Close_Close[1]"
                  then "C_C[1]"
                  else if method == method."HAOpen_HAClose"
                  then "HAC_HAO" 
                  else if method == method."HASmooth"
                  then "HASmooth" 
                  else if method == method."Trend"
                  then "Trend"
                  else if method == method."SuperTrend"
                  then "ST"
                  else "C_O" ,
            if aggsum >= 3
            then Color.GREEN
            else if aggsum <= 1 
            then Color.RED   
            else Color.WHITE);

plot lineh = if IsNaN(close) or showdotplot == no
             then Double.NaN
             else if useupper_lower == useupper_lower.upper then 7  else Double.NaN;
plot linel = if IsNaN(close) or showdotplot == no
             then Double.NaN
             else if useupper_lower == useupper_lower.upper then -7 else Double.NaN;
lineh.SetDefaultColor(Color.DARK_GRAY);
linel.SetDefaultColor(Color.DARK_GRAY);
if IsNaN(close) or showdotplot == no {
agg1lower = Double.NaN;
agg2lower = Double.nan;
agg3lower = Double.nan;
agg4lower = Double.nan;
} else {
agg1lower = if !IsNaN(Agg1per) then if useupper_lower == useupper_lower.upper then -8.75 else  6 else Double.NaN;
agg2lower = if !IsNaN(Agg2per) then if useupper_lower == useupper_lower.upper then -9.00 else  5 else Double.NaN;
agg3lower = if !IsNaN(Agg3per) then if useupper_lower == useupper_lower.upper then -9.25 else  4 else Double.NaN;
agg4lower = if !IsNaN(Agg4per) then if useupper_lower == useupper_lower.upper then -9.50 else  3 else Double.NaN;
}

agg1lower.SetPaintingStrategy(PaintingStrategy.POINTS);
agg1lower.AssignValueColor(if Agg1per == 1
                           then Color.GREEN
                           else Color.RED);
agg2lower.SetPaintingStrategy(PaintingStrategy.POINTS);
agg2lower.AssignValueColor(if Agg2per == 1
                           then Color.GREEN
                           else Color.RED);
agg3lower.SetPaintingStrategy(PaintingStrategy.POINTS);
agg3lower.AssignValueColor(if Agg3per == 1
                           then Color.GREEN
                           else Color.RED);
agg4lower.SetPaintingStrategy(PaintingStrategy.POINTS);
agg4lower.AssignValueColor(if Agg4per == 1
                           then Color.GREEN
                           else Color.RED);

plot linediv  =  if IsNaN(close) or showdotplot == no
                 then Double.NaN
                 else if useupper_lower == useupper_lower.upper then -8.5 else 6.25;
plot sumagg   = if IsNaN(close) or showdotplot == no
                 then Double.NaN
                 else if aggsum >= 3 or aggsum <= 1 then if useupper_lower == useupper_lower.upper then -8.25 else  6.5 else Double.NaN;
sumagg.SetPaintingStrategy(PaintingStrategy.POINTS);
sumagg.AssignValueColor(if aggsum >= 4
                           then Color.GREEN
                           else if aggsum <= 0 
                           then Color.RED   
                           else Color.WHITE);

input showcloud = yes;
    def cloudcolor = if aggsum == 4 then 1 else if cloudcolor[1] == 1 and aggsum !=0 then 1 else 0;
    def ccolor = cloudcolor;
    AddCloud(if showcloud and ccolor == 1 then Double.POSITIVE_INFINITY else Double.NaN, Double.NEGATIVE_INFINITY, Color.LIGHT_GREEN, Color.LIGHT_GREEN);
    AddCloud(if showcloud and ccolor == 0 then Double.POSITIVE_INFINITY else Double.NaN, Double.NEGATIVE_INFINITY, Color.LIGHT_RED, color2 = Color.LIGHT_RED);

#Squeeze Added
input showsqueeze = yes;
def bbupper = reference BollingerBands(length = 20, "num dev dn" = -2.0, "num dev up" = 2.0).UpperBand;
def kcupper = KeltnerChannels(length = 20, factor = 1.5).Upper_Band;
def Squeeze  = bbupper - kcupper < 0;
plot Squeezeplot = if showsqueeze and Squeeze then linediv else Double.NaN;
Squeezeplot.SetDefaultColor(Color.black);
Squeezeplot.SetPaintingStrategy(PaintingStrategy.POINTS);
Squeezeplot.SetLineWeight(1);
Squeezeplot.HideBubble();

#Count of Periods in consecutive squeeze
rec countsq = if Squeeze then countsq[1] + 1 else 0;
rec count1sq = if !Squeeze then count1sq[1] + 1 else 0;

#Expansion Bubbles
input n = 5;
def n1  = n + 1;
def c = close;
input showsqueezebubble = yes;

AddChartBubble(showsqueezebubble and !IsNaN(c[n1]) and IsNaN(c[n]),
               linediv[n1] ,
             ( if Squeeze[n1] then "S \n"+Round(countsq[n1], 2) else "NS \n" + count1sq[n1]) ,
               if aggsum[n1]>=3
               then color.green
               else if aggsum[n1]<=1
               then color.red
               else color.white);
input usealerts = no;
Alert(usealerts and between(aggsum[1],0,2) and aggsum>=3 and !squeeze, "Candles - All Green", Alert.Bar, Sound.Ding);
Alert(usealerts and between(aggsum[1],1,3) and aggsum<=1 and !squeeze, "Candles - All Red  ", Alert.Bar, Sound.Ding);
 
could you possibly share this indicator?
It still slows the computer, but it is better than my first attempt. I am sharing per your request, but I don't think this is all that useful due to the fact that it will continually repaint until the higher timeframe is complete.
See image in first post.

Ruby:
##Heiken Ashi Lower
##ver 210817.0 by theLEMband
## NOTE: THIS REPAINTS
declare lower;

input aggt1 = AggregationPeriod.FIVE_MIN;
def haCloset1 = ohlc4(period = aggt1);
def haOpent1 = if haOpent1[1] == 0 then haCloset1[1] else (haOpent1[1] + haCloset1[1]) / 2;
plot trendt1 = if close(period = aggt1) then 1 else Double.NaN;
trendt1.AssignValueColor(if haCloset1 > haOpent1 then Color.GREEN else if haCloset1 < haOpent1 then Color.RED else Color.WHITE);
trendt1.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt1.SetLineWeight(2);

input aggt2 = AggregationPeriod.FIFTEEN_MIN;
def haCloset2 = ohlc4(period = aggt2);
def haOpent2 = if haOpent2[1] == 0 then haCloset2[1] else (haOpent2[1] + haCloset2[1]) / 2;
plot trendt2 = if close(period = aggt2) then 2 else Double.NaN;
trendt2.AssignValueColor(if haCloset2 > haOpent2 then Color.GREEN else if haCloset2 < haOpent2 then Color.RED else Color.WHITE);
trendt2.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt2.SetLineWeight(2);

input aggt3 = AggregationPeriod.THIRTY_MIN;
def haCloset3 = ohlc4(period = aggt3);
def haOpent3 = if haOpent3[1] == 0 then haCloset3[1] else (haOpent3[1] + haCloset3[1]) / 2;
plot trendt3 = if close(period = aggt3) then 3 else Double.NaN;
trendt3.AssignValueColor(if haCloset3 > haOpent3 then Color.GREEN else if haCloset3 < haOpent3 then Color.RED else Color.WHITE);
trendt3.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt3.SetLineWeight(2);

input aggt4 = AggregationPeriod.HOUR;
def haCloset4 = ohlc4(period = aggt4);
def haOpent4 = if haOpent4[1] == 0 then haCloset4[1] else (haOpent4[1] + haCloset4[1]) / 2;
plot trendt4 = if close(period = aggt4) then 4 else Double.NaN;
trendt4.AssignValueColor(if haCloset4 > haOpent4 then Color.GREEN else if haCloset4 < haOpent4 then Color.RED else Color.WHITE);
trendt4.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt4.SetLineWeight(2);

input aggt5 = AggregationPeriod.TWO_HOURS;
def haCloset5 = ohlc4(period = aggt5);
def haOpent5 = if haOpent5[1] == 0 then haCloset5[1] else (haOpent5[1] + haCloset5[1]) / 2;
plot trendt5 = if close(period = aggt5) then 5 else Double.NaN;
trendt5.AssignValueColor(if haCloset5 > haOpent5 then Color.GREEN else if haCloset5 < haOpent5 then Color.RED else Color.WHITE);
trendt5.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt5.SetLineWeight(2);

input aggt6 = AggregationPeriod.FOUR_HOURS;
def haCloset6 = ohlc4(period = aggt6);
def haOpent6 = if haOpent6[1] == 0 then haCloset6[1] else (haOpent6[1] + haCloset6[1]) / 2;
def haHight6 = Max(high, Max(haCloset6, haOpent6));
def haLowt6 = Min(low, Min(haCloset6, haOpent6));
plot trendt6 = if close(period = aggt6) then 6 else Double.NaN;
trendt6.AssignValueColor(if haCloset6 > haOpent6 then Color.GREEN else if haCloset6 < haOpent6 then Color.RED else Color.WHITE);
trendt6.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt6.SetLineWeight(2);

input aggt7 = AggregationPeriod.DAY;
def haCloset7 = ohlc4(period = aggt7);
def haOpent7 = if haOpent7[1] == 0 then haCloset7[1] else (haOpent7[1] + haCloset7[1]) / 2;
plot trendt7 = if close(period = aggt7) then 7 else Double.NaN;
trendt7.AssignValueColor(if haCloset7 > haOpent7 then Color.GREEN else if haCloset7 < haOpent7 then Color.RED else Color.WHITE);
trendt7.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt7.SetLineWeight(2);

def test1 = if haCloset1 > haOpent1 then 1 else if haCloset1 < haOpent1 then -1 else 0;
def test2 = if haCloset2 > haOpent2 then 1 else if haCloset2 < haOpent2 then -1 else 0;
def test3 = if haCloset3 > haOpent3 then 1 else if haCloset3 < haOpent3 then -1 else 0;
def test4 = if haCloset4 > haOpent4 then 1 else if haCloset4 < haOpent4 then -1 else 0;
def test5 = if haCloset5 > haOpent5 then 1 else if haCloset5 < haOpent5 then -1 else 0;
def test6 = if haCloset6 > haOpent6 then 1 else if haCloset6 < haOpent6 then -1 else 0;
def test7 = if haCloset7 > haOpent7 then 1 else if haCloset7 < haOpent7 then -1 else 0;

def total = test1 + test2 + test3 + test4 + test5 + test6 + test7;


def NewLong = if total == 7 then 1 else 0;
def StillLong = if haCloset7 > haOpent7 and total != -7 then 1 else 0;
def Greenup = if NewLong or StillLong then 1 else 0;
def NewShort = if total == -7 then 1 else 0;
def StillShort = if  haCloset7 < haOpent7 and total != 7 then 1 else 0;
def Redup = if NewShort or StillShort then 1 else 0;

def cond1 = if Greenup == 1 then 7 else 0;
def cond2 = if Redup == 1 then 7 else 0;
AddCloud(cond1, cond2, Color.GREEN, Color.RED);

##Testing/Debugging
#plot abstot = AbsValue(total);
 
It still slows the computer, but it is better than my first attempt. I am sharing per your request, but I don't think this is all that useful due to the fact that it will continually repaint until the higher timeframe is complete.
See image in first post.

Ruby:
##Heiken Ashi Lower
##ver 210817.0 by theLEMband
## NOTE: THIS REPAINTS
declare lower;

input aggt1 = AggregationPeriod.FIVE_MIN;
def haCloset1 = ohlc4(period = aggt1);
def haOpent1 = if haOpent1[1] == 0 then haCloset1[1] else (haOpent1[1] + haCloset1[1]) / 2;
plot trendt1 = if close(period = aggt1) then 1 else Double.NaN;
trendt1.AssignValueColor(if haCloset1 > haOpent1 then Color.GREEN else if haCloset1 < haOpent1 then Color.RED else Color.WHITE);
trendt1.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt1.SetLineWeight(2);

input aggt2 = AggregationPeriod.FIFTEEN_MIN;
def haCloset2 = ohlc4(period = aggt2);
def haOpent2 = if haOpent2[1] == 0 then haCloset2[1] else (haOpent2[1] + haCloset2[1]) / 2;
plot trendt2 = if close(period = aggt2) then 2 else Double.NaN;
trendt2.AssignValueColor(if haCloset2 > haOpent2 then Color.GREEN else if haCloset2 < haOpent2 then Color.RED else Color.WHITE);
trendt2.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt2.SetLineWeight(2);

input aggt3 = AggregationPeriod.THIRTY_MIN;
def haCloset3 = ohlc4(period = aggt3);
def haOpent3 = if haOpent3[1] == 0 then haCloset3[1] else (haOpent3[1] + haCloset3[1]) / 2;
plot trendt3 = if close(period = aggt3) then 3 else Double.NaN;
trendt3.AssignValueColor(if haCloset3 > haOpent3 then Color.GREEN else if haCloset3 < haOpent3 then Color.RED else Color.WHITE);
trendt3.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt3.SetLineWeight(2);

input aggt4 = AggregationPeriod.HOUR;
def haCloset4 = ohlc4(period = aggt4);
def haOpent4 = if haOpent4[1] == 0 then haCloset4[1] else (haOpent4[1] + haCloset4[1]) / 2;
plot trendt4 = if close(period = aggt4) then 4 else Double.NaN;
trendt4.AssignValueColor(if haCloset4 > haOpent4 then Color.GREEN else if haCloset4 < haOpent4 then Color.RED else Color.WHITE);
trendt4.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt4.SetLineWeight(2);

input aggt5 = AggregationPeriod.TWO_HOURS;
def haCloset5 = ohlc4(period = aggt5);
def haOpent5 = if haOpent5[1] == 0 then haCloset5[1] else (haOpent5[1] + haCloset5[1]) / 2;
plot trendt5 = if close(period = aggt5) then 5 else Double.NaN;
trendt5.AssignValueColor(if haCloset5 > haOpent5 then Color.GREEN else if haCloset5 < haOpent5 then Color.RED else Color.WHITE);
trendt5.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt5.SetLineWeight(2);

input aggt6 = AggregationPeriod.FOUR_HOURS;
def haCloset6 = ohlc4(period = aggt6);
def haOpent6 = if haOpent6[1] == 0 then haCloset6[1] else (haOpent6[1] + haCloset6[1]) / 2;
def haHight6 = Max(high, Max(haCloset6, haOpent6));
def haLowt6 = Min(low, Min(haCloset6, haOpent6));
plot trendt6 = if close(period = aggt6) then 6 else Double.NaN;
trendt6.AssignValueColor(if haCloset6 > haOpent6 then Color.GREEN else if haCloset6 < haOpent6 then Color.RED else Color.WHITE);
trendt6.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt6.SetLineWeight(2);

input aggt7 = AggregationPeriod.DAY;
def haCloset7 = ohlc4(period = aggt7);
def haOpent7 = if haOpent7[1] == 0 then haCloset7[1] else (haOpent7[1] + haCloset7[1]) / 2;
plot trendt7 = if close(period = aggt7) then 7 else Double.NaN;
trendt7.AssignValueColor(if haCloset7 > haOpent7 then Color.GREEN else if haCloset7 < haOpent7 then Color.RED else Color.WHITE);
trendt7.SetPaintingStrategy(PaintingStrategy.POINTS);
trendt7.SetLineWeight(2);

def test1 = if haCloset1 > haOpent1 then 1 else if haCloset1 < haOpent1 then -1 else 0;
def test2 = if haCloset2 > haOpent2 then 1 else if haCloset2 < haOpent2 then -1 else 0;
def test3 = if haCloset3 > haOpent3 then 1 else if haCloset3 < haOpent3 then -1 else 0;
def test4 = if haCloset4 > haOpent4 then 1 else if haCloset4 < haOpent4 then -1 else 0;
def test5 = if haCloset5 > haOpent5 then 1 else if haCloset5 < haOpent5 then -1 else 0;
def test6 = if haCloset6 > haOpent6 then 1 else if haCloset6 < haOpent6 then -1 else 0;
def test7 = if haCloset7 > haOpent7 then 1 else if haCloset7 < haOpent7 then -1 else 0;

def total = test1 + test2 + test3 + test4 + test5 + test6 + test7;


def NewLong = if total == 7 then 1 else 0;
def StillLong = if haCloset7 > haOpent7 and total != -7 then 1 else 0;
def Greenup = if NewLong or StillLong then 1 else 0;
def NewShort = if total == -7 then 1 else 0;
def StillShort = if  haCloset7 < haOpent7 and total != 7 then 1 else 0;
def Redup = if NewShort or StillShort then 1 else 0;

def cond1 = if Greenup == 1 then 7 else 0;
def cond2 = if Redup == 1 then 7 else 0;
AddCloud(cond1, cond2, Color.GREEN, Color.RED);

##Testing/Debugging
#plot abstot = AbsValue(total);
Thank you for trying and I applaud you for your effort. The theory of this indicator sounds like it could... (A)simply and reduce the excessive amount of indicators on the charts and (B) Make easier decisions on trades and stop the "paralysis of analysis" of having too many indicators.
 

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
178 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