Advertisement
Guest User

Untitled

a guest
Jul 10th, 2019
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.95 KB | None | 0 0
  1. //@version=4
  2. study(title="Squeeze Box [DW]", overlay=true, linktoseries=true)
  3. //by Donovan Wall
  4.  
  5. //This is an experimental study designed using data from Bollinger Bands to determine price squeeze ranges and active levels of support and resistance.
  6. //First, a set of Bollinger Bands using a Coefficient of Variation weighted moving average as the basis is calculated.
  7. //Then, the relative percentage of current bandwidth to maximum bandwidth over the specified sampling period determines the relative squeeze.
  8. //The box is outlined by drawing the current highest and lowest source value over the sampling period whenever a squeeze is active.
  9. //I've included the COVWMA in the visualization for additional confirmation of price activity.
  10.  
  11. //Custom Bar color scheme is included.
  12.  
  13. //---------------------------------------------------------------------------------------------------------------------------------------------------------------
  14. //Updates:
  15. //Added alternate moving average types. The available moving averages now in this script are:
  16. // -Exponential Moving Average
  17. // -Simple Moving Average
  18. // -Smoothed Moving Average
  19. // -Weighted Moving Average
  20. // -Volume Weighted Moving Average
  21. // -Least Squares Moving Average
  22. // -Arnaud Legoux Moving Average
  23. // -Hull Moving Average
  24. // -Coefficient of Variation Weighted Moving Average
  25. // -Fractal Adaptive Moving Average
  26. // -Kaufman's Adaptive Moving Average
  27.  
  28. //Refined the color scheme for both bar colors and the moving averages.
  29.  
  30. //Please note: Each moving average type generates different box values, so play around with them and find the one that works best for you.
  31.  
  32. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  33. //Inputs
  34. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  35.  
  36. //Source
  37. src = input(defval=hlc3, title="Source")
  38.  
  39. //Periods
  40. per = input(defval=21, minval=1, title="Sampling Period")
  41.  
  42. //MA Type
  43. matype = input(defval="COVWMA", title="MA Type (Available Inputs: 'EMA', 'SMA', 'SMMA', 'WMA', 'VWMA', 'LSMA', 'ALMA', 'HULLMA', 'COVWMA', 'FRAMA', 'KAMA')")
  44.  
  45. //Standard Deviations
  46. ndev = input(defval=2, minval=1, title="Number of Deviations for Squeeze Calculation")
  47.  
  48. //Relative Squeeze Threshold
  49. sr = input(defval=50, minval=0, maxval=100, step=0.01, title="Relative Squeeze % Threshold")
  50.  
  51. //LSMA Offset
  52. loff = input(defval=0, minval=0, title="Offset (if LSMA)")
  53.  
  54. //ALMA Offset and Sigma
  55. aoff = input(defval=0.85, step=0.01, minval=0, title="Offset (if ALMA)")
  56. sigma = input(defval=6, minval=0, title="Sigma (if ALMA)")
  57.  
  58. //FRAMA Coefficient
  59. w = input(defval=-4.6, title="Coefficient (if FRAMA)")
  60.  
  61. //KAMA Smoothing Constant
  62. fast = input(defval=0.666, step=0.001, title="Smoothing Constant Fast End (if KAMA)")
  63. slow = input(defval=0.0645, step=0.0001, title="Smoothing Constant Slow End (if KAMA)")
  64.  
  65. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  66. //Definitions
  67. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  68.  
  69. //EMA
  70. ema = ema(src, per)
  71.  
  72. //SMA
  73. sma = sma(src, per)
  74.  
  75. //SMMA
  76. smma = 0.0
  77. smma := na(smma[1]) ? sma(src, per) : (smma[1]*(per - 1) + src)/per
  78.  
  79. //WMA
  80. wma = wma(src, per)
  81.  
  82. //VWMA
  83. vmp = src*volume
  84. vwma = sum(vmp, per)/sum(volume, per)
  85.  
  86. //LSMA
  87. lsma = linreg(src, per, loff)
  88.  
  89. //ALMA
  90. alma = alma(src, per, aoff, sigma)
  91.  
  92. //Hull MA
  93. hullma = wma(2*wma(src, per/2)-wma(src, per), round(sqrt(per)))
  94.  
  95. //COVWMA
  96. covwma(a, b) =>
  97. cov = stdev(a, b)/sma(a, b)
  98. cw = a*cov
  99. covwma = sum(cw, b)/sum(cov, b)
  100. cma = covwma(src, per)
  101.  
  102. //FRAMA
  103. frama(a, b) =>
  104. n3 = (highest(high, b) - lowest(low, b))/b
  105. hd2 = highest(high, b/2)
  106. ld2 = lowest(low, b/2)
  107. n2 = (hd2 - ld2)/(b/2)
  108. n1 = (hd2[b/2] - ld2[b/2])/(b/2)
  109. dim = (n1 > 0) and (n2 > 0) and (n3 > 0) ? (log(n1 + n2) - log(n3))/log(2) : 0
  110. alpha = exp(w*(dim - 1))
  111. sc = (alpha < 0.01 ? 0.01 : (alpha > 1 ? 1 : alpha))
  112. frama = 0.0
  113. frama := cum(1)<=2*b ? a : (a*sc) + nz(frama[1])*(1 - sc)
  114. fma = frama(src, per)
  115.  
  116. //KAMA
  117. kama(a, b)=>
  118. dist = abs(a[0] - a[1])
  119. signal = abs(a - a[b])
  120. noise = sum(dist, b)
  121. effr = noise!=0 ? signal/noise : 1
  122. sc = pow(effr*(fast - slow) + slow,2)
  123. kama = 0.0
  124. kama := nz(kama[1], a) + sc*(a - nz(kama[1], a))
  125. kma = kama(src, per)
  126.  
  127. //MA Type
  128. ma = (matype=="EMA") ? ema : (matype=="SMA") ? sma : (matype=="SMMA") ? smma : (matype=="WMA") ? wma : (matype=="VWMA") ? vwma : (matype=="LSMA") ? lsma : (matype=="ALMA") ? alma : (matype=="HULLMA") ? hullma : (matype=="COVWMA") ? cma : (matype=="FRAMA") ? fma : (matype=="KAMA") ? kma : ema
  129.  
  130. //Bollinger Bands
  131. bu = ma + stdev(src, per)*ndev
  132. bd = ma - stdev(src, per)*ndev
  133.  
  134. //Bandwidth
  135. bw = (bu - bd)
  136.  
  137. //Squeeze Percentage
  138. buh = highest(bu, per)
  139. bdl = lowest(bd, per)
  140. brng = buh - bdl
  141. sqp = 100*bw/brng
  142.  
  143. //Squeeze Box
  144. sqz = (sqp < sr) ? 1 : na
  145. highest = highest(src, per)
  146. lowest = lowest(src, per)
  147. boxh = sqz ? highest : na
  148. boxl = sqz ? lowest : na
  149. bh = valuewhen(sqz, boxh, 1)
  150. bl = valuewhen(sqz, boxl, 1)
  151.  
  152. //Colors
  153. boxcolor = src > bh ? color.lime : src < bl ? color.red : color.orange
  154. bhcolor = sqz ? boxcolor : na
  155. blcolor = sqz ? boxcolor : na
  156. barcolor = (src > bh) and (src > src[1]) ? color.lime : (src > bh) and (src < src[1]) ? color.green : (src < bl) and (src < src[1]) ? color.red : (src < bl) and (src > src[1]) ? color.maroon : color.orange
  157. macolor = (ma > ma[1]) ? color.lime : (ma < ma[1]) ? color.red : color.orange
  158.  
  159. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  160. //Plots
  161. //-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  162.  
  163. //Squeeze Box
  164. bhplot = plot(bh, color=boxcolor, title="Box High Level (Color 0 = Box is an Active Support Zone, Color 1 = Box is an Active Resistance Zone, Color 2 = Price is Within Box)")
  165. blplot = plot(bl, color=boxcolor, title="Box Low Level (Color 0 = Box is an Active Support Zone, Color 1 = Box is an Active Resistance Zone, Color 2 = Price is Within Box)")
  166.  
  167. //COVWMA
  168. maplot = plot(ma, color=macolor, linewidth=2, title="MA (Color 0 = Uptrend, Color 1 = Downtrend, Color 2 = Neutral)")
  169.  
  170. //Fill
  171. fill(bhplot, blplot, color=boxcolor, transp=70, title="Box Fill (Same Color Scheme Calculation as Box High and Low)")
  172.  
  173. //Bar Color
  174. barcolor(barcolor, title="Bar Color (Color 0 = Uptrend, Color 1 = Pullback From Uptrend, Color 2 = Downtrend, Color 3 = Pullback From Downtrend, Color 4 = Within Box)")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement