Les ressources ont été chargées... Je charge...

Tendance de la moyenne mobile triple suivant la stratégie

Auteur:ChaoZhang est là., Date: 2024-02-01 11:02:17 Je suis désolé
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

  1. 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.

  2. 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.

  3. Déterminer les conditions de sortie: fermer les positions lorsque la moyenne mobile rapide traverse la moyenne mobile moyenne dans le sens inverse.

  4. L'ATR peut également être utilisé pour ajuster dynamiquement la dimension de la position.

Analyse des avantages

  1. L'utilisation de trois moyennes mobiles permet de déterminer la direction de la tendance et d'éviter de fausses ruptures.

  2. Suivre la tendance pour le potentiel de profit.

  3. L'utilisation de moyennes mobiles donne lieu à des bénéfices stables et à des tirages relativement faibles.

  4. Une stratégie de stop loss contrôlable réduit la probabilité de pertes énormes.

Analyse des risques

  1. Prédisposé à de multiples petites pertes, ce qui réduit l'efficacité des profits.

  2. Les moyennes mobiles sont en retard et peuvent manquer les points de renversement de tendance.

  3. 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é.

  4. L'optimisation incorrecte des paramètres conduit à un sur-échange, à une augmentation des coûts de négociation et à des glissements.

Optimisation

  1. Optimiser les périodes de moyenne mobile en fonction des caractéristiques de l'instrument de négociation.

  2. Utilisez l'ATR pour ajuster dynamiquement la dimension de position.

  3. Ajoutez une stratégie de stop-loss.

  4. Incorporer des indicateurs de volume des transactions pour déterminer la fiabilité des tendances.

Résumé

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

Plus de