Cette stratégie combine le concept de trading de tortue avec l'analyse de phase de Niko Bakker, en utilisant trois moyennes mobiles de cycles différents pour déterminer la direction de la tendance à suivre.
Calculer trois moyennes mobiles de cycles différents: la période moyenne rapide est de 8 jours, la période moyenne mobile est de 21 jours et la période moyenne lente est de 55 jours.
Déterminer les conditions d'entrée: lorsque la moyenne mobile rapide dépasse la moyenne mobile moyenne et que les trois moyennes mobiles sont en tendance à la hausse, passer à long; lorsque la moyenne mobile rapide dépasse la moyenne mobile moyenne et que les trois moyennes mobiles sont en tendance à la baisse, passer à court.
Déterminer les conditions de sortie: fermer les positions lorsque la moyenne mobile rapide traverse la moyenne mobile moyenne dans le sens inverse.
L'ATR peut également être utilisé pour ajuster dynamiquement la dimension de la position.
L'utilisation de trois moyennes mobiles permet de déterminer la direction de la tendance et d'éviter de fausses ruptures.
Suivre la tendance pour le potentiel de profit.
L'utilisation de moyennes mobiles donne lieu à des bénéfices stables et à des tirages relativement faibles.
Une stratégie de stop loss contrôlable réduit la probabilité de pertes énormes.
Prédisposé à de multiples petites pertes, ce qui réduit l'efficacité des profits.
Les moyennes mobiles sont en retard et peuvent manquer les points de renversement de tendance.
Le dimensionnement des positions fixes ne permet pas de contrôler efficacement les risques et peut entraîner un appel de marge lors de fluctuations importantes du marché.
L'optimisation incorrecte des paramètres conduit à un sur-échange, à une augmentation des coûts de négociation et à des glissements.
Optimiser les périodes de moyenne mobile en fonction des caractéristiques de l'instrument de négociation.
Utilisez l'ATR pour ajuster dynamiquement la dimension de position.
Ajoutez une stratégie de stop-loss.
Incorporer des indicateurs de volume des transactions pour déterminer la fiabilité des tendances.
Cette stratégie intègre les indicateurs techniques traditionnels et la philosophie du trading de tortue, en utilisant trois moyennes mobiles pour suivre les tendances. Avec une bonne optimisation des paramètres, elle peut atteindre une bonne rentabilité. Mais elle comporte également certains risques.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JoshuaMcGowan //@version=4 // 1. Define strategy settings strategy(title="Triple Moving Average", overlay=true, pyramiding=0, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) fastMALen = input(title="Fast MA Length", type=input.integer, defval=8) medMALen = input(title="Medium MA Length", type=input.integer, defval=21) slowMALen = input(title="Slow MA Length", type=input.integer, defval=55) //endMonth = input(title="End Month Backtest", type=input.integer, defval=11) //endYear = input(title="End Year Backtest", type=input.integer, defval=2019) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true) riskPerc = input(title="Risk %", type=input.float, defval=0.5, step=0.25) // 2. Calculate strategy values fastMA = sma(close, fastMALen) medMA = sma(close, medMALen) slowMA = sma(close, slowMALen) //Position Sizing riskEquity = (riskPerc / 100) * strategy.equity atrCurrency = (atr(20) * syminfo.pointvalue) posSize = usePosSize ? floor(riskEquity / atrCurrency) : 1 //Backtest Window //tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0)) // 3. Determine long trading conditions enterLong = crossover(fastMA, medMA) and (fastMA > slowMA) and (medMA > slowMA) and window() exitLong = crossunder(fastMA, medMA) // 4. Code short trading conditions enterShort = crossunder(fastMA, medMA) and (fastMA < slowMA) and (medMA < slowMA) and window() exitShort = crossover(fastMA, medMA) // 5. Output strategy data plot(series=fastMA, color=color.green, title="Fast MA") plot(series=medMA, color=color.purple, title="Medium MA") plot(series=slowMA, color=color.red, title="Slow MA", linewidth=2) bgColour = enterLong and (strategy.position_size < 1) ? color.green : enterShort and (strategy.position_size > -1) ? color.red : exitLong and (strategy.position_size > 0) ? color.lime : exitShort and (strategy.position_size < 0) ? color.orange : na bgcolor(color=bgColour, transp=85) // 6. Submit entry orders if (enterLong) strategy.entry(id="EL", long=true, qty=1) if (enterShort) strategy.entry(id="ES", long=false, qty=1) // 7. Submit exit orders strategy.close_all(when=exitLong and (strategy.position_size > 0)) strategy.close_all(when=exitShort and (strategy.position_size < 0)) strategy.close_all(when=not window()) //END