Turtle Breakout Drawdown Adaptive Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 23.08.2023
Tags:

img

Übersicht

Diese Strategie basiert hauptsächlich auf dem Trend-Breakout-Prinzip, kombiniert mit der Kanal-Breakout-Methode, bei der schnelle und langsame Doppelbahnen zum Durchbrechen verwendet werden, um die Trendrichtung zu bestimmen. Die Strategie bietet gleichzeitig doppelten Schutz von Breakout-Einträgen und Drawdown-Ausgängen, was mit plötzlichen Marktveränderungen effektiv umgehen kann. Der größte Vorteil der Strategie besteht darin, dass sie den Kontoabzug in Echtzeit überwachen kann. Wenn der Drawdown einen bestimmten Prozentsatz überschreitet, reduziert sie aktiv die Positionsgröße. Dies ermöglicht es der Strategie, das Marktrisiko und die Kontowiderstandsfähigkeit effektiv zu kontrollieren.

Strategie Logik

  1. Schnelle und langsame Doppelschienen: Schnelle und langsame Linien werden verwendet, um Kanäle zu bauen. Die schnelle Linie reagiert schneller und die langsame Linie ist glatter.

  2. Breakout-Einträge: gehen lang, wenn der Preis durch den Aufwärtstrend geht, und gehen kurz, wenn er durch den Abwärtstrend geht.

  3. Abzugsausgänge: Echtzeitüberwachung des maximalen Abzugs. Sobald der Abzugsausgangspunkt erreicht ist, wird er den Verlust aktiv stoppen, um Positionen zu schließen. Der Abzugsausgangspunkt kann entsprechend den Marktbedingungen angepasst werden.

  4. Adaptive Positionsgröße: Die Anzahl der Positionen wird in Echtzeit anhand des Kontoguthaben angepasst, um Marktrisiken zu vermeiden. Je kleiner der Kontoabzug, desto weniger Positionen werden gehalten. Stärkere Risikoresistenz.

Vorteile

  1. Doppelschienenkanal + Ausbruchseinträge, genauere Trendbeurteilung.

  2. Der Stop-Loss- und Take-Profit-Mechanismus kontrolliert effektiv einzelne Verluste.

  3. Echtzeitüberwachung der Kontoauslastung und aktive Anpassung der Positionsgröße zur Verringerung des Marktrisikos.

  4. Die Positionsgröße ist an das Eigenkapital des Kontos geknüpft und bietet eine hohe Risikobereitschaft, um plötzlichen Marktveränderungen standzuhalten.

Risiken

  1. Auf volatilen Märkten kann die Abzugskontrolle fehlschlagen und zu größeren Verlusten führen.

  2. Mehrere ungültige Durchbruchssignale können auftreten, wenn die Schnellleitung die neutrale Zone betritt.

  3. Die langsame Linie ist zu glatt, um schnelle Umkehrtrends in der Zeit zu erfassen.

  4. Bei gemischten Long- und Short-Positionen besteht die Gefahr einer Verriegelung.

Optimierung

  1. Einrichtung einer höheren Toleranz für Volatilität auf volatilen Märkten, um einen Überschuss an Stop-Loss zu vermeiden.

  2. Fügen Sie eine neutrale Zonenfilterung hinzu, um ungültige Signale zu vermeiden.

  3. Optimierung der Parameter des langsamen Kanals zur Verbesserung der Reaktionsgeschwindigkeit auf schnelle Märkte.

  4. Hinzufügen von Regeln für die Sortierung der Eröffnungsbestellungen, um ein Verriegeln mit Zwei-Wege-Positionen zu vermeiden.

Schlussfolgerung

Insgesamt ist dies eine effektive Strategie, die für den mittelfristigen und langfristigen Trendhandel geeignet ist. Der größte Vorteil der Strategie ist die Echtzeit-Drawdown-Überwachung und die dynamische Anpassung der Positionen. Dies ermöglicht es der Strategie, die Positionsgröße automatisch mit starker Anpassungsfähigkeit an den Markt anzupassen. Bei einer starken Marktänderung oder Preisschwankung kann die Strategie die Positionsgröße automatisch reduzieren, um den Verlust effektiv zu verhindern. Dies ist für viele traditionelle Strategien schwierig. Im Allgemeinen ist die Idee dieser Strategie innovativ mit starker Praktikabilität. Es lohnt sich zu erforschen und für die Anwendung zu optimieren.


//Noro
//2020

//Original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007, CURTIS FAITH, ISBN: 9780071486644) 

//@version=4
strategy("Noro's Turtles Strategy", shorttitle = "Turtles str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, title = "Long")
needshort = input(false, title = "Short")
sizelong = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
needfast = input(true, title = "Fast")
needslow = input(true, title = "Slow")
enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)
showof = input(true, title = "Show offset")
showll = input(false, title = "Show lines")
showlabel = input(true, defval = true, title = "Show label")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast
fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

//Slow
slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

//Lines
offset = showof ? 1 : 0
col1 = showll and needlong and needfast ? color.blue : na
col2 = showll and needshort and needfast ? color.red : na
col3 = showll and needlong and needslow ? color.blue : na
col4 = showll and needshort and needslow ? color.red : na
plot(fastL, color = col1, offset = offset)
plot(fastLC, color = col1, offset = offset)
plot(fastS, color = col2, offset = offset)
plot(fastSC, color = col2, offset = offset)
plot(slowL, color = col3, offset = offset)
plot(slowLC, color = col3, offset = offset)
plot(slowS, color = col4, offset = offset)
plot(slowSC, color = col4, offset = offset)

//Orders
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
size = strategy.position_size
lotlong = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort = 0.0
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Fast
strategy.entry("fast L", strategy.long, lotlong, stop = fastL, when = needfast and needlong and strategy.position_size == 0 and truetime)
strategy.entry("fast S", strategy.short, lotshort, stop = fastS, when = needfast and needshort and strategy.position_size == 0 and truetime)
strategy.exit("fast L", stop = fastLC, when = needfast and needlong and strategy.position_size > 0)
strategy.exit("fast S", stop = fastSC, when = needfast and needshort and strategy.position_size < 0)

//Slow
strategy.entry("slow L", strategy.long, lotlong, stop = slowL, when = needslow and needlong and strategy.position_size == 0 and truetime)
strategy.entry("slow S", strategy.short, lotshort, stop = slowS, when = needslow and needshort and strategy.position_size == 0 and truetime)
strategy.exit("slow L", stop = slowLC, when = needslow and needlong and strategy.position_size > 0)
strategy.exit("slow S", stop = slowSC, when = needslow and needshort and strategy.position_size < 0)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showlabel

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)


Mehr