Double Turtle Breakout-Strategie


Erstellungsdatum: 2023-11-28 16:25:41 zuletzt geändert: 2023-11-28 16:25:41
Kopie: 0 Klicks: 378
1
konzentrieren Sie sich auf
1166
Anhänger

Double Turtle Breakout-Strategie

Überblick

Die Doppel-Beach-Breakout-Strategie kombiniert die Breakout-Strategie der Beach-Handelsmethode mit Linda Raschke’s Mobile Stop-Prinzip und bietet hervorragende Breakout-Leistung und strenge Risikokontrollen. Die Strategie überwacht gleichzeitig die Auf- und Abwärtsbrechungen des Preises, errichtet Über- oder Verlustpositionen bei einem Breakout und nutzt die mobile Stop-Loss- und mobile Stop-Management-Positionen.

Strategieprinzip

Die Kernlogik besteht darin, bei einem brechen des kleinen Zyklushochs auf dem großen Zyklushoch frei zu machen und bei einem brechen des kleinen Zyklustiefens unter dem großen Zyklustief mehr zu tun. Setzen Sie nach dem Aufbau der Position einen beweglichen Stop-Loss und einen beweglichen Stop-Stop, um zuerst das Risiko zu bestätigen. Wenn sich die Anzahl der Positionen auf die Anzahl der gesetzten Stop-Losses ansammelt, werden die Stop-Loss-Anweisungen im nächsten Zyklus storniert, und dann gehen Sie aus dem Lager und setzen Sie einen beweglichen Stop-Loss und einen beweglichen Stop-Stop, um Gewinne zu sperren und Preisunterschiede zu verfolgen.

Die konkreten Schritte sind:

  1. Berechnen Sie den Großzyklus ((20-Zyklus) Höchstpunkt prevHigh und den Kleinzyklus ((4-Zyklus) Höchstpunkt smallPeriodHigh。
  2. Wenn das High der neuesten K-Linie größer ist als das PrevHigh und das PrevHigh größer ist als das SmallPeriodHigh, bedeutet dies, dass das Big-Period-High das Small-Period-High überschreitet, und wenn keine Position frei ist, ist die Position leer.
  3. Nach dem Aufbau der Lagerstätte wird ein mobiler Stop-Loss eingerichtet, der nach der Umkehrung der Position den Stop-Loss-Buch absagt, um zu verhindern, dass der Stop-Loss eingestellt wird.
  4. Wenn die Anzahl der gehaltenen Positionen die eingestellte Anzahl von Moving-Stop-Zyklen erreicht hat (derzeit 0 Zyklen), wird die Hälfte der Positionen für den nächsten Zyklus ausgegeben und ein Moving-Stop-Loss mit Moving-Stop eingestellt, um die Kursdifferenz zu verfolgen und Gewinne zu sperren.
  5. Ähnlich verhält es sich mit einem Breakout-Low, wenn man eine Position auf Basis eines Breakout-Relations zwischen einem Big-Period-Low und einem Small-Period-Low aufbaut.

Analyse der Stärken

Es handelt sich um eine umfassende und durchschlagende Strategie mit folgenden Vorteilen:

  1. In Kombination mit dem Doppel-Perioden-Sea-Trading-Verfahren kann ein Durchbruchsignal effektiv erkannt werden.
  2. Die Anwendung von mobilen Stop-Loss- und Stop-Stop-Technologien soll die Risiken strikt kontrollieren und große Verluste verhindern.
  3. Zwei Auftritte, ein Halb-Stop und ein Voll-Stop durch Bewegung, um den Gewinn zu sichern.
  4. Es ist ein zweiseitiges Vorgehen, das den Markteigenschaften von Multi- und Short-Stream-Wechselungen entspricht.
  5. Die Rückmeldung ist hervorragend und hat eine starke Festplatten-Performance.

Risikoanalyse

Die wichtigsten Risiken und Maßnahmen sind:

  1. Gefahr eines falschen Durchbruchs. Die Periodiparameter sollten entsprechend angepasst werden, um die Wirksamkeit des Durchbruchs zu gewährleisten.
  2. Gefahr des Abstiegs. Die Filterung sollte in Kombination mit dem Trend und der Form erfolgen, um eine Position am Ende des Trends zu vermeiden.
  3. Die Stop-Loss-Risiken werden überschritten. Die Stop-Loss-Marge kann entsprechend gelockert werden, um sicherzustellen, dass genügend Platz vorhanden ist.
  4. Bewegtes Stoppen ist ein zu sensibles Risiko. Die Einstellung des Post-Stop-Sliders sollte angepasst werden, um unnötige Stopps zu vermeiden.

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Erhöhung der Durchbruchfilter, um die Authentizität der Durchbrüche zu gewährleisten.
  2. Trendschätzungsindikatoren, um zu vermeiden, dass man am Ende des Trends eine Position aufbaut.
  3. In Kombination mit weiteren Zeiträumen wird der Zeitpunkt des Durchbruchs beurteilt.
  4. Hinzufügen von Algorithmen für maschinelles Lernen, dynamische Optimierungsparameter.
  5. In Kombination mit anderen Strategien, um statistische Arbitrage zu implementieren

Zusammenfassen

Die Doppel-Seil-Breakthrough-Strategie kombiniert die Anwendung von Zwei-Zyklus-Technologie, Breakthrough-Theorie und strenge Risikomanagement-Methoden, um die Stabilität der Erträge zu gewährleisten, während die Gewinnrate hoch bleibt. Das Strategie-Modell ist einfach und klar, leicht zu verstehen und anzuwenden, und ist eine sehr gute quantitative Strategie. Die Strategie hat auch viel Optimierungsraum, auf der Grundlage derer Investoren innovativ sein können, um ein besseres Handelssystem zu schaffen.

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

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()