Momentum Turtle Trendfolgestrategie


Erstellungsdatum: 2023-11-23 11:53:27 zuletzt geändert: 2023-11-23 11:53:27
Kopie: 0 Klicks: 630
1
konzentrieren Sie sich auf
1621
Anhänger

Momentum Turtle Trendfolgestrategie

Überblick

Die Dynamic Seesaw Trend-Tracking Strategie ist eine Trend-Tracking-Strategie, die auf den Regeln des Seesaw-Handels basiert. Sie verwendet Seesaw-Indikatoren, um Trends zu identifizieren, und kombiniert diese mit Dynamic-Indikatoren, um einen Teil des Noise-Handels zu filtern. Der Hauptvorteil dieser Strategie ist die Fähigkeit, starke Preistrends zu erfassen und so überzählige Gewinne zu erzielen.

Strategieprinzip

Die Strategie nutzt das grundlegende Breakout-System des Seesaw-Indikators, um die Richtung des Trends zu bestimmen. Insbesondere wird ein bullish Signal ausgesprochen, wenn der Schlusskurs über dem Höchstwert der letzten 20 Tage liegt.

Die Strategie enthält auch einen Momentumfaktor, um einen Teil des Noise-Tradings zu filtern. Wenn die Preisschwankungen weniger als 5 ATR betragen, wird die Strategie nicht in den Handel eingegeben. Dies verhindert, dass ein kleiner Handel verursacht Verluste, weil zu viel Leerlauf gemacht wird.

Nach der Eröffnung der Position verwendet die Strategie die N-Werte des Seilprinzips, um den Ausgang zu durchbrechen. Das System setzt den Stop-Loss-Bereich auf der Grundlage der höchsten und niedrigsten Preise der letzten 20 Tage.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass sie sowohl Trend-Tracking als auch Volumenmanagement kombiniert. Das Seagull-Handelssystem kann die mittelfristigen Preistrends präzise erfassen und verhindert, dass der Marktgeräusch gestört wird. Die Aufnahme des ATR-Volumenfilters kann die Anzahl der unnötigen Geschäfte weiter reduzieren und somit den Gewinnraum erheblich erhöhen.

Insbesondere hat diese Strategie folgende Vorteile:

  1. Der Beige-Indikator ist ein sehr präziser Trender, der die mittelfristigen Trends genau verfolgen kann.
  2. Der dynamische Filtermechanismus reduziert unnötige Transaktionen und verhindert Verluste bei der Anzahl der Transaktionen.
  3. Risikokontrollen sind vorhanden, um Verluste bei einer Trendwende rechtzeitig zu stoppen.
  4. Insgesamt sind die Parameter der Strategie gut optimiert und stehen im Einklang mit den Prinzipien der Seilbahn.

Risikoanalyse

Obwohl die Strategie viel Optimierungsmöglichkeiten bietet, gibt es einige potenzielle Risiken, die zu vermeiden sind:

  1. Es ist unmöglich, die übermäßige Volatilität der langfristigen Positionen zu beheben. Die Positionsdimensionierung des Tide-Systems berücksichtigt nicht die Volatilitätsfaktoren und kann zu einem übermäßigen Einzelschaden führen.
  2. Wenn sich der Markt stark umkehrt, kann der Stop-Loss-Preis überschritten werden, was zu einem höheren als erwarteten Verlust führt.
  3. Das System hat keine Gewinnziele, was zu einer Überlagerung führen kann.

Optimierungsrichtung

Nach der oben erwähnten Risikoanalyse gibt es folgende Optimierungsmöglichkeiten für die Strategie:

  1. Ein dynamischer Positionsalgorithmus mit Volatilitätsanpassung kann in Betracht gezogen werden, um die Positionsverluste aktiv zu reduzieren, wenn ein bestimmter Umfang erreicht wird.
  2. Hinzufügen von Reversing-Mechanismen, um eine Verringerung der Position oder eine umgekehrte Kautierung bei der Bildung von Formen wie Kopf-Schulter- und Doppelkopf zu berücksichtigen.
  3. Erhöhung der Gewinnziele. Wenn die kumulierten Gewinne einen bestimmten Prozentsatz der Gesamtvermögen des Kontos erreichen, kann die Rückzahlung teilweise reduziert werden.

Zusammenfassen

Die Dynamic Seesaw Trend-Tracking Strategie ist insgesamt ein sehr praktisches Mittel- und Langstrecken-Trend-Tracking-Programm. Es kombiniert die Seesaw-Indikator-Trendentscheidung und die Shake-Filterung des ATR-Indikators, um starke Preistrends effektiv zu sperren. Darüber hinaus ist die Risikokontrolle und die Parameteroptimierung der Strategie sehr gut ausgerichtet, um die Rückziehung zu verringern. Die Wirksamkeit dieser Strategie kann weiter verbessert werden, wenn die Module Dynamische Positionsverwaltung, Reverse Mechanismen und Gewinnziele hinzugefügt werden.

Strategiequellcode
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// HA /////////////
haTicker = heikinashi(syminfo.tickerid)
haOpen = security(haTicker, "D", open)
haHigh = security(haTicker, "D", high)
haLow = security(haTicker, "D", low)
haClose = security(haTicker, "D", close)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = haOpen < haClose and isMoving()
short = haOpen > haClose and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red)
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)