Diese Strategie ist eine Trend-Folge- und Breakout-Strategie, die auf dem von Alexgrover entwickelten Indikator Recursive Bands basiert.
Der Indikator der rekursiven Bands besteht aus einem oberen Band, einem unteren Band und einer mittleren Linie.
Obergrenze = Max ((vorangegangene Bar
Hier ist n ein Skalierungskoeffizient, und die Volatilität kann aus ATR, Standardabweichung, durchschnittlichem wahren Bereich oder einer speziellen RFV-Methode ausgewählt werden.
Die Strategie prüft zunächst, ob sich die unteren und die oberen Bands in der gleichen Richtung bewegen, um falsche Ausbrüche zu vermeiden.
Wenn der Preis unterhalb des unteren Bandes bricht, gehen Sie lang. Wenn der Preis über das obere Band bricht, gehen Sie kurz.
Darüber hinaus wird die Stop-Loss-Logik implementiert.
Die Vorteile dieser Strategie sind:
Diese Strategie birgt auch einige Risiken:
Diese Risiken können durch Optimierung der Parameter, Einführung von Stop-Loss, Erhöhung der Schlupfschwelle usw. verwaltet werden.
Einige Richtungen zur Optimierung der Strategie:
Zusammenfassend ist dies eine sehr praktische und effiziente Trend-Folge-Strategie. Sie kombiniert den rekursiven Rahmen für die Recheneffizienz, nutzt Trendunterstützung/Widerstand, um wichtige Trends zu bestimmen, fügt Momentumbedingungen hinzu, um falsche Ausbrüche zu filtern und die Signalqualität zu gewährleisten. Mit angemessener Parameter-Tuning und Risikokontrolle kann sie gute Ergebnisse erzielen. Würdig weiterer Forschung und Optimierung, um sich komplexeren Marktregimen anzupassen.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 // Original indicator by alexgrover strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000) length = input.int(260, step=10, title='Length') src = input(close, title='Source') method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method') bandDirectionCheck = input.bool(true, title='Bands Hold Direction') lookback = input(3) //---- atr = ta.atr(length) stdev = ta.stdev(src, length) ahlr = ta.sma(high - low, length) rfv = 0. rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1] //----- f(a, b, c) => method == a ? b : c v(x) => f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x)))) //---- sc = 2 / (length + 1) a = 0. a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src))) b = 0. b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src))) c = (a+b)/2 // Colors beColor = #675F76 buColor = #a472ff // Plots pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band') pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band') pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band') fill(pC, pA, color=color.new(beColor,90)) fill(pC, pB, color=color.new(buColor,90)) // Band keeping direction // By Adulari longc = 0 shortc = 0 for i = 0 to lookback-1 if b[i] > b[i+1] longc:=longc+1 if a[i] < a[i+1] shortc:=shortc+1 bhdLong = if bandDirectionCheck longc==lookback else true bhdShort = if bandDirectionCheck shortc==lookback else true // Strategy if b>=low and bhdLong strategy.entry(id='Long',direction=strategy.long) if high>=a and bhdShort strategy.entry(id='Short',direction=strategy.short) // TP at middle line //if low<=c and strategy.position_size<0 and strategy.position_avg_price>close //strategy.exit(id="Short",limit=close) //if high>=c and strategy.position_size>0 and strategy.position_avg_price<close //strategy.exit(id="Long",limit=close)