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.
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.
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:
Bien qu'il existe un grand potentiel d'optimisation ultérieure, la stratégie comporte également certains risques à prévenir:
Sur la base des risques susmentionnés, les principales opportunités d'optimisation sont les suivantes:
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)