Я рассчитываю VWAP по секциям, каждый раз, когда закрытие имеет разницу с рабочим VWAP, превышающим отклонение, он переворачивает тренд и начинает новый счет VWAP. Объем должен быть агрегирован в пределах каждого тренда.
Пока объем агрегирует в восходящем тренде, но не в нисходящем. Кроме того, при переключении с понижающего на восходящее значение громкость восходящего тренда «крадет» последний том нисходящего тренда и добавляет его к своему собственному. Это все очень запутанно, поскольку логика довольно проста ...
Вот мой код:
//@version=3
study("My Script")
deviation = input(title = "Deviation %", type=float, defval = 0.1)
running_vol = 0.0
running_sum = 0.0
Tup = true
Tdown = false
running_vol := nz(volume[1]) == 0 ? 0 : running_vol[1] + volume
running_sum := nz(volume[1]) == 0 ? 0 : running_sum[1] + (close*volume)
volwap = (running_sum/running_vol)
// flip to downtrend
if (Tup == true) and (Tdown == false) and (close < close[1]) and ((1 - (close/volwap)) > (deviation/100.0))
// reset running_vol and sum to current volume and sum since it's a new trend
running_vol := volume
running_sum := (close*volume)
// flip the trend switches
Tup := false
Tdown := true
// flip to uptrend
if (Tup == false) and (Tdown == true) and (close > close[1]) and (((close/volwap) - 1) > (deviation/100.0))
running_vol := volume
running_sum := (close*volume)
Tup := true
Tdown := false
up = Tup == true ? running_vol : 0
down = Tdown == true ? running_vol : 0
plot(up, style=histogram, color=green, linewidth=3)
plot(down, style=histogram, color=red, linewidth=3)