Stratégie de croisement à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-11-13 à 10h55,09
Les étiquettes:

img

Résumé

La stratégie de croisement de la moyenne mobile double est une stratégie courante de suivi de tendance. Elle utilise deux moyennes mobiles de différentes périodes pour identifier la direction de la tendance et générer des signaux de trading basés sur leur croisement. Plus précisément, lorsque la moyenne mobile de la période la plus courte franchit au-dessus de la période la plus longue, une croix dorée est formée, indiquant une tendance à la hausse.

La logique de la stratégie

La stratégie utilise principalement des lignes EMA à 6 périodes, 14 périodes, 25 périodes et 80 périodes. Elle calcule d'abord ces valeurs de MA, puis identifie la direction de la tendance en fonction du croisement entre l'EMA à 6 périodes et les trois autres MA.

Lorsque l'EMA à 6 périodes dépasse l'EMA à 14 périodes ou à 25 périodes, et qu'il est au-dessus de l'EMA à 80 périodes, un signal d'achat est généré. Cela indique que l'EMA à court terme brise les MA à moyen et à long terme et qu'une tendance à la hausse peut commencer, nous pouvons donc envisager d'acheter.

À l'inverse, lorsque l'EMA à 6 périodes dépasse l'EMA à 14 périodes ou à 25 périodes, et qu'elle est inférieure à l'EMA à 80 périodes, un signal de vente est généré. Cela indique que l'EMA à court terme est brisé par des MA à moyen et à long terme, et qu'une tendance à la baisse peut commencer, nous pouvons donc envisager de vendre.

Une fois le signal généré, la stratégie ouvre des positions longues ou courtes.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation du croisement MA pour déterminer la tendance est un indicateur technique mature et fiable.

  2. La combinaison de plusieurs délais réduit les faux signaux. L'AM de 6 périodes génère des signaux, tandis que l'AM de 14 périodes, de 25 périodes confirme, et l'AM de 80 périodes définit la tendance globale.

  3. Le stop loss contrôle le risque et protège efficacement le capital.

  4. La logique est simple et claire, facile à comprendre et à valider.

  5. Les périodes d'AM peuvent être ajustées pour s'adapter à l'évolution des conditions du marché.

Analyse des risques

Certains risques de cette stratégie sont les suivants:

  1. Le prix peut se déplacer autour des MA pendant la gamme, générant des signaux invalides excessifs.

  2. Le stop-loss fixe peut être trop rigide.

  3. Ajouter une logique supplémentaire pour sauter le stop loss dans de tels cas.

  4. Impossible de répondre aux fluctuations de prix à court terme.

  5. L'optimisation est limitée, pensez à utiliser des moyennes mobiles adaptatives.

Directions d'optimisation

Quelques façons d'optimiser la stratégie:

  1. Tester différentes combinaisons de périodes d'AM pour trouver des paramètres plus sensibles au marché.

  2. Améliorer le mécanisme d'arrêt des pertes en utilisant des arrêts de retard ou dynamiques pour réduire le risque d'arrêt.

  3. Ajoutez des indicateurs de filtre tels que KDJ, MACD pour éviter les transactions excessives pendant la fourchette.

  4. Optimisez les règles d'entrée, attendez que le croisement MA se forme complètement avant d'entrer pour réduire les faux signaux.

  5. Utiliser des moyennes mobiles adaptatives qui ajustent automatiquement les périodes en fonction de la volatilité.

  6. Ajouter des règles de dimensionnement des positions pour ajuster la taille des positions en fonction des conditions du marché.

  7. Incorporer les bénéfices à la sortie.

Résumé

En résumé, cette stratégie de croisement de moyenne mobile double identifie facilement la direction de la tendance basée sur une logique de croisement simple de MA et présente un risque contrôlable. Elle convient au suivi des tendances à moyen et long terme. Mais la stratégie a beaucoup de marge d'optimisation, via des règles d'entrée, des techniques de stop loss, des conditions de filtrage, etc. Dans l'ensemble, elle sert de tendance de base solide suivant la stratégie, avec des avantages et des inconvénients raisonnables.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = " bhramaji EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")


stopLoss = input(20, title = "Stop loss percentage(0.1%)")


maSource   = input(defval = close, title = "MA Source")
maLength6   = input(defval = 6, title = "MA Period 6", minval = 1)
maLength14  = input(defval = 14, title = "MA Period 14", minval = 1)
maLength25  = input(defval = 25, title = "MA Period 25", minval = 1)
maLength80  = input(defval = 80, title = "MA Period 80", minval = 1)

ma6 = ema(maSource, maLength6)
ma14 = ema(maSource, maLength14)
ma25 = ema(maSource, maLength25)
ma80 = ema(maSource, maLength80)

ma_6_plot = plot(ma6 , title = "MA  6", color = red, linewidth = 2, style = line, transp = 50)
ma14_plot = plot(ma14, title = "MA 14", color = green, linewidth = 2, style = line, transp = 50)
ma25_plot = plot(ma25, title = "MA 25", color = blue, linewidth = 2, style = line, transp = 50)
ma80_plot = plot(ma80, title = "MA 80", color = silver, linewidth = 2, style = line, transp = 50)


longEMA = (crossover(ma6, ma14) or crossover(ma6, ma25)) and (ma6>ma80) 
exitLong = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) 

shortEMA = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) and (ma6< ma80)
exitShort =(crossover(ma6, ma14) or crossover(ma6, ma25))

if (longEMA)
    strategy.entry("LongId", strategy.long)
 
if (shortEMA)
    strategy.entry("ShortId", strategy.short)

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)





Plus de