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 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.
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 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:
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é.
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")