Breakout-Strategie auf der Grundlage von Schildkrötenhandel

Schriftsteller:ChaoZhang, Datum: 2023-10-17 17:22:34
Tags:

img

Übersicht

Diese Strategie basiert auf dem berühmten Turtle Trading System und verwendet den Donchian Channel zur Identifizierung von Ausbrüchen und ATR, um einen Stop-Loss für den Trend zu setzen. Der Vorteil ist die starke Drawdown-Kontrollfähigkeit, indem ein einzelner Handelsverlust effektiv begrenzt wird. Die Anpassungsfähigkeit über verschiedene Handelsinstrumente hinweg ist jedoch schwach und erfordert Parameter-Tuning. Insgesamt kann diese Strategie als einführende Version des Turtle Trading Systems verwendet werden, um die Wirksamkeit der Turtle Trading-Regeln zu validieren und auch als grundlegende quantitative Handelsstrategie zu dienen.

Grundsätze

Die Strategie beruht hauptsächlich auf zwei Indikatoren: Donchian Channel und ATR.

Der Donchian-Kanal besteht aus höchstem Höchststand und niedrigstem Tiefstand. Die Standard-Kanallänge beträgt 20 Tage, gezeichnet mit einem 20-tägigen Höchststand und einem niedrigsten Tiefstand.

Der Standard-ATR-Zeitraum beträgt 20 Tage. Die Strategie verwendet 2N ATR als Stop Loss-Level.

Die spezifische Handelslogik lautet:

  1. Gehen Sie lang, wenn der Preis über das obere Band bricht.

  2. Setzen Sie einen Stop-Loss zum niedrigen Preis beim Einstieg minus 2N ATR.

  3. Schließen Sie eine Longposition, wenn der Preis unter den unteren Bereich fällt.

  4. Gehen Sie kurz, wenn der Preis unter das untere Band bricht.

  5. Setzen Sie einen Stop-Loss zum hohen Preis beim Einstieg plus 2N ATR.

  6. Schließen Sie eine Leerposition, wenn der Preis über das obere Band bricht.

Zusammenfassend wird in der Strategie die Trendrichtung und die Eintrittssignale mit dem Donchian-Kanal ermittelt und das Risiko mit ATR-basierten Stop-Loss kontrolliert, um Trends zu verfolgen.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Starke Zugriffskontrolle. ATR-Stop-Loss kann den Einzelhandelsverlust effektiv begrenzen.

  2. Die Fähigkeit, Trends zu verfolgen.

  3. Für Instrumente mit hoher Volatilität gilt: Bei der Einstellung von Stop-Loss berücksichtigt ATR die Marktvolatilität.

  4. Einfache und klare Logik, leicht zu verstehen und umzusetzen.

  5. Flexibilität bei der Optimierung mit der Python-Sprache.

Risikoanalyse

Einige Risiken dieser Strategie sind zu beachten:

  1. Die Kanalparameter müssen für verschiedene Instrumente und Zeitrahmen optimiert werden.

  2. Nachfolgendes Stop-Loss-Risiko: Bei volatilen Marktbedingungen können mehrere Stop-Loss-Trigger auftreten.

  3. Der ATR-Parameter muss zurück getestet werden, da der ATR den Stop-Loss direkt beeinflusst und entsprechend der Volatilität angepasst werden sollte.

  4. Potenziell zu hohe Handelsfrequenz. Zu viele Whipsaw-Signale können unter dem Bereichsmarkt auftreten.

  5. Die Strategie konzentriert sich auf Stop-Loss und kann die Trendgewinne nicht vollständig erfassen.

  6. Unzureichender Stop-Loss bei volatilen Bewegungen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen verbessert werden:

  1. Optimierung der Kanalparameter für verschiedene Instrumente.

  2. Fügen Sie Filter hinzu, um zu viele Signale unter dem Marktbereich zu vermeiden.

  3. Optimierung des ATR-Periodenparameters und der Prüfungseffekte auf den Stop-Loss.

  4. Hinzufügen Pyramiden-Eintrag, um die Positionsgröße zu erhöhen, um den Trendgewinn zu maximieren.

  5. Einbeziehung anderer Indikatoren wie MACD, KD, um falsche Signale zu vermeiden.

  6. Anpassung des Stop-Loss auf der Grundlage von Schlupf- und Provisionskosten.

  7. Anpassungsfähigkeit an verschiedenen Instrumenten testen und Parameter optimieren.

Zusammenfassung

Als einführende Version des Turtle Trading Systems verfügt diese Strategie über eine einfache und klare Logik, eine starke Drawdown-Kontrollfähigkeit und kann die Prinzipien des Turtle Trading effektiv validieren.


/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Based on Turtle traders strategy: buy/sell on Donchian breakouts and stop loss on ATR 2x
// initial version considerations :
//// 1. Does not consider filter for avoiding new entries after winning trades (filtering rule from Turtle Strategy on 20 day breakout strategy) 
//// 2. Does not consider pyramiding (aditional entries after 1N price movements)

strategy("Turtle trading strategy (Donchian/ATR)", overlay=true)

enter_period = input(20, minval=1, title="Enter Channel")
exit_period = input(10, minval=1, title="Exit Channel")
offset_bar = input(0,minval=0, title ="Offset Bars")
direction = input("Long",options=["Long","Short"],title="Direction")
max_length = max(enter_period,exit_period)
atrmult = input(2,title="ATR multiplier (Stop Loss)")
atrperiod = input(20,title="ATR Period")

closed_pos = false
dir_long = direction == "Long"? true : false
atr = atr(atrperiod)
upper = dir_long ? highest(enter_period): highest(exit_period)
lower = dir_long ? lowest(exit_period): lowest(enter_period)
atrupper = close + atr
atrlower = close - atr
plotted_atr = dir_long ? atrlower : atrupper

//basis = avg(upper, lower)

l = plot(lower, style=line, linewidth=3, color=lime, offset=1)
u = plot(upper, style=line, linewidth=3, color=lime, offset=1)
a = plot(plotted_atr, style=line,linewidth=2,color=red,offset=1)
//plot(basis, color=yellow, style=line, linewidth=1, title="Mid-Line Average")
//break upper Donchian (with 1 candle offset) (buy signal)
break_up = (close >= upper[1])
//break lower Donchian (with 1 candle offset) (sell signal)
break_down = (close <= lower[1])
stop_loss = dir_long ? (close<=plotted_atr[1]) : (close>=plotted_atr[1])

if break_up and dir_long
    strategy.entry("buy", strategy.long, 1)
    closed_pos :=false
if (break_down or stop_loss) and dir_long
    strategy.close("buy")
    
if break_down and not dir_long
    strategy.entry("sell", strategy.short, 1)
    closed_pos :=false
if (break_up or stop_loss) and not dir_long
    strategy.close("sell")
    closed_pos :=true
    
losing_trade = strategy.equity[0]<strategy.equity[1]
//plotshape(losing_trade,text="Losing!")    
plotshape(stop_loss,style=dir_long?shape.labeldown:shape.labelup,text="Stop!")
//plot(strategy.equity)


    



Mehr