Diese Strategie berechnet den Momentum des Preises, um die Trendrichtung zu bestimmen, und setzt bidirektionale Tracking-Stops ein, um Gewinne zu erzielen und einen Stop-Loss nach dem Trend zu erzielen.
Es berechnet die 12-Perioden-Dynamik des Preises und berechnet weiter die 1-Perioden-Dynamik des Momentums. Wenn die schnelle Dynamik (1-Perioden-Dynamik des Preismomentums) größer als 0 ist, geht es lang. Wenn es weniger als 0 ist, geht es kurz. Dies beurteilt die Richtungsänderung der Preisdynamik, um den Preistrend zu bestimmen.
Es setzt den Trailing Stop Abstand und die Aktivierungsstufe fest. Der Trailing Stop Abstand bezieht sich auf die Anpassung des Stops auf eine bestimmte Entfernung vom neuesten Höchst- oder Tiefstand, wenn der Preis neue Höchst- oder Tiefstände erreicht.
Die Strategie schließt die Gewinne ein, indem sie den höchsten oder niedrigsten Preis verfolgt und Schlussauftrage sendet, wenn der Preis über die festgelegte Stoppdistanz zurückzieht.
Die doppelte Momentumbestimmung beurteilt die Trendrichtung genau, reduziert Trades und vermeidet, dass man gefangen wird.
Flexible Hinterhaltdistanz verringert das Risiko und die Gewinnsicherung.
Die Aktivierungsstufe verhindert einen vorzeitigen Stop-Loss, indem sie erst nach Erreichen eines gewissen Gewinnziels ein Trailing ermöglicht.
Bidirektionale Stopps kontrollieren die Risiken sowohl für Longs als auch für Shorts umfassend.
Einfache und effiziente Berechnung, leicht zu verstehen und umzusetzen.
Bei doppelter Bewegung kann es umgekehrte Signale geben, was einen Trendfilter erfordert.
Eine übermäßige Stoppdistanz kann zu erheblichen Verlusten führen.
Eine hohe Aktivierungsstufe kann Stoppmöglichkeiten verpassen.
Es sind weitere Parameterprüfungen und Optimierungen erforderlich, um optimale Haltestellen zu finden.
Kann falsche Signale durch Trendbeurteilung und Parameteroptimierung reduzieren. Test auf verschiedenen Produkten und Parameter-Sets, um die beste Konfiguration zu finden.
Kombination von Marktstrukturerkennung für den Trend und Vermeidung von Umkehrhandel.
Fügen Sie mehr Zeitbedingungen hinzu, wie Lautstärkeänderungen, Pressen von Ausbrüchen, um die Signalgenauigkeit zu verbessern.
Optimierung der Parameter durch Prüfung verschiedener Stoppdistanzen und Aktivierungsstufen.
Der Wert der Vermögenswerte, die für die Berechnung der Vermögenswerte verwendet werden, wird in der Tabelle 1 aufgeführt.
Für eine bessere Risikokontrolle partielle oder bewegliche Haltestellen einstellen.
Die Strategie hat eine klare Struktur, beurteilt den Trend mit doppelter Dynamik und sperrt Gewinne mit flexiblen Trailing-Stops, um Handelsrisiken effektiv zu kontrollieren. Sie ist leicht zu verstehen und umzusetzen, mit optimierbarem Raum. Das Hinzufügen von mehr technischen Indikatoren und Parameter-Tests kann die Strategieleistung weiter verbessern. Die Strategie bietet Ideen und Referenzen für die Realisierung des Stop-Loss-Managements.
/*backtest start: 2023-01-01 00:00:00 end: 2023-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trailing Stop Snippet", overlay=true) length = input(12) price = close momentum(seria, length) => mom = seria - seria[length] mom mom0 = momentum(price, length) mom1 = momentum( mom0, 1) tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100 tsact := tsact ? tsact : na ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100 ts := ts ? ts : na in_long = strategy.position_size > 0 in_short = strategy.position_size < 0 var ts_ = array.new_float() ts_size = array.size(ts_) ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0 if in_long if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact if ts_size > 0 and ts_get < high array.push(ts_, high) if ts_size < 1 array.push(ts_, high) if not tsact if ts_size > 0 and ts_get < high array.push(ts_, high) if ts_size < 1 array.push(ts_, high) if in_short if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact if ts_size > 0 and ts_get > low array.push(ts_, low) if ts_size < 1 array.push(ts_, low) if not tsact if ts_size > 0 and ts_get > low array.push(ts_, low) if ts_size < 1 array.push(ts_, low) trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na if (mom0 > 0 and mom1 > 0) strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE") else strategy.cancel("MomLE") if (mom0 < 0 and mom1 < 0) strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE") else strategy.cancel("MomSE") tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na if trail strategy.close_all() if not strategy.opentrades array.clear(ts_) //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) plotchar(ts_get, "GET", "") plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross) plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross) plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)