Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=4
- study("Hancock - Adaptive EMA MVWAP Stdev Bands Auto Length", shorttitle = "A_EMA_MVWAP", overlay = false)
- source = input(close, title = "Source", type = input.source)
- devUp1 = input(1.0, title="Stdev above (1)")
- devDn1 = input(1.0, title="Stdev below (1)")
- devUp2 = input(2.0, title="Stdev above (2)")
- devDn2 = input(2.0, title="Stdev below (2)")
- devUp3 = input(3.0, title="Stdev above (3)")
- devDn3 = input(3.0, title="Stdev below (3)")
- showDv2 = input(true, title="Show second group of bands?")
- showDv3 = input(true, title="Show third group of bands?")
- cycleMult = input(0.618, title = "Cycle Mult")
- _sum(src, length) =>
- bravo = 0.0
- for i = 0 to length - 1
- bravo:= bravo + (src[i] * 2) - src[i]
- sum = bravo
- _ema(x, y) =>
- alpha = 2 / (y + 1)
- sum = 0.0
- sum := alpha * x + (1 - alpha) * nz(sum[1])
- smthPeriod(src) =>
- // Mutable Variables (non-series)
- C1 = 0.0962
- C2 = 0.5769
- //Declarations (for Pine v4)
- Period = 0.0
- I2 = 0.0
- Q2 = 0.0
- Re = 0.0
- Im = 0.0
- SmoothPeriod = 0.0
- //
- C3 = (nz(Period[1])*0.075+0.54)
- smooth = ((src*4.0) + (src[1]*3.0) + (src[2]*2.0) + (src[3]))/10.0
- dDeTrend = (smooth*C1 + nz(smooth[2])*C2 - nz(smooth[4])*C2 - nz(smooth[6])*C1)*C3
- // Compute InPhase and Quadrature components
- Q1 = (dDeTrend*C1 + nz(dDeTrend[2])*C2 - nz(dDeTrend[4])*C2 - nz(dDeTrend[6])*C1)*C3
- I1 = nz(dDeTrend[3])
- // Advance Phase of I1 and Q1 by 90 degrees
- jI = (I1*C1 + nz(I1[2])*C2 - nz(I1[4])*C2 - nz(I1[6])*C1)*C3
- jQ = (Q1*C1 + nz(Q1[2])*C2 - nz(Q1[4])*C2 - nz(Q1[6])*C1)*C3
- // Phaser addition for 3 bar averaging
- I2_ = I1 - jQ
- Q2_ = Q1 + jI
- // Smooth i and q components before applying discriminator
- I2 := 0.2*I2_ + 0.8*nz(I2[1])
- Q2 := 0.2*Q2_ + 0.8*nz(Q2[1])
- // Extract Homodyne Discriminator
- Re_ = I2*nz(I2[1]) + Q2*nz(Q2[1])
- Im_ = I2*nz(Q2[1]) - Q2*nz(I2[1])
- Re := 0.2*Re_ + 0.8*nz(Re[1])
- Im := 0.2*Im_ + 0.8*nz(Im[1])
- dp_ = iff(Re!=0 and Im!=0 , 6.28318/atan(Im/Re) , 0)
- II = nz(Period[1])
- dp = max(max(min(min(dp_,1.5*II),50),0.6667*II),6)
- Period := dp*0.2 + nz(Period[1])*0.8
- SmoothPeriod := 0.33*Period + nz(SmoothPeriod[1])*0.67
- SmoothPeriod1 = smthPeriod(hlc3) // Get variable RSI length from discriminator
- cycleLen1 = 0
- for i = 0 to 1000
- if i >= SmoothPeriod1*cycleMult
- break
- cycleLen1 :=cycleLen1 + 1
- cv = _sum(volume, cycleLen1)
- co = _sum(open * volume, cycleLen1)
- ch = _sum(high * volume, cycleLen1)
- cl = _sum(low * volume, cycleLen1)
- cc = _sum(close * volume, cycleLen1)
- ctp = _sum(hlc3 * volume, cycleLen1)
- vwap_open = co / cv
- vwap_high = ch / cv
- vwap_low = cl / cv
- vwap_close = cc / cv
- vwap_tpva = ctp / cv
- vc = _ema(vwap_close,cycleLen1)
- vo = _ema(vwap_open,cycleLen1)
- vh = _ema(vwap_high,cycleLen1)
- vl = _ema(vwap_low,cycleLen1)
- lvv = abs(vc-vo)/(vh - vl)
- myvwap = 0.0
- myvwap := lvv*vwap_tpva+(1-lvv)*nz(myvwap[1],vwap_tpva)
- z = 0.0
- for i = 0 to cycleLen1 - 1
- z := z + (abs(hlc3[i] - myvwap))*(abs(hlc3[i] - myvwap))
- dev = sqrt(z / cycleLen1)
- longx = open < myvwap and close > myvwap
- shortx = open > myvwap and close < myvwap
- max = myvwap + devUp3 * dev
- min = myvwap - devDn3 * dev
- o = min(1, max(0, ((source - min) / (max - min))))
- hline(0.5)
- plot(o, color = color.lime)
- // longx = FL + SL == 2 ? 1 : na
- // shortx = FS + SS == 2 ? 1 : na
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement