Skip to content

Instantly share code, notes, and snippets.

@iCodeForBananas
Created June 1, 2022 06:35
Show Gist options
  • Select an option

  • Save iCodeForBananas/433299f0b78db4f9ec824e06835850ed to your computer and use it in GitHub Desktop.

Select an option

Save iCodeForBananas/433299f0b78db4f9ec824e06835850ed to your computer and use it in GitHub Desktop.
//@version=5
indicator("Relative VWAP Std Dev Oscillator")
devUp1 = input(1.28, title="Stdev above (1)")
devDn1 = input(1.28, title="Stdev below (1)")
devUp2 = input(2.01, title="Stdev above (2)")
devDn2 = input(2.01, title="Stdev below (2)")
devUp3 = input(2.51, title="Stdev above (3)")
devDn3 = input(2.51, title="Stdev below (3)")
devUp4 = input(3.09, title="Stdev above (4)")
devDn4 = input(3.09, title="Stdev below (4)")
devUp5 = input(4.01, title="Stdev above (5)")
devDn5 = input(4.01, title="Stdev below (5)")
var float vwapsum = na
var float v2sum = na
var float volumesum = na
price = input(close)
start = request.security(syminfo.ticker, "D", time)
newSession = ta.change(start) ? 1 : 0
vwapsum := newSession ? hl2*volume : vwapsum[1]+hl2*volume
volumesum := newSession ? volume : volumesum[1]+volume
v2sum := newSession ? volume*hl2*hl2 : v2sum[1]+volume*hl2*hl2
myvwap = vwapsum/volumesum
dev = math.sqrt(math.max(v2sum/volumesum - myvwap*myvwap, 0))
myvwapu1= myvwap + devUp1 * dev
myvwapd1= myvwap - devDn1 * dev
myvwapu2= myvwap + devUp2 * dev
myvwapu3= myvwap + devUp3 * dev
myvwapd2= myvwap - devDn2 * dev
myvwapd3= myvwap - devDn3 * dev
myvwapu4= myvwap + devDn4 * dev
myvwapd4= myvwap - devDn4 * dev
plotValue = 0
plotValue := price >= myvwap and price < myvwapu1 ? 1 : plotValue
plotValue := price >= myvwapu1 and price < myvwapu2 ? 2 : plotValue
plotValue := price >= myvwapu2 and price < myvwapu3 ? 3 : plotValue
plotValue := price >= myvwapu3 and price < myvwapu4 ? 4 : plotValue
plotValue := price >= myvwapu4 ? 4 : plotValue
plotValue := price <= myvwap and price > myvwapd1 ? -1 : plotValue
plotValue := price <= myvwapd1 and price > myvwapd2 ? -2 : plotValue
plotValue := price <= myvwapd2 and price > myvwapd3 ? -3 : plotValue
plotValue := price <= myvwapd3 and price > myvwapd4 ? -4 : plotValue
plotValue := price <= myvwapd4 ? -4 : plotValue
// SPY std dev
var float svwapsum = na
var float sv2sum = na
var float svolumesum = na
sprice = request.security("SPY", timeframe.period, close)
sstart = request.security("SPY", "D", time)
shl2 = request.security("SPY", timeframe.period, hl2)
svolume = request.security("SPY", timeframe.period, volume)
snewSession = ta.change(sstart) ? 1 : 0
svwapsum := snewSession ? shl2*svolume : svwapsum[1]+shl2*svolume
svolumesum := snewSession ? svolume : svolumesum[1]+svolume
sv2sum := snewSession ? svolume*shl2*shl2 : sv2sum[1]+svolume*shl2*shl2
smyvwap = svwapsum/svolumesum
sdev = math.sqrt(math.max(sv2sum/svolumesum - smyvwap*smyvwap, 0))
smyvwapu1= smyvwap + devUp1 * sdev
smyvwapd1= smyvwap - devDn1 * sdev
smyvwapu2= smyvwap + devUp2 * sdev
smyvwapu3= smyvwap + devUp3 * sdev
smyvwapd2= smyvwap - devDn2 * sdev
smyvwapd3= smyvwap - devDn3 * sdev
smyvwapu4= smyvwap + devDn4 * sdev
smyvwapd4= smyvwap - devDn4 * sdev
splotValue = 0
splotValue := sprice >= smyvwap and sprice < smyvwapu1 ? 1 : splotValue
splotValue := sprice >= smyvwapu1 and sprice < smyvwapu2 ? 2 : splotValue
splotValue := sprice >= smyvwapu2 and sprice < smyvwapu3 ? 3 : splotValue
splotValue := sprice >= smyvwapu3 and sprice < smyvwapu4 ? 4 : splotValue
splotValue := sprice >= smyvwapu4 ? 4 : splotValue
splotValue := sprice <= smyvwap and sprice > smyvwapd1 ? -1 : splotValue
splotValue := sprice <= smyvwapd1 and sprice > smyvwapd2 ? -2 : splotValue
splotValue := sprice <= smyvwapd2 and sprice > smyvwapd3 ? -3 : splotValue
splotValue := sprice <= smyvwapd3 and sprice > smyvwapd4 ? -4 : splotValue
splotValue := sprice <= smyvwapd4 ? -4 : splotValue
diffPlotValue = plotValue - splotValue
diffPlotValue := math.max(math.min(diffPlotValue, 3), -3)
plotchar(splotValue, "SPY std dev", "", location = location.top)
plotchar(plotValue, "Ticker std dev", "", location = location.top)
plotchar(diffPlotValue, "Diff std dev", "", location = location.top)
plotColor = color.new(color.gray, 100)
transparencyLevel = 100
transparencyLevel := diffPlotValue > 0 and diffPlotValue <= 1 ? 70 : transparencyLevel
transparencyLevel := diffPlotValue > 1 and diffPlotValue <= 2 ? 0 : transparencyLevel
transparencyLevel := diffPlotValue > 2 and diffPlotValue <= 3 ? 0 : transparencyLevel
transparencyLevel := diffPlotValue < 0 and diffPlotValue >= -1 ? 70 : transparencyLevel
transparencyLevel := diffPlotValue < -1 and diffPlotValue >= -2 ? 0 : transparencyLevel
transparencyLevel := diffPlotValue < -2 and diffPlotValue >= -3 ? 0 : transparencyLevel
plotColor := diffPlotValue > 0 ? color.new(color.green, transparencyLevel) : plotColor
plotColor := diffPlotValue < 0 ? color.new(color.red, transparencyLevel) : plotColor
plot(1, color=plotColor, style=plot.style_columns)
// plot(0, color=color.gray)
// plot(-4, color=color.gray)
// plot(4, color=color.gray)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment