Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. //@version=4
  2. study("Hancock - Adaptive EMA MVWAP Stdev Bands Auto Length", shorttitle = "A_EMA_MVWAP", overlay = false)
  3.  
  4. source = input(close, title = "Source", type = input.source)
  5.  
  6. devUp1 = input(1.0, title="Stdev above (1)")
  7. devDn1 = input(1.0, title="Stdev below (1)")
  8.  
  9. devUp2 = input(2.0, title="Stdev above (2)")
  10. devDn2 = input(2.0, title="Stdev below (2)")
  11.  
  12. devUp3 = input(3.0, title="Stdev above (3)")
  13. devDn3 = input(3.0, title="Stdev below (3)")
  14.  
  15. showDv2 = input(true, title="Show second group of bands?")
  16. showDv3 = input(true, title="Show third group of bands?")
  17.  
  18. cycleMult = input(0.618, title = "Cycle Mult")
  19.  
  20.  
  21. _sum(src, length) =>
  22. bravo = 0.0
  23. for i = 0 to length - 1
  24. bravo:= bravo + (src[i] * 2) - src[i]
  25. sum = bravo
  26.  
  27.  
  28. _ema(x, y) =>
  29. alpha = 2 / (y + 1)
  30. sum = 0.0
  31. sum := alpha * x + (1 - alpha) * nz(sum[1])
  32.  
  33. smthPeriod(src) =>
  34. // Mutable Variables (non-series)
  35. C1 = 0.0962
  36. C2 = 0.5769
  37.  
  38. //Declarations (for Pine v4)
  39. Period = 0.0
  40. I2 = 0.0
  41. Q2 = 0.0
  42. Re = 0.0
  43. Im = 0.0
  44. SmoothPeriod = 0.0
  45.  
  46. //
  47. C3 = (nz(Period[1])*0.075+0.54)
  48. smooth = ((src*4.0) + (src[1]*3.0) + (src[2]*2.0) + (src[3]))/10.0
  49. dDeTrend = (smooth*C1 + nz(smooth[2])*C2 - nz(smooth[4])*C2 - nz(smooth[6])*C1)*C3
  50.  
  51. // Compute InPhase and Quadrature components
  52. Q1 = (dDeTrend*C1 + nz(dDeTrend[2])*C2 - nz(dDeTrend[4])*C2 - nz(dDeTrend[6])*C1)*C3
  53. I1 = nz(dDeTrend[3])
  54.  
  55. // Advance Phase of I1 and Q1 by 90 degrees
  56. jI = (I1*C1 + nz(I1[2])*C2 - nz(I1[4])*C2 - nz(I1[6])*C1)*C3
  57. jQ = (Q1*C1 + nz(Q1[2])*C2 - nz(Q1[4])*C2 - nz(Q1[6])*C1)*C3
  58.  
  59. // Phaser addition for 3 bar averaging
  60. I2_ = I1 - jQ
  61. Q2_ = Q1 + jI
  62. // Smooth i and q components before applying discriminator
  63. I2 := 0.2*I2_ + 0.8*nz(I2[1])
  64. Q2 := 0.2*Q2_ + 0.8*nz(Q2[1])
  65.  
  66. // Extract Homodyne Discriminator
  67. Re_ = I2*nz(I2[1]) + Q2*nz(Q2[1])
  68. Im_ = I2*nz(Q2[1]) - Q2*nz(I2[1])
  69. Re := 0.2*Re_ + 0.8*nz(Re[1])
  70. Im := 0.2*Im_ + 0.8*nz(Im[1])
  71.  
  72. dp_ = iff(Re!=0 and Im!=0 , 6.28318/atan(Im/Re) , 0)
  73. II = nz(Period[1])
  74. dp = max(max(min(min(dp_,1.5*II),50),0.6667*II),6)
  75. Period := dp*0.2 + nz(Period[1])*0.8
  76. SmoothPeriod := 0.33*Period + nz(SmoothPeriod[1])*0.67
  77.  
  78.  
  79.  
  80.  
  81. SmoothPeriod1 = smthPeriod(hlc3) // Get variable RSI length from discriminator
  82.  
  83. cycleLen1 = 0
  84. for i = 0 to 1000
  85. if i >= SmoothPeriod1*cycleMult
  86. break
  87. cycleLen1 :=cycleLen1 + 1
  88.  
  89. cv = _sum(volume, cycleLen1)
  90. co = _sum(open * volume, cycleLen1)
  91. ch = _sum(high * volume, cycleLen1)
  92. cl = _sum(low * volume, cycleLen1)
  93. cc = _sum(close * volume, cycleLen1)
  94. ctp = _sum(hlc3 * volume, cycleLen1)
  95.  
  96. vwap_open = co / cv
  97. vwap_high = ch / cv
  98. vwap_low = cl / cv
  99. vwap_close = cc / cv
  100. vwap_tpva = ctp / cv
  101.  
  102. vc = _ema(vwap_close,cycleLen1)
  103. vo = _ema(vwap_open,cycleLen1)
  104. vh = _ema(vwap_high,cycleLen1)
  105. vl = _ema(vwap_low,cycleLen1)
  106. lvv = abs(vc-vo)/(vh - vl)
  107.  
  108. myvwap = 0.0
  109. myvwap := lvv*vwap_tpva+(1-lvv)*nz(myvwap[1],vwap_tpva)
  110.  
  111. z = 0.0
  112. for i = 0 to cycleLen1 - 1
  113. z := z + (abs(hlc3[i] - myvwap))*(abs(hlc3[i] - myvwap))
  114. dev = sqrt(z / cycleLen1)
  115.  
  116.  
  117. longx = open < myvwap and close > myvwap
  118. shortx = open > myvwap and close < myvwap
  119.  
  120. max = myvwap + devUp3 * dev
  121. min = myvwap - devDn3 * dev
  122.  
  123. o = min(1, max(0, ((source - min) / (max - min))))
  124.  
  125. hline(0.5)
  126.  
  127. plot(o, color = color.lime)
  128.  
  129. // longx = FL + SL == 2 ? 1 : na
  130. // shortx = FS + SS == 2 ? 1 : na
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement