Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=2
- study("Smooth Regression Bands [DW]", shorttitle="SRB [DW]", overlay=true)
- //By Donovan Wall
- //This is an experimental study using Kaufman Adaptive Moving Average (KAMA), ATR Decay, Linear Regression Bands, and McGinley Dynamic smoothing.
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //Inputs
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //Linear Regression
- lrlen = input(defval=377, title="Number of Bars for Linear Regression Calculation")
- //ATR
- atrlen = input(defval=100, title="ATR Period")
- atrmult = input(defval=0.125, title="ATR Decay Multiplier")
- //KAMA
- kfast = input(defval=0.666, step=0.001, title="KAMA Smoothing Constant Fast End")
- kslow = input(defval=0.0645, step=0.0001, title="KAMA Smoothing Constant Slow End")
- //McGinley Smoothing
- mglen = input(defval=21, minval=1, title="McGinley Dynamic Smoothing Period")
- // Bar coloring on/off
- colorBars = input(true, "Color bars?")
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //Definitions
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //KAMA Function
- ksrc = close
- kama(ksrc, L)=>
- dist = abs(ksrc[0] - ksrc[1])
- signal = abs(ksrc - ksrc[L])
- noise = sum(dist, L)
- effr = noise!=0 ? signal/noise : 1
- sc = pow(effr*(kfast - kslow) + kslow,2)
- kama = nz(kama[1],ksrc) + sc*(ksrc - nz(kama[1], ksrc))
- //Band Levels
- atrdec = atr(atrlen)*atrmult
- ph = nz(srh[1], high)-atrdec
- pl = nz(srl[1], low)+atrdec
- srh = high >= ph ? high : ph
- srl = low <= pl ? low : pl
- srhc = max(high, min(srh, linreg(avg(srh, high), lrlen, 0)))
- srlc = min(low, max(srl, linreg(avg(srl, low), lrlen, 0)))
- devh = srhc + stdev(srhc, lrlen)
- devl = srlc - stdev(srlc, lrlen)
- lrdevh = linreg(srhc + stdev(srhc, lrlen), lrlen, 0)
- hmgsrc = lrdevh
- hmg = 0.0
- hmg := na(hmg[1]) ? kama(hmgsrc, mglen) : hmg[1] + (hmgsrc - hmg[1]) / (mglen * pow(hmgsrc/hmg[1], 4))
- lrdevl = linreg(srlc - stdev(srlc, lrlen), lrlen, 0)
- lmgsrc = lrdevl
- lmg = 0.0
- lmg := na(lmg[1]) ? kama(lmgsrc, mglen) : lmg[1] + (lmgsrc - lmg[1]) / (mglen * pow(lmgsrc/lmg[1], 4))
- lrdevm = (lrdevh + lrdevl)/2
- mmgsrc = lrdevm
- mmg = 0.0
- mmg := na(mmg[1]) ? kama(mmgsrc, mglen) : mmg[1] + (mmgsrc - mmg[1]) / (mglen * pow(mmgsrc/mmg[1], 4))
- lrdevgmh = lrdevh + (lrdevh - lrdevm)*((1+sqrt(5))/2)
- mgsrcgmh = lrdevgmh
- mggmh = 0.0
- mggmh := na(mggmh[1]) ? kama(mgsrcgmh, mglen) : mggmh[1] + (mgsrcgmh - mggmh[1]) / (mglen * pow(mgsrcgmh/mggmh[1], 4))
- lrdevgml = lrdevl - (lrdevm - lrdevl)*((1+sqrt(5))/2)
- mgsrcgml = lrdevgml
- mggml = 0.0
- mggml := na(mggml[1]) ? kama(mgsrcgml, mglen) : mggml[1] + (mgsrcgml - mggml[1]) / (mglen * pow(mgsrcgml/mggml[1], 4))
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //Plots and Fills
- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
- //Band Plots
- gmhplot = plot(mggmh, color=#228B22, linewidth=1, transp=0, style=linebr, title="Golden Mean High Band")
- hmgplot = plot(hmg, color=#98FB98, linewidth=1, transp=0, style=linebr, title="High Band")
- mmgplot = plot(mmg, color=white, linewidth=2, transp=0, style=linebr, title="Central Band")
- lmgplot = plot(lmg, color=#CD5C5C, linewidth=1, transp=0, style=linebr, title="Low Band")
- gmlplot = plot(mggml, color=#B22222, linewidth=1, transp=0, style=linebr, title="Golden Mean Low Band")
- //Band Fills
- fill(gmhplot, hmgplot, color=#228B22, transp=80, title="Golden Mean High Channel")
- fill(hmgplot, mmgplot, color=#98FB98, transp=70, title="High Channel")
- fill(lmgplot, mmgplot, color=#CD5C5C, transp=70, title="Low Channel")
- fill(gmlplot, lmgplot, color=#B22222, transp=80, title="Golden Mean Low Channel")
- // Color Bars
- barcolor(colorBars ? close > mmg ? lime : red : na)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement