Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
- // © matHodl
- //@version=5
- indicator("wall indicator 1.0 by mmds", overlay = true)
- res = timeframe.period
- ratingSignal = "Trend"
- //-----Condition
- calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
- calcRatingAll() =>
- //-----Stochastic
- lengthStoch = 14
- smoothKStoch = 3
- smoothDStoch = 3
- kStoch = ta.sma(ta.stoch(close, high, low, lengthStoch), smoothKStoch)
- dStoch = ta.sma(kStoch, smoothDStoch)
- //-----ADX
- float adxValue = na, float adxPlus = na, float adxMinus = na
- [P, M, V] = ta.dmi(14, 14)
- adxValue := V
- adxPlus := P
- adxMinus := M
- //-----Bollinger Bands
- mult = 2
- basis = ta.sma(close, 20)
- dev = mult * ta.stdev(close, 20)
- upper = basis + dev
- lower = basis - dev
- float ratingOther = 0
- float ratingOtherC = 0
- float ratingStoch = na
- if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
- ratingStoch := calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
- ratingOtherC := ratingOtherC + 1
- ratingOther := ratingOther + ratingStoch
- float ratingADX = na
- if not(na(adxValue) or na(adxPlus[1]) or na(adxMinus[1]) or na(adxPlus) or na(adxMinus))
- ratingADX := calcRating(adxValue > 20 and adxPlus[1] < adxMinus[1] and adxPlus > adxMinus, adxValue > 20 and adxPlus[1] > adxMinus[1] and adxPlus < adxMinus)
- ratingOtherC := ratingOtherC + 1
- ratingOther := ratingOther + ratingADX
- float ratingBB = na
- if not(na(upper) or na(lower) or na(upper[1]) or na(lower[1]))
- ratingBB := calcRating(close < lower, close > upper)
- ratingOtherC := ratingOtherC + 1
- ratingOther := ratingOther + ratingBB
- ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
- float ratingTotal = 0
- float ratingTotalC = 0
- if not na(ratingOther)
- ratingTotal := ratingTotal + ratingOther
- ratingTotalC := ratingTotalC + 1
- ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
- [ratingTotal, ratingOther]
- signalBound = 0.25
- getSignal(ratingTotal, ratingOther) =>
- float _res = ratingTotal
- if ratingSignal == "Trend"
- _res := ratingOther
- _res
- [ratingTotal, ratingOther] = request.security(syminfo.tickerid, res, calcRatingAll())
- tradeSignal = getSignal(ratingTotal, ratingOther)
- dynSLpoints(factor) => factor * ta.atr(14) / syminfo.mintick
- //-----Strategy
- lblLow = low - (ta.atr(30) * 0.6)
- lblHigh = high + (ta.atr(30) * 0.6)
- var label cond1 = na
- var label cond2 = na
- if tradeSignal > signalBound
- cond1 := label.new(bar_index, lblLow, str.tostring(close, format.mintick), style = label.style_label_up, color = color.green, textcolor = color.white, size = size.small)
- label.delete(cond1[1])
- if tradeSignal < -signalBound
- cond2 := label.new(bar_index, lblHigh, str.tostring(close, format.mintick), style = label.style_label_down, color = color.red, textcolor = color.white, size = size.small)
- label.delete(cond2[1])
- //-----Trendline
- upper = 0.0
- lower = 0.0
- slope_ph = 0.0
- slope_pl = 0.0
- ph = ta.pivothigh(21, 21)
- pl = ta.pivotlow(21, 21)
- lineReg = math.abs(ta.sma(close * bar_index, 21) - ta.sma(close, 21) * ta.sma(bar_index, 21)) / ta.variance(bar_index, 21) / 2 * 1.0
- slope_ph := ph ? lineReg : slope_ph[1]
- slope_pl := pl ? lineReg : slope_pl[1]
- upper := ph ? ph : upper[1] - slope_ph
- lower := pl ? pl : lower[1] + slope_pl
- single_upper = 0
- single_lower = 0
- single_upper := close[21] > upper ? 0 : ph ? 1 : single_upper[1]
- single_lower := close[21] < lower ? 0 : pl ? 1 : single_lower[1]
- upper_breakout = single_upper[1] and close[21] > upper and (close > close[21])
- lower_breakout = single_lower[1] and close[21] < lower and (close < close[21])
- var line up_l = na
- var line dn_l = na
- var label recent_up_break = na
- var label recent_dn_break = na
- var breakValue = 0.00000
- if ph[1]
- up_l := line.new(bar_index - 21 - 1, ph[1], bar_index - 21, upper, color = color.lime, extend=extend.right, style=line.style_dashed)
- line.delete(up_l[1])
- label.delete(recent_up_break[1])
- if pl[1]
- dn_l := line.new(bar_index - 21 - 1, pl[1], bar_index - 21, lower, color = color.red, extend=extend.right, style=line.style_dashed)
- line.delete(dn_l[1])
- label.delete(recent_dn_break[1])
- upTrend = ta.crossover(close, upper-slope_ph * 21)
- downTrend = ta.crossunder(close, lower+slope_pl * 21)
- if upTrend
- breakValue := close
- recent_up_break := label.new(bar_index, lblLow,'B', color = color.green, textcolor=color.white, style=label.style_label_up, size=size.tiny)
- label.delete(recent_up_break[1])
- if downTrend
- breakValue := close
- recent_dn_break := label.new(bar_index, lblHigh,'B', color = color.red, textcolor=color.white, style=label.style_label_down, size=size.tiny)
- label.delete(recent_dn_break[1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement