declare lower;
input paintBars = yes;
def trend = {default init, uptrend, downtrend};
if (Close[1] > High[2]) {
trend = trend.uptrend;
} else if (Close[1] < Low[2]) {
trend = trend.downtrend;
} else {
trend = trend[1];
}
def count = if (IsNaN(close)) then Double.NaN else if trend != trend[1] then volume else count[1] + volume;
plot AccVolume;
if (trend == trend.uptrend) {
AccVolume = count;
} else if (trend == trend.downtrend) {
AccVolume = -count;
} else {
AccVolume = Double.NaN;
}
AccVolume.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
AccVolume.DefineColor("Uptrend", Color.UPTICK);
AccVolume.DefineColor("Downtrend", Color.DOWNTICK);
AccVolume.AssignValueColor(if AccVolume >= 0 then AccVolume.Color("Uptrend") else AccVolume.Color("Downtrend"));
DefineGlobalColor("Uptrend", Color.UPTICK);
DefineGlobalColor("Downtrend", Color.DOWNTICK);
AssignPriceColor(if !paintBars
then Color.CURRENT
else if AccVolume >= 0
then GlobalColor("Uptrend")
else GlobalColor("Downtrend"));