Dies ist eine sehr einfache Strategie. Sie besteht nur aus einem Trailing Stop Loss. Wenn der Stop Loss ausgelöst wird, wird die Position umgekehrt und ein Trailing Stop Loss für die neue Position gesetzt.
Die Strategie basiert auf einer von drei Stop-Loss-Typen: prozentualer Stop-Loss, ATR-Stop-Loss, absoluter Stop-Loss.
Insbesondere berechnet die Strategie zuerst den Stop-Loss-Wert basierend auf der gewählten Stop-Loss-Typ. Sie überprüft dann nach Eintrittssignalen, geht lang, wenn hoch über dem vorherigen Stop-Loss-Preis liegt, und geht kurz, wenn niedrig unter dem vorherigen Stop-Loss-Preis liegt. Nach dem Eintritt aktualisiert sie den Stop-Loss-Preis, um Preisänderungen zu verfolgen.
Der größte Vorteil dieser Strategie liegt in ihrer Einfachheit, da sie nur einen einzigen Stop-Loss verfolgen muss, ohne die Auswahl der Einstiegs- und Ausstiegspunkte berücksichtigen zu müssen.
Im Vergleich zu einem festen Stop-Loss kann der Trailing-Stop-Loss größere Gewinne erzielen und gleichzeitig die Wahrscheinlichkeit, dass ein Stop-Loss erzielt wird, verringern.
Die Hauptrisiken dieser Strategie können von einer unsachgemäßen Einstellung des Stop-Loss-Wertes herrühren. Zu großer Stop-Loss-Wert kann zu vergrößerten Verlusten führen, während zu kleiner Wert häufiges Stop-Loss-Triggering verursachen kann. Dies erfordert eine adaptive Optimierung basierend auf den Marktbedingungen.
Ein weiteres Risiko ist eine ungenaue Richtungsbeurteilung nach dem Stop-Loss-Trigger bei der Umkehrung von Positionen, wodurch die Chancen auf eine Preisumkehr oder zunehmende Verluste verfehlt werden.
Die Strategie kann in folgenden Aspekten optimiert werden:
Die Strategie realisiert Gewinne durch einen einfachen Trailing-Stop-Loss-Mechanismus und ist für Anfänger leicht zu verstehen. Im Vergleich zu traditionellen Stop-Loss-Strategien fügt sie Post-Stop-Loss-Trigger-Umkehrpositionen hinzu, um zusätzliche Gewinne zu erzielen. Mit kontinuierlichem Testen und Optimieren kann sie zu einem sehr praktischen quantitativen Programm werden.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50) //////////// // Inputs // sl_type = input("%", options = ["%", "ATR", "Absolute"]) sl_perc = input(4, title = "% SL", type = input.float) atr_length = input(10, title = "ATR Length") atr_mult = input(2, title = "ATR Mult", type = input.float) sl_absol = input(10, title = "Absolute SL", type = input.float) // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2016, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate ////////////////// // CALCULATIONS // // SL values sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) : sl_type == "Absolute" ? sl_absol : close * sl_perc / 100 // Init Variables pos = 0 trailing_sl = 0.0 // Signals long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1]) short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1]) // Calculate SL trailing_sl := short_signal ? high + sl_val : long_signal ? low - sl_val : nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1]) // Position var pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1]) ////////////// // PLOTINGS // plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red) ////////////// // STRATEGY // if (time_cond and pos != 1) strategy.entry("long", true, stop = trailing_sl) if (time_cond and pos != -1) strategy.entry("short", false, stop = trailing_sl)