Strategie zur Umkehrung von Verlusten durch Trailing Stop

Schriftsteller:ChaoZhang, Datum: 2023-12-01 13:41:41
Tags:

img

Übersicht

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.

Strategie Logik

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.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Hinzufügen von Trendbeurteilungen, um gegen Trends zu handeln
  2. Optimierung der Berechnung des Stop-Loss-Wertes, um den Markt dynamischer zu verfolgen
  3. Erhöhung der Breakout-Validierung für umgekehrte Signale mit höherer Wahrscheinlichkeit
  4. Einbeziehung von Volatilitätsmessungen, um den besten Zeitpunkt für die Umkehrung zu finden

Schlussfolgerung

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)

Mehr