Diese Strategie kombiniert den doppelten gleitenden Durchschnitt, den Relative Strength Index (RSI) und den parabolischen SAR (PSAR), um Preisumkehrpunkte zu identifizieren und entsprechend Kauf- und Verkaufsentscheidungen zu treffen.
Die Strategie verwendet hauptsächlich folgende technische Indikatoren zur Bestimmung von Preisumkehrpunkten:
Dual Moving Average: Berechnen Sie einen schnellen gleitenden Durchschnitt (MA-schnelle Linie) und einen langsamen gleitenden Durchschnitt (MA-slow line). Wenn die schnelle Linie über die langsame Linie geht, zeigt dies einen Bullenmarkt an und geht lang. Wenn die schnelle Linie unter die langsame Linie geht, zeigt sie einen Bärenmarkt an und geht kurz.
RSI-Indikator: Der RSI beurteilt Überkauf- und Überverkaufszustände, indem er den durchschnittlichen Schließgewinn und den durchschnittlichen Schließverlust über einen bestimmten Zeitraum berechnet.
PSAR-Indikator: Parabolische SAR zeigt die Trendrichtung an. SAR-Punkte unter dem Preis zeigen einen Bullenmarkt an und über dem Preis einen Bärenmarkt.
ADX-Indikator: Der ADX misst die Stärke eines Trends, indem er die Richtungsbewegung berechnet.
Die Logik für Kauf- und Verkaufssignale ist wie folgt:
Kaufsignal: Fast MA überschreitet langsames MA, RSI unter 30 (überverkauft), SAR-Punkte über Preis, ADX über 20.
Verkaufssignal: Schnelle MA überschreitet langsame MA, RSI über 70 (überkauft), SAR-Punkte unter dem Preis, ADX über 20.
Wenn ein Kauf- oder Verkaufssignal auftritt, nehmen Sie eine Position mit 10% des Eigenkapitals bzw. schließen Sie die Position rechtzeitig, wenn das Umkehrsignal fehlschlägt.
Die beiden MAs bestimmen die Haupttrendrichtung, wobei RSI und SAR falsche Signale filtern, die Umkehrpunkte genau identifizieren können.
Die Kombination mehrerer Indikatoren verhindert falsche Signale von einem einzigen Indikator.
Stop-Loss vermeidet übermäßige Risiken.
Einfache und klare Logik macht es leicht umzusetzen.
Es funktioniert sowohl für Aufwärtstrend als auch für Abwärtstrend.
Es kann vorkommen, dass doppelte MA falsche Ausbrüche haben.
Der RSI kann falsche Signale erzeugen, wenn er nicht ordnungsgemäß eingestellt ist.
Stoppen Sie den Handel, wenn der ADX unter 20 liegt, um eine Umkehrung des Handels in richtungslosen Märkten zu vermeiden oder verkürzen Sie die ADX-Periode.
SetStringry-Stop-Loss kann zu unnötigen Verlusten führen. Setze einen angemessenen Stop-Loss basierend auf der Marktvolatilität.
Hohe Handelsfrequenz: MA-Perioden an niedrigere Handelsfrequenz anpassen.
Versuche verschiedene MA-Perioden, um die optimale Kombination zu finden.
Versuche verschiedene RSI-Parameter, um ein besseres Überkauf-/Überverkaufsgut zu ermitteln.
Fügen Sie andere Indikatoren wie Bollinger Bands, KDJ hinzu, um die Logik zu bereichern.
Dynamische Stop-Loss-Einstellungen für verschiedene Produkte und Märkte.
Fügen Sie die Positionsgröße hinzu, um Trends besser zu verfolgen.
Versuche verschiedene ADX-Parameter, um den besten Wert zur Bestimmung der Trendstärke zu finden.
Hinzufügen einer automatischen Verlustfunktion.
Diese Strategie identifiziert die Haupttrendrichtung mit doppelten MAs und verwendet RSI, SAR für zusätzliches Signalfiltern. Sie kann Wirksam Umkehrpunkte nach Parameteroptimierung bestimmen und Trends um Umkehrungen herum fangen. In der Praxis ist das Risikomanagement durch einen ordnungsgemäßen Stop-Loss und laufende Parameteroptimierung wichtig. Insgesamt kombiniert die Strategie Indikatoren mit klarer Logik und einfacher Bedienung, was sie zu einer zuverlässigen Umkehrhandelsstrategie macht.
/*backtest start: 2023-10-10 00:00:00 end: 2023-11-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //Based on Senpai BO 3 strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) src = close //psar start = input(0.02) increment = input(0.02) maximum = input(0.2) psar = sar(start, increment, maximum) //ADX Init adxlen = input(30, title="ADX Smoothing") dilen = input(30, title="DI Length") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) // BB Init source = close length = input(50, minval=1) mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50) alertLevel=input(0.1) impulseLevel=input(0.75) showRange = input(false, type=bool) //RSI CODE up1 = rma(max(change(src), 0), 14) down1 = rma(-min(change(src), 0), 14) rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1)) //BB CODE basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05 bbi = bbr - nz(bbr[1]) //////////////////// Algo //if (rsi>50 and n1>n2) //strategy.exit("Close", "Short") // strategy.entry("Long", strategy.long) //if (rsi<50 and n2>n1) //strategy.exit("Close", "Long") // strategy.entry("Short", strategy.short) //col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200 and rsi >= 60?red : silver //short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close = 100% //long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100% short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close //Entry long = long1[1] == 0 and long1 == 1 short = short1[1] == 0 and short1 == 1 longclose = long[3] == 1 shortclose = short[3] == 1 strategy.entry("short", strategy.short,qty = 10, when=short) strategy.entry("long", strategy.long,qty=10, when=long) strategy.close("long",when=longclose) strategy.close("short",when=shortclose) ///////////////////// ///PLOT plot(long,"long",color=green,linewidth=1) plot(short,"short",color=red,linewidth=1) plot(longclose,"close",color=blue,linewidth=1) plot(shortclose,"close",color=orange,linewidth=1) //plot(short,"short",color=red,linewidth=1) // //strategy.exit(id="long",qty = 100000,when=longclose) //strategy.exit(id="short",qty = 100000,when=shortclose) //strategy.exit(id="Stop", profit = 20, loss = 100)