Is there a way to modify this code so that the heikin ashi candles are only painted for the current trend and all previous heikin ashi candles are grayed out? So using this picture as an example, only the last 4 heikin ashi candles would be painted green and all previous heikin ashi candles would be grayed out.
Thanks very much in advance for any assistance!
See how this works. Set input debug to test how it identifies through the barnumber() of the highestall(last) the beginning of the last color stream.
Ruby:# Heikin Ashi Smoothed # HoboTheClown / blt # 9.15.2016 # HoboTheClown: I recently found a code for smoothed heiken ashi bars, # however for some reason all the bars are displayed as one color (going up or down). # # blt: Modified the code and replaced the addchart code at the bottom, # you should now see proper coloring. This is how that was coded to plot # as an overlay to the chart candlesticks. That is two sets of candles, # with different coloring for each. If you have the heikin ashi candle # coloring code on your chart, then they will likely appear the same color. #Update that "fixes" the green candles. #JTP #02/7/2021 input period = 20; input hideCandles = Yes; #Now functional - JTP input candleSmoothing = {default Valcu, Vervoort}; DefineGlobalColor("RisingMA", Color.GREEN); DefineGlobalColor("FallingMA", Color.RED); input movingAverageType = {Simple, default Exponential, Weighted, Hull, Variable, TEMA}; def openMA; def closeMA; def highMA; def lowMA; switch (movingAverageType) { case Simple: openMA = CompoundValue(1, Average(open, period), open); closeMA = CompoundValue(1, Average(close, period), close); highMA = CompoundValue(1, Average(high, period), high); lowMA = CompoundValue(1, Average(low, period), low); case Exponential: openMA = CompoundValue(1, ExpAverage(open, period), open); closeMA = CompoundValue(1, ExpAverage(close, period), close); highMA = CompoundValue(1, ExpAverage(high, period), high); lowMA = CompoundValue(1, ExpAverage(low, period), low); case Weighted: openMA = CompoundValue(1, WMA(open, period), open); closeMA = CompoundValue(1, WMA(close, period), close); highMA = CompoundValue(1, WMA(high, period), high); lowMA = CompoundValue(1, WMA(low, period), low); case Hull: openMA = CompoundValue(1, HullMovingAvg(open, period), open); closeMA = CompoundValue(1, HullMovingAvg(close, period), close); highMA = CompoundValue(1, HullMovingAvg(high, period), high); lowMA = CompoundValue(1, HullMovingAvg(low, period), low); case Variable: openMA = CompoundValue(1, VariableMA(open, period), open); closeMA = CompoundValue(1, VariableMA(close, period), close); highMA = CompoundValue(1, VariableMA(high, period), high); lowMA = CompoundValue(1, VariableMA(low, period), low); case TEMA: openMA = CompoundValue(1, TEMA(open, period), open); closeMA = CompoundValue(1, TEMA(close, period), close); highMA = CompoundValue(1, TEMA(high, period), high); lowMA = CompoundValue(1, TEMA(low, period), low); } HidePricePlot(hideCandles); def haOpen; def haClose; switch (candleSmoothing) { case Valcu: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) / 4.0) / 2.0), open); haClose = ((openMA + highMA + lowMA + closeMA) / 4.0) ; case Vervoort: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) / 4.0) / 2.0), open); haClose = ((((openMA + highMA + lowMA + closeMA) / 4.0) + haOpen + Max(highMA, haOpen) + Min(lowMA, haOpen)) / 4.0); } plot o = haOpen + 0; o.Hide(); ### Wicks and Shadows def haLow = Min(lowMA, haOpen); def haHigh = Max(highMA, haOpen); input debug = no; def last = if haOpen[1] < haClose[1] and haOpen > haClose then BarNumber() else if haOpen[1] > haClose[1] and haOpen < haClose then BarNumber() else Double.NaN; AddLabel(debug, HighestAll(last)); plot xlast = if !debug then Double.NaN else BarNumber(); xlast.SetPaintingStrategy(PaintingStrategy.VALUES_BELOW); ### NO LONGER SUPPORTED BY TOS ### ### AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray); #Red Candlesticks -----------------------------------------------------------------| input charttype = ChartType.CANDLE; def haOpen_fall = if haOpen > haClose then haOpen else Double.NaN; def haHigh_fall = if haOpen >= haClose then haHigh else Double.NaN; def haLow_fall = if haOpen >= haClose then haLow else Double.NaN; def haClose_fall = if haOpen >= haClose then haClose else Double.NaN; AddChart(growColor = Color.RED, fallColor = Color.GREEN, neutralColor = Color.CURRENT, high = if BarNumber() >= HighestAll(last) then haHigh_fall else Double.NaN, low = haLow_fall, open = haOpen_fall, close = haClose_fall , type = ChartType.CANDLE); AddChart(growColor = Color.GRAY, fallColor = Color.GREEN, neutralColor = Color.CURRENT, high = if BarNumber() < HighestAll(last) then haHigh_fall else Double.NaN, low = haLow_fall, open = haOpen_fall, close = haClose_fall , type = ChartType.CANDLE); #Green Candlesticks -----------------------------------------------------------------| #Removed and/or replaced - JTP #def HAclose1 = if haOpen<=haClose # then hahigh # else double.nan; #def HAclose1 = ohlc4 -1; #def HAopen1 = if haopen<=haclose # then haclose # then CompoundValue(1, (HAopen[1] + HAclose[1]) /2, (open[1] + close[1]) / 2) # else double.nan; def haOpen_rise = if haOpen < haClose then haClose else Double.NaN; def haHigh_rise = if haOpen <= haClose then haHigh else Double.NaN; def haLow_rise = if haOpen <= haClose then haLow else Double.NaN; def haClose_rise = if haOpen <= haClose then haOpen else Double.NaN; AddChart(growColor = Color.GREEN, fallColor = Color.RED, neutralColor = Color.CURRENT, high = if BarNumber() >= HighestAll(last) then haHigh_rise else Double.NaN, low = haLow_rise, open = haOpen_rise, close = haClose_rise, type = ChartType.CANDLE); AddChart(growColor = Color.GRAY, fallColor = Color.RED, neutralColor = Color.CURRENT, high = if BarNumber() < HighestAll(last) then haHigh_rise else Double.NaN, low = haLow_rise, open = haOpen_rise, close = haClose_rise, type = ChartType.CANDLE); # End Study ##############################################################################