Я пытаюсь сделать VWAP с "автоматической привязкой", который будет определять, когда будет найдена новая точка разворота (самая высокая цена за интервал), и перезагружаться, начиная с этой точки.
Код, который у меня есть, таков:
//@version=3
study("Anchored VWAP2",overlay=true)
//calculating and plotting pivots
pvtLength = 20
pvtHigh = pivothigh(high, pvtLength, pvtLength)
pvtLow = pivotlow(low, pvtLength, pvtLength)
pvtHigh:= fixnan(pvtHigh)
pvtLow:= fixnan(pvtLow)
pvtHighColor = change(pvtHigh) != 0 ? na : maroon
pvtLowColor = change(pvtLow) != 0 ? na : green
plot(pvtHigh, color=pvtHighColor, transp=0, linewidth=1, offset=-pvtLength)
plot(pvtLow, color=pvtLowColor, transp=0, linewidth=1, offset=-pvtLength)
plot(pvtHigh, color=pvtHighColor, transp=0, linewidth=1, offset=0)
plot(pvtLow, color=pvtLowColor, transp=0, linewidth=1, offset=0)
//--------------------------------------------------------
//done with Pivot Points, now VWAP JOB (not working)
start = security(tickerid, '1', time)
newPivotHigh = change(pvtHigh) != 0 ? 1 : 0 //detect when new pivot is found
pivotTime = newPivotHigh ? time-(minute(time)-20) : na //grab the time when it occured (actual time less 20 minutes, because pivot length is always 20)
impulse_func = iff(time == pivotTime, 1, 0) //start plot only when the bar time is the pivot time
newSession = iff(newPivotHigh and change(start), 1, 0) //plot when current time changes and we have a new pivot
startSession = newSession * impulse_func
vwapsum = 0.0
volumesum = 0.0
myvwap = 0.0
vwapsum:= iff(startSession, high*volume, vwapsum[1]+high*volume)
volumesum:= iff(startSession, volume, volumesum[1]+volume)
myvwap:= vwapsum/volumesum
plot(myvwap, linewidth=3, transp=0, title='AVWAP')