0

I am trying to change the color of candles based on vwap and previous day vwap. I am able to do that with barcolor function. I now need to change color of the wicks also and cannot use barcolor. I tried to use plotcandle and it works but for some reason when I click anywhere on the chart, the color of the candle changes back to default red and green. Is there a solution for this?

This is the working code with barcolor

   //@version=5
   indicator("VWAP Color", overlay=true)

vwapSrc = hlc3
daily = "D"

computeVWAP(src, isNewPeriod) =>
    var float sumSrcVol = na
    var float sumVol = na
    var float sumSrcSrcVol = na
    sumSrcVol := isNewPeriod ? src * volume : src * volume + sumSrcVol[1]
    sumVol := isNewPeriod ? volume : volume + sumVol[1]
    sumSrcSrcVol := isNewPeriod ? volume * math.pow(src, 2) : volume * math.pow(src, 2) + sumSrcSrcVol[1]
    vwap = sumSrcVol / sumVol
    prevwap = 0.0
    prevwap := isNewPeriod ? vwap[1] : prevwap[1]
    [vwap, prevwap]

[currentDayVWAP, prevDayVWAP] = computeVWAP(vwapSrc, ta.change(time(daily)))

ema5 = ta.ema(close, 5)

isRed = close < prevDayVWAP and close < currentDayVWAP and close < ema5
isGreen = close > prevDayVWAP and close > currentDayVWAP and close > ema5
isSkyBlue = close < prevDayVWAP and close > currentDayVWAP
isYellow = close > prevDayVWAP and close < currentDayVWAP

candleColor = isRed ? color.red : isGreen ? color.green : isSkyBlue ? color.blue : isYellow ? color.yellow : na

var color candleColorPrev = na
candleColorPrev := nz(candleColorPrev[1], na)
candleColorChanged = candleColor != candleColorPrev

candleColor := ta.valuewhen(isRed or isGreen or isSkyBlue or isYellow, candleColor, 0)

barcolor(candleColor)

EDIT: -------- This code does not work

//@version=5
indicator("VWAP Color", overlay = true)

vwapSrc = hlc3
daily = "D"

computeVWAP(src, isNewPeriod) =>
    var float sumSrcVol = na
    var float sumVol = na
    var float sumSrcSrcVol = na
    sumSrcVol := isNewPeriod ? src * volume : src * volume + sumSrcVol[1]
    sumVol := isNewPeriod ? volume : volume + sumVol[1]
    sumSrcSrcVol := isNewPeriod ? volume * math.pow(src, 2) : volume * math.pow(src, 2) + sumSrcSrcVol[1]
    vwap = sumSrcVol / sumVol
    prevwap = 0.0
    prevwap := isNewPeriod ? vwap[1] : prevwap[1]
    [vwap, prevwap]

[currentDayVWAP, prevDayVWAP] = computeVWAP(vwapSrc, ta.change(time(daily)))

ema5 = ta.ema(close, 5)

isRed = close < prevDayVWAP and close < currentDayVWAP and close < ema5
isGreen = close > prevDayVWAP and close > currentDayVWAP and close > ema5
isSkyBlue = close < prevDayVWAP and close > currentDayVWAP
isYellow = close > prevDayVWAP and close < currentDayVWAP

candleColor = isRed ? color.red : isGreen ? color.green : isSkyBlue ? color.blue : isYellow ? color.yellow : na

var color candleColorPrev = na
candleColorPrev := nz(candleColorPrev[1], na)
candleColorChanged = candleColor != candleColorPrev

candleColor := ta.valuewhen(isRed or isGreen or isSkyBlue or isYellow, candleColor, 0)

//barcolor(candleColor)

 //Determine wick color
wickColor = close >= open ? color.blue : color.yellow
plotcandle(open, high, low, close, "My candles", candleColor, wickColor, bordercolor=wickColor,editable = false)

1 Answers1

1

Change visual order to Bring to Front

Bring to Front

Gu5tavo71
  • 706
  • 1
  • 4
  • 11