Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=2
- //
- study(title='DIVERGENCE_SPOTTER', shorttitle='DIV_SPOTTER++',overlay=true)
- // || General Input:
- method = input(title='Method (0=RSI, 1=macd, 2=stoch, 3=volume, 4=acc/dist, 5=fisher, 6=cci, 7=BB %B, 8=IdealRSI, 9=snort):', type=integer, defval=9, minval=0, maxval=9)
- SHOW_LABEL = input(title='Show Labels', type=bool, defval=true)
- SHOW_CHANNEL = input(title='Show Channel', type=bool, defval=false)
- uHid = input(true,title="Use Hidden Divergence in Strategy")
- uReg = input(true,title="Use Regular Divergence in Strategy")
- // || RSI / STOCH / VOLUME / ACC/DIST/ FISHER/ CCI/ BB %B Input:
- rsi_smooth = input(title='RSI/STOCH/Volume/ACC-DIST/Fisher/cci Smooth/BB %B length:', type=integer, defval=20)
- // || MACD Input:
- macd_src = input(title='MACD Source:', type=source, defval=close)
- macd_fast = input(title='MACD Fast:', type=integer, defval=12)
- macd_slow = input(title='MACD Slow:', type=integer, defval=26)
- macd_smooth = input(title='MACD Smooth Signal:', type=integer, defval=9)
- // || Functions:
- f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0]
- f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0]
- f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0
- // ||••> START MACD FUNCTION
- f_macd(_src, _fast, _slow, _smooth)=>
- _fast_ma = sma(_src, _fast)
- _slow_ma = sma(_src, _slow)
- _macd = _fast_ma-_slow_ma
- _signal = ema(_macd, _smooth)
- _hist = _macd - _signal
- // ||<•• END MACD FUNCTION
- // ||••> START ACC/DIST FUNCTION
- f_accdist(_smooth)=>_return=sma(cum(close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume), _smooth)
- // ||<•• END ACC/DIST FUNCTION
- // ||••> START FISHER FUNCTION
- f_fisher(_src, _window)=>
- _h = highest(_src, _window)
- _l = lowest(_src, _window)
- _value0 = .66 * ((_src - _l) / max(_h - _l, .001) - .5) + .67 * nz(_value0[1])
- _value1 = _value0 > .99 ? .999 : _value0 < -.99 ? -.999 : _value0
- _fisher = .5 * log((1 + _value1) / max(1 - _value1, .001)) + .5 * nz(_fisher[1])
- // ||<•• END FISHER FUNCTION
- // Rolling Moving Average (or Wells Wilders MA)
- irma(p,l) =>
- irma = (nz(irma[1]) * (l - 1) + p) / l
- // RSI function.
- irsi(p, l) =>
- up = irma(max(change(p), 0), l)
- down = irma(-min(change(p), 0), l)
- irsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
- //
- //
- // --- Start the Homodyne Discriminator Caculations
- //
- idealRSI(p) =>
- C1 = 0.0962
- C2 = 0.5769
- Df = 0.5
- C3 = (nz(Period[1])*0.075+0.54)
- smooth = ((hl2*4.0) + (hl2[1]*3.0) + (hl2[2]*2.0) + (hl2[3]))/10.0
- dDeTrend = (smooth*C1 + nz(smooth[2])*C2 - nz(smooth[4])*C2 - nz(smooth[6])*C1)*C3
- Q1 = (dDeTrend*C1 + nz(dDeTrend[2])*C2 - nz(dDeTrend[4])*C2 - nz(dDeTrend[6])*C1)*C3
- I1 = nz(dDeTrend[3])
- 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
- I2_ = I1 - jQ
- Q2_ = Q1 + jI
- I2 = 0.2*I2_ + 0.8*nz(I2[1])
- Q2 = 0.2*Q2_ + 0.8*nz(Q2[1])
- 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
- rsiLen = round((SmoothPeriod*Df)-1) // Get variable RSI length from discriminator
- idealRSI = irsi(p,rsiLen) // Generate RSI.
- // --- Bollinger Band Vdub BB %B
- pcBB(p,l) =>
- basis = sma(p, l)
- dev = 0.1*stdev(p, l)
- upper = basis + dev
- lower = basis - dev
- pcBB = (p - lower)/(upper - lower)
- // --- SNORT
- length = input(title="Length", type=integer, defval=14, minval=1, maxval=2000)
- src = hlc3
- upper = sum(volume * (change(src) <= 0 ? 0 : src), length)
- lower = sum(volume * (change(src) >= 0 ? 0 : src), length)
- mf = rsi(upper, lower)
- clength = input(20, minval=1)
- csrc = input(close, title="Source")
- cma = sma(csrc, clength)
- cci = (csrc - cma) / (0.015 * dev(csrc, clength))
- rsrc = close
- rlen = input(14, minval=1, title="Length")
- rup = rma(max(change(rsrc), 0), rlen)
- rdown = rma(-min(change(rsrc), 0), rlen)
- rsi = rdown == 0 ? 100 : rup == 0 ? 0 : 100 - (100 / (1 + rup / rdown))
- snort = (((mf + rsi)/2)*5 + cci)/6
- // === End of Functions.
- method_high = method == 0 ? rsi(high, rsi_smooth) :
- method == 1 ? f_macd(macd_src, macd_fast, macd_slow, macd_smooth) :
- method == 2 ? stoch(close, high, low, rsi_smooth) :
- method == 3 ? sma(volume, rsi_smooth) :
- method == 4 ? f_accdist(rsi_smooth) :
- method == 5 ? f_fisher(high, rsi_smooth) :
- method == 6 ? cci(high, rsi_smooth) :
- method == 7 ? pcBB(close, rsi_smooth) :
- method == 8 ? idealRSI(close) :
- method == 9 ? snort :
- na
- method_low = method == 0 ? rsi(low, rsi_smooth) :
- method == 1 ? f_macd(macd_src, macd_fast, macd_slow, macd_smooth) :
- method == 2 ? stoch(close, high, low, rsi_smooth) :
- method == 3 ? sma(volume, rsi_smooth) :
- method == 4 ? f_accdist(rsi_smooth) :
- method == 5 ? f_fisher(low, rsi_smooth) :
- method == 6 ? cci(low, rsi_smooth) :
- method == 7 ? pcBB(close, rsi_smooth) :
- method == 8 ? idealRSI(close) :
- method == 9 ? snort :
- na
- fractal_top = f_fractalize(method_high) > 0 ? method_high[2] : na
- fractal_bot = f_fractalize(method_low) < 0 ? method_low[2] : na
- high_prev = valuewhen(fractal_top, method_high[2], 1)
- high_price = valuewhen(fractal_top, high[2], 1)
- low_prev = valuewhen(fractal_bot, method_low[2], 1)
- low_price = valuewhen(fractal_bot, low[2], 1)
- regular_bearish_div = fractal_top and high[2] > high_price and method_high[2] < high_prev
- hidden_bearish_div = fractal_top and high[2] < high_price and method_high[2] > high_prev
- regular_bullish_div = fractal_bot and low[2] < low_price and method_low[2] > low_prev
- hidden_bullish_div = fractal_bot and low[2] > low_price and method_low[2] < low_prev
- plot(title='H F', series=fractal_top ? high[2] : na, color=(regular_bearish_div and uReg) or (hidden_bearish_div and uHid)? maroon : not SHOW_CHANNEL ? na : silver, offset=-2)
- plot(title='L F', series=fractal_bot ? low[2] : na, color=(regular_bullish_div and uReg) or (hidden_bullish_div and uHid) ? green : not SHOW_CHANNEL ? na : silver, offset=-2)
- plot(title='H D', series=fractal_top ? high[2] : na, style=circles, color=(regular_bearish_div and uReg) or (hidden_bearish_div and uHid)? maroon : not SHOW_CHANNEL ? na : silver, linewidth=3, offset=-2)
- plot(title='L D', series=fractal_bot ? low[2] : na, style=circles, color=(regular_bullish_div and uReg) or (hidden_bullish_div and uHid) ? green : not SHOW_CHANNEL ? na : silver, linewidth=3, offset=-2)
- plotshape(title='+RBD', series=not SHOW_LABEL or not uReg? na : regular_bearish_div ? high[2] : na, text='R', style=shape.labeldown, location=location.absolute, color=maroon, textcolor=white, offset=-2)
- plotshape(title='+HBD', series=not SHOW_LABEL or not uHid? na : hidden_bearish_div ? high[2] : na, text='H', style=shape.labeldown, location=location.absolute, color=maroon, textcolor=white, offset=-2)
- plotshape(title='-RBD', series=not SHOW_LABEL or not uReg? na : regular_bullish_div ? low[2] : na, text='R', style=shape.labelup, location=location.absolute, color=green, textcolor=white, offset=-2)
- plotshape(title='-HBD', series=not SHOW_LABEL or not uHid? na : hidden_bullish_div ? low[2] : na, text='H', style=shape.labelup, location=location.absolute, color=green, textcolor=white, offset=-2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement