Stratégie de négociation croisée à double moyenne mobile

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

img

Résumé

La stratégie de négociation double moyenne mobile est une stratégie de négociation quantitative qui utilise des moyennes mobiles croisées pour déterminer les signaux d'entrée et de sortie.

La logique de la stratégie

La logique de base de cette stratégie consiste à suivre 2 moyennes mobiles (10 jours et 200 jours) sur 3 délais (180 minutes, 60 minutes, 120 minutes). Lorsque la moyenne mobile plus rapide dépasse la moyenne mobile plus lente, un croisement doré est généré, indiquant que l'instrument est en tendance haussière. Lorsque la moyenne mobile plus rapide dépasse celle plus lente, un croisement mort est généré, indiquant une tendance baissière.

Premièrement, les moyennes mobiles de 10 jours et de 200 jours sont calculées séparément pour les délais de 180 min et 60 min. Lorsque le MA de 10 jours sur le délai de 180 min dépasse le MA de 200 jours, un signal de croisement doré est généré. Lorsqu'il dépasse le niveau inférieur, un signal de croisement de la mort est généré. Cela fournit les signaux de trading à cycle rapide.

Ensuite, la stratégie introduit le MA de 200 jours sur le délai de 120 minutes en tant que moyenne mobile de contrôle. Seulement lorsque des croisements se produisent sur les cycles de 180/60 minutes, en vérifiant si le MA de 200 jours de 60 minutes est supérieur ou inférieur au MA de 200 jours de 120 minutes, décidera si les transactions doivent être placées pour filtrer les faux signaux.

Par exemple, lorsqu'un croisement doré se produit sur le cycle de 180 minutes, seulement si le MA de 60 minutes de 200 jours est supérieur au MA de 120 minutes de 200 jours, la stratégie sera longue. La position longue ne sera ouverte que lorsque cette condition est remplie. Inversement, si le MA de 60 minutes de 200 jours est inférieur à celui de 120 minutes, aucune position longue ne sera prise.

En résumé, en comparant les relations de moyenne mobile sur différentes périodes, cette stratégie crée plusieurs couches de filtrage pour améliorer la fiabilité du signal, ce qui en fait un type commun de stratégie de trading basée sur des filtres.

Les avantages

  • Amélioration de l'exactitude par confirmation à plusieurs délais. Par rapport aux signaux à un seul délais, l'utilisation de MAs de 180/60/120 minutes réduit considérablement les faux signaux et améliore la qualité des signaux de trading.

  • Fréquence d'opération raisonnable. Contrairement aux stratégies à haute fréquence, cette stratégie négocie moins fréquemment, évitant ainsi la nécessité de surveiller continuellement le marché. Plus adaptée au trading manuel.

  • En utilisant uniquement des moyennes mobiles de base sans logique complexe, cette stratégie a une faible barrière à l'entrée et est facile à comprendre pour les débutants.

  • Optimisé sur des périodes et des paramètres. Les types et périodes d'AM utilisés sont réglables. Différents ensembles de paramètres peuvent être testés pour différents produits et régimes de marché.

Les risques

  • Les moyennes mobiles de base ont un décalage par conception et échouent souvent à capturer des renversements de tendance rapides.

  • Lorsque le marché varie, les relations MA peuvent se croiser très fréquemment, provoquant des entrées excessives et des déclencheurs de stop loss, augmentant les coûts et les risques de perte.

  • Le risque de sur-optimisation des paramètres. L'alpha provient principalement du réglage des paramètres basé sur des ensembles de données limités. Cela conduit probablement à des problèmes de sur-optimisation et de sur-optimisation.

Les solutions:

  • Réduction des périodes de MA pour une réaction plus rapide
  • Ajoutez des filtres pour éviter les entrées excessives pendant les bouleversements du marché
  • Robustesse d'essai pour différents produits et intervalles de temps

Directions d'optimisation

Il y a encore place à d'autres optimisations:

  • Essayez différentes combinaisons de délais et ajustez les périodes MA pour trouver de meilleurs paramètres, grâce à l'optimisation de la force brute et aux techniques d'apprentissage automatique.

  • Incorporer des analyses de tendance sur le volume et les délais plus longs pour une confirmation supplémentaire du signal, par exemple éviter les entrées lors de faibles volumes de négociation.

  • Prédire les schémas de courbe à l'avance en utilisant des modèles d'apprentissage en profondeur comme les RNN pour aider à la prise de décision.

  • Introduire des moyennes mobiles adaptatives pour améliorer la logique de filtrage. Ajuster dynamiquement les périodes de MA pour réduire les entrées pendant l'incertitude du marché.

Conclusion

La stratégie de négociation croisée à moyenne mobile double compare les relations de moyenne mobile sur plusieurs délais pour filtrer les faux signaux, améliorant la fiabilité du signal.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")

Plus de