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)