Dies ist eine Breakout-Handelsstrategie, die den parabolischen SAR-Indikator und die drei SMMA-Linien mit verschiedenen Perioden kombiniert. Sie geht lang, wenn alle drei SMMA-Linien steigen und kurz, wenn alle fallen, während sie den SAR-Indikator verwendet, um die Trendrichtung zu bestimmen und Gegentrend-Einträge nimmt, wenn SAR Richtungen umdreht. Die Strategie beinhaltet auch Stop-Loss und Take-Profit.
Die Strategie beruht auf folgenden Schlüsselpunkten:
Die Verwendung des parabolischen SAR-Indikators zur Bestimmung der aktuellen Trendrichtung.
Aufbau von drei SMMA-Linien mit unterschiedlichen Perioden (schnelle Linie 21, mittlere Linie 50, langsame Linie 200).
Lang geht, wenn SAR nach unten dreht, während alle drei SMMA-Linien steigen.
Kurzgeschaltet, wenn die SAR aufschlägt, während alle drei SMMA-Linien fallen.
Einbeziehung von Stop-Loss basierend auf SAR und Gewinnnahme zu einem bestimmten Prozentsatz des Einstiegspreises.
Die Strategie prüft zunächst, ob SAR die Richtungen auf der aktuellen Leiste umdreht. Wenn SAR von oben nach unten umdreht, während SMMAs steigen, geht es lang. Wenn SAR von unten nach oben umdreht, während SMMAs fallen, geht es kurz.
Nach dem Eintritt wird der Stop-Loss auf den SAR-Preis auf der nächsten Bar gesetzt, wobei SAR als dynamischer Trailing-Stop-Loss verwendet wird.
Diese Strategie kombiniert den Vorteil eines Trend-folgenden Indikators mit mehreren zeitlichen gleitenden Durchschnitten und ermöglicht zeitnahe Einträge bei Trendumkehrungen und filtert gleichzeitig mit SMMAs falsche Ausbrüche aus.
SAR kann Trendveränderungen schnell erkennen und Umkehrmöglichkeiten erfassen.
Die dreifachen SMMA filtern Marktlärm effektiv aus und vermeiden falsche Ausfälle.
Die Verwendung von SMMA führt zu glatteren Kurven und weniger Störungen durch MA-Whipsaws.
Die Einbeziehung von Stop-Loss und Take-Profit hilft, Einzelhandelsverluste zu kontrollieren und teilweise Gewinne zu erzielen.
Flexible Parameter-Einstellungen ermöglichen eine Optimierung für verschiedene Märkte.
Es gibt auch einige Risiken, die zu berücksichtigen sind:
SAR kann sich während unruhiger Trends häufig ändern, wodurch die Kosten durch übermäßigen Handel steigen.
SMMA-Einstellungen passen möglicherweise nicht gut zu allen Instrumenten und erfordern eine individuelle Optimierung.
SAR-Stop-Loss hat eine Zeitverzögerung, die Verluste möglicherweise erhöht.
SAR kann bei stetigen Trends auf falsche Brüche zurückgreifen.
Schlechte SMMA-Einstellungen können zu verpassten Trends oder schlechten Signalen führen.
Um den Risiken entgegenzuwirken, können sich die Optimierungen auf Folgendes konzentrieren:
Anpassung der SAR-Parameter basierend auf der Volatilität zur Verringerung von Flips.
Anpassung der SMMA-Perioden an die Instrumenteneigenschaften.
Verbesserte Stop-Loss-Verfahren, z. B. mit Trailing- oder Limit-Orders.
Verwendung von Limit-Orders für Stop Loss im aktiven Handel.
Umfangreiche Tests und Einstellungen der Parameter.
Auf der Grundlage der vorstehenden Analyse können Optimierungen Folgendes beinhalten:
Optimierung der SAR-Parameter für glattere Kurven und weniger Flips.
Anpassung der SMMA-Länge an die Handelsinstrumente.
Ein dynamischer Stop-Loss wie Trailing-Stops oder Limit-Orders.
Verwendung von Limitordern für Stop Loss im Hochfrequenzhandel.
Filter wie RSI, KD hinzufügen, um die Signalqualität zu verbessern.
Verbesserung der Einstiegsbedingungen, z. B. Überprüfung der Kerzenmuster mit SAR-Flips.
Hinzufügen von Wiedereintrittsbedingungen nach Stop-Loss-Triggern.
Erhöhung des Gewinns mit nachlassenden, teilweisen Schließungen, atemberaubenden Niveaus.
Parameter-Tuning auf der Grundlage von Backtest-Ergebnissen und Empfindlichkeitsanalyse.
Zusammenfassend ist dies eine einfache und praktische Breakout-Strategie, die die Empfindlichkeit von SAR bei der Aufnahme von Trendänderungen und den Filtereffekt von gleitenden Durchschnitten kombiniert. Sie kann Trendumkehrpunkte schnell identifizieren. Die Verwendung von Stop-Loss und Take-Profit hilft, Risiken zu kontrollieren und Gewinne zu erzielen. Weitere Optimierungen der Parameter-Einstellungen, der Ein/Aus-Regeln und der Robustheit gegen falsche Breaks können die Strategieleistung für verschiedene Handelsinstrumente verbessern.
/*backtest start: 2023-10-08 00:00:00 end: 2023-11-07 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03) start = input.float(0.02, step=0.01, group="SAR") increment = input.float(0.02, step=0.01, group="SAR") maximum = input.float(0.2, step=0.01, group="SAR") //Take Profit Inputs take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01 //Stop Loss Inputs stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01 // Smooth Moving Average fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average") midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average") slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average") src = input(close, title="Source", group = "Smooth Moving Average") smma(ma, src, len) => smma = 0.0 smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len smma fastSma = ta.sma(src, fastSmmaLen) midSma = ta.sma(src, midSmmaLen) slowSma = ta.sma(src, slowSmmaLen) fastSmma = smma(fastSma, src, fastSmmaLen) midSmma = smma(midSma, src, midSmmaLen) slowSmma = smma(slowSma, src, slowSmmaLen) isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := math.max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := math.min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := math.min(AF + increment, maximum) else if low < EP EP := low AF := math.min(AF + increment, maximum) if uptrend SAR := math.min(SAR, low[1]) if bar_index > 1 SAR := math.min(SAR, low[2]) else SAR := math.max(SAR, high[1]) if bar_index > 1 SAR := math.max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) sarIsUpTrend = uptrend ? true : false sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false longEntryCondition = isSmmaUpward and sarFlippedDown shortEntryCondition = not isSmmaUpward and sarFlippedUp if(longEntryCondition) strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L") if(shortEntryCondition) strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S") strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss)) strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss)) plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua) plot(series = fastSmma, title="fastSmma", linewidth=1) plot(series = midSmma, title="midSmma", linewidth=2) plot(series = slowSmma, title="slowSmma", linewidth=3) plotchar(series = isSmmaUpward, title="isSmmaUpward", char='') plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='') plotchar(series=sarFlippedUp, title="sarFlippedUp", char='') plotchar(series=sarFlippedDown, title="sarFlippedDown", char='') plotchar(series=longEntryCondition, title="longEntryCondition", char='') plotchar(series=shortEntryCondition, title="shortEntryCondition", char='') plotchar(series=strategy.position_size > 0, title="inLong", char='') plotchar(series=strategy.position_size < 0, title="inShort", char='') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)