Trailing-Stop-Strategie für mehrere Zeitrahmen


Erstellungsdatum: 2024-01-08 11:24:24 zuletzt geändert: 2024-01-08 11:24:24
Kopie: 0 Klicks: 644
1
konzentrieren Sie sich auf
1617
Anhänger

Trailing-Stop-Strategie für mehrere Zeitrahmen

Überblick

Diese Strategie ist eine Multi-Time-Frame-Version der einfachen Tracking-Stop-Strategie, die ich zuvor veröffentlicht habe. Die vorherige Strategie nutzte nur die grundlegenden Tracking-Stops, um in eine Position zu gelangen.

In dieser Strategie können Sie nur den ATR-Stop verwenden und 3 weitere, höhere Zeiträume sowie den aktuellen Zeitrahmen auswählen. Die Tracking-Stopps auf diesen Zeiträumen werden auf der Grafik abgebildet. Wenn alle 4 Zeiträume ein Mehrkopfsignal auslösen, wird der Einstieg übernommen.

Strategieprinzip

Der Kern der Strategie besteht darin, Stopps und Trends zu verfolgen. Die Tracking-Stops dienen zur Einstellung von Stop-Points, die aufgrund der Berechnung von ATR-Werten effektiv verhindert werden, dass die Stops überschritten werden. Die Trendfollowing-Strategien beschließen den Einstieg, indem sie die Richtung der Trends auf verschiedenen Zeiträumen beobachten.

Konkret berechnet die Strategie zuerst den ATR-Wert auf verschiedenen Zeiträumen und setzt die Stop-Loss-Distanz. Dann wird ein Plus- oder Minus-Signal ausgegeben, um zu beurteilen, ob der Preis die Stop-Loss-Marke überschreitet. Wenn die Signale auf mehreren Zeiträumen übereinstimmen, wird eingegeben.

Durch die Kombination von Trends aus verschiedenen Zyklen kann ein falscher Durchbruch effektiv gefiltert werden. Gleichzeitig kann ein Stop-Loss verfolgt werden, um Gewinne zu sichern und Risiken effektiv zu kontrollieren.

Strategische Vorteile

  1. Mit mehreren Zeitrahmen kann man Geräusche effektiv filtern und Trends erkennen.
  2. ATR-Stop-Tracking-Methoden können die Stop-Distance dynamisch anpassen, um die Wahrscheinlichkeit von Absicherung zu verringern
  3. Die Kombination von Trendfollowing und Stop-Loss-Management ermöglicht sowohl Following Trend als auch Stop-Loss.
  4. Weniger Parameter, leicht zu verstehen und zu optimieren

Risikoanalyse

  1. ATR-Stop Wenn die Parameter falsch eingestellt sind, kann es zu nah oder zu weit vom Preis entfernt sein, leicht zu durchbrechen oder zu weit weg von dem Stop
  2. Eine Kombination aus mehreren Zeitfenstern kann nicht effektiv funktionieren oder fehlerhaft beurteilt werden, wenn die Parameter falsch eingestellt sind
  3. Es ist notwendig, die Stop-Loss-Parameter und die Time-Frame-Parameter gleichzeitig zu konfigurieren, da dies möglicherweise nicht optimal funktioniert

Die Lösung:

  1. Verschiedene Parameterkombinationen und Sorten werden immer wieder getestet, um die besten Parameter zu finden
  2. Optimierung des Anteils und der Anzahl der Zeitrahmen, um zuverlässige Trendbeurteilungen zu gewährleisten
  3. Anpassung der ATR-Stopp-Multiplikatoren, um ein Gleichgewicht zwischen nicht durchbrochenen Stopps und nicht zu großen Entfernungen zu finden

Optimierungsrichtung

Die Strategie kann optimiert werden durch:

  1. Erhöhung oder Verringerung der Anzahl der Zeitrahmen, um eine Kombination von Zeiträumen zu finden, die die besten Trends bestimmen
  2. Verschiedene ATR-Multiplikatoren werden getestet, um die optimale Stoppdistanz zu ermitteln
  3. Hinzufügen von Wiedereintrittsmechanismen, um weitere Positionen zu erstellen, wenn der Trend anhält
  4. In Kombination mit anderen Indikatoren filtern Sie die Zeit des Eintritts, z. B. die Quantitäts- und Preisindizes.
  5. Optimierung für verschiedene Sortenparameter

Zusammenfassen

Die Strategie ermöglicht eine organische Kombination von Trendfollowing und Risikokontrolle durch die Art und Weise, wie die Multi-Time-Frame ATR-Stopps verfolgt werden. Im Vergleich zu einzelnen Stopps kann die Richtung der Trends klarer beurteilt werden; im Vergleich zu einzelnen Zeitrahmen filtert sie viel Lärm. Die vernünftige Konfiguration der Stoppparameter und der Zeitrahmen ist der Schlüssel für optimale Effekte.

Strategiequellcode
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MTF Trailing SL Strategy [QuantNomad]", shorttitle = "MTF TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

////////////
// Inputs //

atr_length = input(14,    title = "ATR Length")
atr_mult   = input(2,     title = "ATR Mult",    type = input.float)

tf2 = input('120', title = "TF2", type = input.string)
tf3 = input('180', title = "TF3", type = input.string)
tf4 = input('240', title = "TF4", type = input.string)

// 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 //


tsl() => 
    // SL values
    sl_val = atr_mult * atr(atr_length)
     
    // 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]) 
    trailing_sl
    
    
trailing_sl1 = tsl()
trailing_sl2 = security(syminfo.tickerid, tf2, tsl())
trailing_sl3 = security(syminfo.tickerid, tf3, tsl())
trailing_sl4 = security(syminfo.tickerid, tf4, tsl())

pos1 = 0
pos1 := low <= trailing_sl1 ? -1 : high >= trailing_sl1 ? 1 : nz(pos1[1])

pos2 = 0
pos2 := low <= trailing_sl2 ? -1 : high >= trailing_sl2 ? 1 : nz(pos2[1])

pos3 = 0
pos3 := low <= trailing_sl3 ? -1 : high >= trailing_sl3 ? 1 : nz(pos3[1])

pos4 = 0
pos4 := low <= trailing_sl4 ? -1 : high >= trailing_sl4 ? 1 : nz(pos4[1])

total_pos = pos1 + pos2 + pos3 + pos4

//////////////
// PLOTINGS //

plot(trailing_sl1, linewidth = 2 , color = pos1 == 1 ? color.green : color.red, title = "TSL TF1")
plot(trailing_sl2, linewidth = 2 , color = pos2 == 1 ? color.green : color.red, title = "TSL TF2", transp = 25)
plot(trailing_sl3, linewidth = 2 , color = pos3 == 1 ? color.green : color.red, title = "TSL TF3", transp = 50)
plot(trailing_sl4, linewidth = 2 , color = pos4 == 1 ? color.green : color.red, title = "TSL TF4", transp = 75)

//////////////
// STRATEGY //

//strategy.entry("long",  true,  stop = trailing_sl1)
//strategy.entry("short", false, stop = trailing_sl1)

strategy.entry("long",    true, when = total_pos ==  4)
strategy.entry("short",  false, when = total_pos == -4)

strategy.close("long",  when = total_pos <= 0)
strategy.close("short", when = total_pos >= 0)