Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

//@version=4

// Shows the Daily, Weekly, Monthly, Quarterly, and Yearly VWAP. Also
// shows the previous closing VWAP, which is usually very near the
// HLC3 standard pivot for the previous time frame. i.e. The previous
// daily VWAP closing price is usually near the current Daily Pivot.
study("VWAP", overlay = true)

showlastSR = input(title = "Show Only Last Period SR", defval = true)

std1 = input(title = "STDEV 1", defval = 1, type = input.float, step = 0.1)


std2 = input(title = "STDEV 2", defval = 2, type = input.float, step = 0.1)
std3 = input(title = "STDEV 3", defval = 3, type = input.float, step = 0.1)

showStd = input(true, title = "Show STDEV Bands")


showPrev = input(true, title = "Show Previous VWAP")
showPrevBand = input(false, title = "Show Previous STDEV = 1 Bands")
bands = input(title = "STDEV Bands Timeframe", defval = "1. Day", options=["1.
Day", "2. Week", "3. Month", "4. Quarter", "5. Year"])

dLabel = input(false, "Day VWAP Label")


wLabel = input(false, "Week VWAP Label")
mLabel = input(false, "Month VWAP Label")
qLabel = input(false, "Quarter VWAP Label")
yLabel = input(false, "Year VWAP Label")

textC = input(title = "Text Color", defval = "White", options=["White", "Black",


"Red", "Green", "Blue"])
size = input(2, title = "Label Size (0 = Auto, 1 - 5)", minval = 0, maxval = 5)
_opacity1 = input(50, title = "Label Opacity (0 - 100)", minval = 0, maxval = 100,
step = 10)
_opacity2 = input(100, title = "Line Opacity (0 - 100)", minval = 0, maxval = 100,
step = 10)
lstyle = input(title = "Line Style", defval = "Dashed", options=["Solid", "Dotted",
"Dashed"])
lineWidth = input(2, title = "Line Thickness (1 - 4)", minval = 1, maxval = 4)

opacity = floor(_opacity1 / 10) * 10


opacity2 = floor(_opacity2 / 10) * 10

offset = input(0, title = "Label Offset", minval = 0, maxval = 1000)

showPrice = input(true, "Show Price Values?")


showSessType = input(true, "Show Session Type?")

rez1 = iff(bands == "1. Day", "D", iff(bands == "2. Week", "W", iff(bands == "3.
Month", "M", iff(bands == "4. Quarter", "3M", "12M"))))

islastSR = showlastSR ? security(syminfo.tickerid, rez1, barstate.islast, lookahead


= true) : true

startD = security(syminfo.tickerid, "D", time, lookahead = true)


startW = security(syminfo.tickerid, "W", time, lookahead = true)
startM = security(syminfo.tickerid, "M", time, lookahead = true)
startQ = security(syminfo.tickerid, "3M", time, lookahead = true)
startY = security(syminfo.tickerid, "12M", time, lookahead = true)

newSessionD = iff(change(startD), 1, 0)
newSessionW = iff(change(startW), 1, 0)
newSessionM = iff(change(startM), 1, 0)
newSessionQ = iff(change(startQ), 1, 0)
newSessionY = iff(change(startY), 1, 0)

getVWAP(newSession) =>
p = hlc3 * volume
p := newSession ? hlc3 * volume : p[1] + hlc3 * volume

vol = 0.0
vol := newSession ? volume : vol[1] + volume

v = p / vol

// Incremental weighted standard deviation (rolling)


// http://people.ds.cam.ac.uk/fanf2/hermes/doc/antiforgery/stats.pdf (part 5)
// x[i] = hlc3[i], w[i] = volume[i], u[i] - v[i]

Sn = 0.0
Sn := newSession ? 0 : Sn[1] + volume * (hlc3 - v[1]) * (hlc3 - v)
std = sqrt(Sn / vol)

[v, std]

[vD, stdevD] = getVWAP(newSessionD)


[vW, stdevW] = getVWAP(newSessionW)
[vM, stdevM] = getVWAP(newSessionM)
[vQ, stdevQ] = getVWAP(newSessionQ)
[vY, stdevY] = getVWAP(newSessionY)

dColor = #008000FF
wColor = #008080DD
mColor = #808000FF
qColor = #801010FF
yColor = #091580FF

vDplot = plot(islastSR ? vD : na, title = "VWAP - Daily", color = #00FF00FF, style


= plot.style_line, transp = 10, linewidth = 1)
vWplot = plot(islastSR ? vW : na, title = "VWAP - Weekly", color = #00E2E2FF, style
= plot.style_circles, transp = 10, linewidth = 2, display = display.none)
vMplot = plot(islastSR ? vM : na, title = "VWAP - Monthly", color = #C0C000FF,
style = plot.style_circles, transp = 10, linewidth = 3, display = display.none)
vQplot = plot(islastSR ? vQ : na, title = "VWAP - Quarterly", color = #BF1111FF,
style = plot.style_circles, transp = 10, linewidth = 4, display = display.none)
vYplot = plot(islastSR ? vY : na, title = "VWAP - Yearly", color = #0921FFDD, style
= plot.style_circles, transp = 10, linewidth = 4, display = display.none)
v = iff(rez1 == "W", vW, iff(rez1 == "M", vM, iff(rez1 == "3M", vQ, iff(rez1 ==
"12M", vY, vD))))
s = iff(rez1 == "W", stdevW, iff(rez1 == "M", stdevM, iff(rez1 == "3M", stdevQ,
iff(rez1 == "12M", stdevY, stdevD))))
vPlot = plot(v, title = "VWAP - Selected (transparent, not used)", color =
#00000000)

s1up = plot(islastSR and showStd ? v + std1 * s : na, title = "VWAP - STDEV 1",
color = #00FFFFDD, style = plot.style_line, linewidth = 1)
s1dn = plot(islastSR and showStd ? v - std1 * s : na, title = "VWAP - STDEV 1",
color = #00FFFFDD, style = plot.style_line, linewidth = 1)
s2up = plot(islastSR and showStd ? v + std2 * s : na, title = "VWAP - STDEV 2",
color = #FF00FFDD, style = plot.style_line, linewidth = 1)
s2dn = plot(islastSR and showStd ? v - std2 * s : na, title = "VWAP - STDEV 2",
color = #FF00FFDD, style = plot.style_line, linewidth = 1)
s3up = plot(islastSR and showStd ? v + std3 * s : na, title = "VWAP - STDEV 3",
color = #CCCCCCDD, style = plot.style_line, linewidth = 1)
s3dn = plot(islastSR and showStd ? v - std3 * s : na, title = "VWAP - STDEV 3",
color = #CCCCCCDD, style = plot.style_line, linewidth = 1)

//fill(vPlot, s1up, title = "VWAP - S1 Fill (Up)", color = #00FFFF1C)


//fill(vPlot, s1dn, title = "VWAP - S1 Fill (Down)", color = #00FFFF1C)
//
//fill(s1up, s2up, title = "S1 - S2 Fill (Up)", color = #FF00FF1C)
//fill(s1dn, s2dn, title = "S1 - S2 Fill (Down)", color = #FF00FF1C)
//
//fill(s2up, s3up, title = "S2 - S3 Fill (Up)", color = #CCCCCC1C)
//fill(s2dn, s3dn, title = "S2 - S3 Fill (Down)", color = #CCCCCC1C)

pvD = valuewhen(newSessionD, vD[1], 0)


pvW = valuewhen(newSessionW, vW[1], 0)
pvM = valuewhen(newSessionM, vM[1], 0)
pvQ = valuewhen(newSessionQ, vQ[1], 0)
pvY = valuewhen(newSessionY, vY[1], 0)

plot(islastSR and showPrev ? pvD : na, title = "Previous VWAP - Daily", color = pvD
!= pvD[1] ? na : color.red, style = plot.style_line, transp = 10, linewidth = 1)
plot(islastSR and showPrev ? pvW : na, title = "Previous VWAP - Weekly", color =
#40E20099, style = plot.style_cross, transp = 10, linewidth = 2, display =
display.none)
plot(islastSR and showPrev ? pvM : na, title = "Previous VWAP - Monthly", color =
#80C60099, style = plot.style_cross, transp = 10, linewidth = 3, display =
display.none)
plot(islastSR and showPrev ? pvQ : na, title = "Previous VWAP - Quarterly", color =
#BFA90099, style = plot.style_cross, transp = 10, linewidth = 4, display =
display.none)
plot(islastSR and showPrev ? pvY : na, title = "Previous VWAP - Yearly", color =
#FF8C0099, style = plot.style_cross, transp = 10, linewidth = 4, display =
display.none)

pvDS1up = valuewhen(newSessionD, vD[1] + std1 * stdevD[1], 0)


pvDS1dn = valuewhen(newSessionD, vD[1] - std1 * stdevD[1], 0)
pvWS1up = valuewhen(newSessionW, vW[1] + std1 * stdevW[1], 0)
pvWS1dn = valuewhen(newSessionW, vW[1] - std1 * stdevW[1], 0)
pvMS1up = valuewhen(newSessionM, vM[1] + std1 * stdevM[1], 0)
pvMS1dn = valuewhen(newSessionM, vM[1] - std1 * stdevM[1], 0)
pvQS1up = valuewhen(newSessionQ, vQ[1] + std1 * stdevQ[1], 0)
pvQS1dn = valuewhen(newSessionQ, vQ[1] - std1 * stdevQ[1], 0)
pvYS1up = valuewhen(newSessionY, vY[1] + std1 * stdevY[1], 0)
pvYS1dn = valuewhen(newSessionY, vY[1] - std1 * stdevY[1], 0)
plot(showPrevBand ? pvDS1up : na, title = "Previous VWAP S1 - Daily", color =
#00FF0099, style = plot.style_cross, transp = 10, linewidth = 1)
plot(showPrevBand ? pvDS1dn : na, title = "Previous VWAP S1 - Daily", color =
#00FF0099, style = plot.style_cross, transp = 10, linewidth = 1)
plot(showPrevBand ? pvWS1up : na, title = "Previous VWAP S1 - Weekly", color =
#40E20099, style = plot.style_cross, transp = 10, linewidth = 2)
plot(showPrevBand ? pvWS1dn : na, title = "Previous VWAP S1 - Weekly", color =
#40E20099, style = plot.style_cross, transp = 10, linewidth = 2)
plot(showPrevBand ? pvMS1up : na, title = "Previous VWAP S1 - Monthly", color =
#80C60099, style = plot.style_cross, transp = 10, linewidth = 3)
plot(showPrevBand ? pvMS1dn : na, title = "Previous VWAP S1 - Monthly", color =
#80C60099, style = plot.style_cross, transp = 10, linewidth = 3)
plot(showPrevBand ? pvQS1up : na, title = "Previous VWAP S1 - Quarterly", color =
#BFA90099, style = plot.style_cross, transp = 10, linewidth = 4)
plot(showPrevBand ? pvQS1dn : na, title = "Previous VWAP S1 - Quarterly", color =
#BFA90099, style = plot.style_cross, transp = 10, linewidth = 4)
plot(showPrevBand ? pvYS1up : na, title = "Previous VWAP S1 - Yearly", color =
#FF8C0099, style = plot.style_cross, transp = 10, linewidth = 4)
plot(showPrevBand ? pvYS1dn : na, title = "Previous VWAP S1 - Yearly", color =
#FF8C0099, style = plot.style_cross, transp = 10, linewidth = 4)

// Labels

textColor = textC == "White" ? #D0D0D0FF : textC == "Black" ? #000000FF : textC ==


"Red" ? #D00000FF : textC == "Green" ? #00D000FF : #0000D0FF
labelSize = size == 0 ? size.auto : size == 1 ? size.tiny : size == 2 ?
size.small : size == 3 ? size.normal : size == 4 ? size.large : size.huge
lineStyle = lstyle == "Solid" ? line.style_solid : lstyle == "Dotted" ?
line.style_dotted : line.style_dashed

getLabel(x, price, prefix, col, textCol, isUp, newSession) =>


var label l = na

if not na(price) and x > 0


if na(l)
l := label.new(x, price, color = col, textcolor = textCol, size =
labelSize)

p = round(price / syminfo.mintick) * syminfo.mintick

label.set_x(l, x)
label.set_y(l, price)
label.set_style(l, isUp ? label.style_labeldown : label.style_labelup)
label.set_text(l, prefix + "\n" + tostring(p))

getCurrentLine(x, price, col) =>


var line l = na

if not na(price) and x > 0


if na(l)
l := line.new(x, price, bar_index, price, extend = extend.none, width =
lineWidth, style = lineStyle)

line.set_y1(l, nz(price, close[1]))


line.set_y2(l, nz(price, close[1]))
line.set_x1(l, x)
line.set_x2(l, max(bar_index, 0))
line.set_color(l, na(price) ? #00000000 : col)

dColorLabel = opacity == 100 ? color.new(dColor, 0) : opacity == 90 ?


color.new(dColor, 10) : opacity == 80 ? color.new(dColor, 20) : opacity == 70 ?
color.new(dColor, 30) : opacity == 60 ? color.new(dColor, 40) : opacity == 50 ?
color.new(dColor, 50) : opacity == 40 ? color.new(dColor, 60) : opacity == 30 ?
color.new(dColor, 70) : opacity == 20 ? color.new(dColor, 80) : opacity == 10 ?
color.new(dColor, 90) : color.new(dColor, 100)
wColorLabel = opacity == 100 ? color.new(wColor, 0) : opacity == 90 ?
color.new(wColor, 10) : opacity == 80 ? color.new(wColor, 20) : opacity == 70 ?
color.new(wColor, 30) : opacity == 60 ? color.new(wColor, 40) : opacity == 50 ?
color.new(wColor, 50) : opacity == 40 ? color.new(wColor, 60) : opacity == 30 ?
color.new(wColor, 70) : opacity == 20 ? color.new(wColor, 80) : opacity == 10 ?
color.new(wColor, 90) : color.new(wColor, 100)
mColorLabel = opacity == 100 ? color.new(mColor, 0) : opacity == 90 ?
color.new(mColor, 10) : opacity == 80 ? color.new(mColor, 20) : opacity == 70 ?
color.new(mColor, 30) : opacity == 60 ? color.new(mColor, 40) : opacity == 50 ?
color.new(mColor, 50) : opacity == 40 ? color.new(mColor, 60) : opacity == 30 ?
color.new(mColor, 70) : opacity == 20 ? color.new(mColor, 80) : opacity == 10 ?
color.new(mColor, 90) : color.new(mColor, 100)
qColorLabel = opacity == 100 ? color.new(qColor, 0) : opacity == 90 ?
color.new(qColor, 10) : opacity == 80 ? color.new(qColor, 20) : opacity == 70 ?
color.new(qColor, 30) : opacity == 60 ? color.new(qColor, 40) : opacity == 50 ?
color.new(qColor, 50) : opacity == 40 ? color.new(qColor, 60) : opacity == 30 ?
color.new(qColor, 70) : opacity == 20 ? color.new(qColor, 80) : opacity == 10 ?
color.new(qColor, 90) : color.new(qColor, 100)
yColorLabel = opacity == 100 ? color.new(yColor, 0) : opacity == 90 ?
color.new(yColor, 10) : opacity == 80 ? color.new(yColor, 20) : opacity == 70 ?
color.new(yColor, 30) : opacity == 60 ? color.new(yColor, 40) : opacity == 50 ?
color.new(yColor, 50) : opacity == 40 ? color.new(yColor, 60) : opacity == 30 ?
color.new(yColor, 70) : opacity == 20 ? color.new(yColor, 80) : opacity == 10 ?
color.new(yColor, 90) : color.new(yColor, 100)
getLabel(max(0, bar_index - offset), showPrice and dLabel ? vD : na, "VWAP" +
(showSessType ? " (Day)" : ""), dColorLabel, textColor, close[1] < vD, newSessionD)
getLabel(max(0, bar_index - offset), showPrice and wLabel ? vW : na, "VWAP" +
(showSessType ? " (Week)" : ""), wColorLabel, textColor, close[1] < vW,
newSessionD)
getLabel(max(0, bar_index - offset), showPrice and mLabel ? vM : na, "VWAP" +
(showSessType ? " (Month)" : ""), mColorLabel, textColor, close[1] < vM,
newSessionD)
getLabel(max(0, bar_index - offset), showPrice and qLabel ? vQ : na, "VWAP" +
(showSessType ? " (Quarter)" : ""), qColorLabel, textColor, close[1] < vQ,
newSessionD)
getLabel(max(0, bar_index - offset), showPrice and yLabel ? vY : na, "VWAP" +
(showSessType ? " (Year)" : ""), yColorLabel, textColor, close[1] < vY,
newSessionD)
dColorLine = opacity2 == 100 ? color.new(dColor, 0) : opacity2 == 90 ?
color.new(dColor, 10) : opacity2 == 80 ? color.new(dColor, 20) : opacity2 == 70 ?
color.new(dColor, 30) : opacity2 == 60 ? color.new(dColor, 40) : opacity2 == 50 ?
color.new(dColor, 50) : opacity2 == 40 ? color.new(dColor, 60) : opacity2 == 30 ?
color.new(dColor, 70) : opacity2 == 20 ? color.new(dColor, 80) : opacity2 == 10 ?
color.new(dColor, 90) : color.new(dColor, 100)
wColorLine = opacity2 == 100 ? color.new(wColor, 0) : opacity2 == 90 ?
color.new(wColor, 10) : opacity2 == 80 ? color.new(wColor, 20) : opacity2 == 70 ?
color.new(wColor, 30) : opacity2 == 60 ? color.new(wColor, 40) : opacity2 == 50 ?
color.new(wColor, 50) : opacity2 == 40 ? color.new(wColor, 60) : opacity2 == 30 ?
color.new(wColor, 70) : opacity2 == 20 ? color.new(wColor, 80) : opacity2 == 10 ?
color.new(wColor, 90) : color.new(wColor, 100)
mColorLine = opacity2 == 100 ? color.new(mColor, 0) : opacity2 == 90 ?
color.new(mColor, 10) : opacity2 == 80 ? color.new(mColor, 20) : opacity2 == 70 ?
color.new(mColor, 30) : opacity2 == 60 ? color.new(mColor, 40) : opacity2 == 50 ?
color.new(mColor, 50) : opacity2 == 40 ? color.new(mColor, 60) : opacity2 == 30 ?
color.new(mColor, 70) : opacity2 == 20 ? color.new(mColor, 80) : opacity2 == 10 ?
color.new(mColor, 90) : color.new(mColor, 100)
qColorLine = opacity2 == 100 ? color.new(qColor, 0) : opacity2 == 90 ?
color.new(qColor, 10) : opacity2 == 80 ? color.new(qColor, 20) : opacity2 == 70 ?
color.new(qColor, 30) : opacity2 == 60 ? color.new(qColor, 40) : opacity2 == 50 ?
color.new(qColor, 50) : opacity2 == 40 ? color.new(qColor, 60) : opacity2 == 30 ?
color.new(qColor, 70) : opacity2 == 20 ? color.new(qColor, 80) : opacity2 == 10 ?
color.new(qColor, 90) : color.new(qColor, 100)
yColorLine = opacity2 == 100 ? color.new(yColor, 0) : opacity2 == 90 ?
color.new(yColor, 10) : opacity2 == 80 ? color.new(yColor, 20) : opacity2 == 70 ?
color.new(yColor, 30) : opacity2 == 60 ? color.new(yColor, 40) : opacity2 == 50 ?
color.new(yColor, 50) : opacity2 == 40 ? color.new(yColor, 60) : opacity2 == 30 ?
color.new(yColor, 70) : opacity2 == 20 ? color.new(yColor, 80) : opacity2 == 10 ?
color.new(yColor, 90) : color.new(yColor, 100)
getCurrentLine(max(0, bar_index - offset), showPrice and dLabel and offset > 0 ? vD
: na, dColorLine)
getCurrentLine(max(0, bar_index - offset), showPrice and wLabel and offset > 0 ? vW
: na, wColorLine)
getCurrentLine(max(0, bar_index - offset), showPrice and mLabel and offset > 0 ? vM
: na, mColorLine)
getCurrentLine(max(0, bar_index - offset), showPrice and qLabel and offset > 0 ? vQ
: na, qColorLine)
getCurrentLine(max(0, bar_index - offset), showPrice and yLabel and offset > 0 ? vY
: na, yColorLine)

// end

You might also like