Stratégie de suivi des tendances de Momentum Turtle

Auteur:ChaoZhang est là., Date: 2023-11-23 à 11h53
Les étiquettes:

img

Résumé

La stratégie de suivi des tendances de la tortue de mouvement est une stratégie de suivi des tendances basée sur les règles de trading de la tortue. Elle utilise les indicateurs de la tortue pour identifier les tendances et combine des métriques de mouvement pour filtrer certains métiers bruyants.

Principe de stratégie

Cette stratégie utilise le système de rupture dans les indicateurs de la tortue pour déterminer la direction de la tendance. Plus précisément, lorsque le prix de clôture est supérieur au prix le plus élevé au cours des 20 derniers jours, c'est un signal haussier et va long; lorsque le prix de clôture est inférieur au prix le plus bas au cours des 20 derniers jours, c'est un signal baissier et la stratégie va court.

Pour filtrer certains échanges bruyants, cette stratégie intègre également un facteur de dynamique. Si la fluctuation des prix est inférieure à 5 ATR, la stratégie n'entrera pas dans les échanges. Cela évite les pertes causées par les fléchettes sur les marchés latéraux.

Après avoir ouvert des positions, la stratégie utilise les sorties N-breakout dans les règles Turtle d'origine pour le stop loss. Ce système définit le stop loss en fonction des prix les plus élevés et les plus bas au cours des 20 derniers jours. Par exemple, le stop loss pour les positions longues serait de 2N ATR inférieur au plus bas au cours des 20 derniers jours. La prise de profit pour cette stratégie est simple - fixée à 10% de la valeur totale du compte.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle combine à la fois le suivi des tendances et la gestion de l'élan. Le système Turtle peut capturer avec précision les tendances à moyen terme des prix sans être perturbé par le bruit du marché. Le filtre d'élan ATR supplémentaire réduit encore le nombre inutile de transactions, augmentant ainsi considérablement le potentiel de profit.

Plus précisément, cette stratégie présente les points forts suivants:

  1. Les indicateurs Turtle permettent d'identifier avec précision les tendances et de suivre les tendances à moyen terme.
  2. Les filtres d'élan réduisent les transactions inutiles et évitent les pertes sur la fréquence des transactions.
  3. Des mesures solides de contrôle des risques permettent d'arrêter rapidement les pertes lorsque les tendances s'inversent.
  4. Dans l'ensemble, le réglage de la stratégie s'aligne bien avec les principes originaux de Turtle.

Analyse des risques

Bien qu'il existe un grand potentiel d'optimisation ultérieure, la stratégie comporte également certains risques à prévenir:

  1. Ne prend pas en compte les fluctuations excessives des avoirs à long terme.
  2. Les prix de stop-loss risquent d'être pris en charge lors d'inversions extrêmes, ce qui entraînerait des pertes supérieures aux attentes.
  3. L'absence d'objectifs de profit signifie des participations excessives et le risque de détention de positions sous-marines.

Des possibilités d'amélioration

Sur la base des risques susmentionnés, les principales opportunités d'optimisation sont les suivantes:

  1. Considérez les modèles dynamiques de dimensionnement des positions ajustés pour tenir compte de la volatilité afin de réduire la taille des transactions perdantes.
  2. Ajoutez des mécanismes d'inversion pour réduire ou inverser les motifs de topping tels que la tête et les épaules ou les doubles tops.
  3. Ajouter des objectifs de profit de façon à réduire les participations lorsque les bénéfices cumulés atteignent un pourcentage du capital total.

Conclusion

Dans l'ensemble, la stratégie de suivi des tendances de Momentum Turtle est un système robuste pour le suivi des tendances à moyen et long terme. Elle combine des indicateurs Turtle pour l'identification des tendances et des filtres ATR pour la gestion de la volatilité afin de capturer les fortes tendances.


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

Plus de