La stratégie de suivi des tendances des moyennes mobiles doubles est une stratégie de trading quantitative qui suit les tendances des prix des actions.
Cette stratégie est principalement basée sur le système de moyenne mobile exponentielle double pour déterminer la direction de la tendance des prix. La stratégie utilise deux EMAs rapides et lentes avec des paramètres différents, l'EMA1 rapide réagit plus rapidement aux changements de prix et l'EMA2 lente répond plus lentement aux changements de prix. Lorsque la ligne rapide traverse au-dessus de la ligne lente, c'est un signal d'achat indiquant que le prix a commencé à augmenter; lorsque la ligne rapide traverse en dessous de la ligne lente, c'est un signal de vente indiquant que le prix a commencé à baisser.
En outre, la stratégie introduit également l'indicateur ADX pour juger de la force de la tendance. ADX calcule les fluctuations de prix pour juger de la force de la tendance. Lorsque l'ADX augmente, cela signifie que la tendance se renforce; lorsque l'ADX chute, cela signifie que la tendance s'affaiblit. La stratégie définit des conditions de filtrage du trading via l'indicateur ADX, n'émettant des signaux de trading que lorsque la force de la tendance est relativement forte.
Plus précisément, les règles de génération de signaux de la stratégie sont les suivantes:
Cela peut filtrer efficacement les signaux non valides avec une tendance plus faible, améliorant encore la stabilité du système de négociation.
Cette stratégie présente les principaux avantages suivants:
Capture les tendances des prix à moyen et long terme: Le double système EMA permet de déterminer efficacement les tendances des prix à moyen et long terme et d'éviter les interférences du bruit de marché à court terme.
Filtre les fausses éruptions: En évaluant la force de la tendance à travers l'indicateur ADX, il évite les pertes inutiles causées par de fausses ruptures autour des points tournants de la tendance.
Grand espace d'optimisation des paramètres: Les paramètres de ligne rapide et lente, les paramètres ADX et plus ont une marge d'optimisation qui peut donner de meilleurs résultats commerciaux grâce à des combinaisons de paramètres.
Une grande adaptabilité: Cette stratégie convient à la plupart des stocks et des délais et a été vérifiée sur divers marchés.
Facile à mettre en œuvre: Cette stratégie ne nécessite que des indicateurs de moyenne mobile simples, consomme peu de ressources, est facile à programmer et a de faibles coûts d'application pratique.
Cette stratégie comporte également certains risques, principalement concentrés dans les domaines suivants:
Risque d'inversion de tendance: Toute stratégie de tendance ne peut pas déterminer parfaitement les points d'inversion de tendance, et elle est condamnée à subir des pertes plus importantes lorsque la tendance réelle s'inverse.
Risque de suroptimisation: L'optimisation des paramètres à l'extrême peut également conduire à une suradaptation de la stratégie aux données historiques, ce qui réduira la stabilité et l'effet pratique de la stratégie.
Risque d'événement cygne noir: des événements majeurs inattendus briseront le modèle de tendance des prix d'origine, provoquant l'échec de l'indicateur de moyenne mobile, nécessitant une intervention manuelle ou des paramètres de stop loss pour contrôler les pertes.
Pour faire face aux risques susmentionnés, nous pouvons optimiser les aspects suivants:
Introduisez des indicateurs supplémentaires pour déterminer les points de basculement des prix.
Il est également possible d'introduire le MACD et d'autres indicateurs de jugement auxiliaires.
Effectuer des formations et des essais multi-groupes sur les combinaisons de paramètres et sélectionner des combinaisons avec une bonne stabilité et un effet pratique.
Il y a aussi quelques directions dans lesquelles cette stratégie peut être optimisée:
Mettre en place des mécanismes d'arrêt des pertes: définir un stop loss mobile ou un stop loss en pourcentage, qui peut arrêter activement les pertes lorsque les tendances s'inversent pour éviter des pertes excessives.
Indicateurs combinés du volume des transactions: Par exemple, le volume des transactions, ce qui peut éviter de mauvais signaux lorsque le volume des transactions s'accroît à un tournant des prix.
Optimisation auto-adaptative par paramètre: Permettre aux paramètres des indicateurs de s'adapter en fonction des changements du marché en temps réel, plutôt que des paramètres statiques fixes, ce qui peut grandement améliorer la stabilité des stratégies.
Introduire l'apprentissage automatique: Utiliser des algorithmes d'apprentissage automatique pour analyser de grandes quantités de données historiques afin de déterminer les paramètres des moyennes mobiles et de l'ADX, et même prédire les mouvements de prix futurs.
Optimisation du cycle croisé: Les paramètres des différents cycles de négociation peuvent être définis différemment et la configuration optimale pour chaque cycle peut être testée.
En général, la stratégie de suivi des tendances des moyennes mobiles doubles est une idée de stratégie mature et stable. Cette stratégie capture les tendances des prix à moyen et long terme via le système EMA double, et a l'indicateur ADX pour filtrer les signaux, ce qui peut capturer efficacement les tendances des prix des actions et éviter les interférences du bruit du marché à court terme. En même temps, cette stratégie comporte également certains risques, nécessitant l'optimisation des combinaisons de paramètres et des méthodes de stop loss, et peut même introduire plus d'indicateurs auxiliaires et d'algorithmes d'apprentissage automatique pour améliorer la stabilité de la stratégie. En résumé, la stratégie de suivi des tendances des moyennes mobiles doubles a un bon équilibre, et est une idée de stratégie quantitative adaptée aux investisseurs à moyen et long terme.
/*backtest start: 2022-12-14 00:00:00 end: 2023-11-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing") len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2") len3=input(550) src = close ema1=ema(src, len) ema2=ema(ema1, len2) d=ema1-ema2 zlema=ema1+d ema21=ema(src, (len/3)*2) ema22=ema(ema21, (len2/3)*2) d2=ema21-ema22 zlema2=ema21+d2 ema31=ema(src, len3) ema32=ema(ema21, len3) d3=ema31-ema32 zlema3=ema31+d2 fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //MAs //ma1 = security(tickerid, "60", vwma(src, len)[1]) //ma2 = security(tickerid, "120", vwma(src, len)[1]) //plot(ma1, linewidth = 2, color = blue, title = "MA") //plot(ma2, linewidth = 2, color = red, title = "MA2") // ADX lenadx = 14 lensig = 14 limadx = 18 up = change(high) down = -change(low) trur = rma(tr, lenadx) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) adx2 = ema(adx, 14) adx2i = ema(adx2,14) dadx2 = adx2 - adx2i zladx2 = adx2 + dadx2 plus2 = ema(plus, 14) plus2i = ema (plus2, 14) dplus2 = plus2 - plus2i zlplus2 = plus2 + dplus2 minus2 = ema(minus, 14) minus2i = ema (minus2, 14) dminus2 = minus2 - minus2i zlminus2 = minus2 + dminus2 vwma = vwma(close, 150) vwma2 = ema(vwma, 9) vwma2i = ema(vwma2, 9) dvwma2 = vwma2 - vwma2i zlvwma2 = vwma2 + dvwma2 rmax=rma(src, len) rmax2=rma(rmax, len2) rmd=rmax-rmax2 zlrmax=rmax+rmd rmaxz=rma(src, (len/3)*2) rmaxz2=rma(rmaxz, (len2/3)*2) rmzd=rmaxz-rmaxz2 zlrmaxz=rmaxz+rmzd rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime rmaxcol= zlrmax[1] > zlema[1] ? red:lime rmazlema3=rma(zlema3, 100) plot(rmazlema3, color=gray, linewidth=2) plot(zlema, color=green) plot(zlema2, color=yellow) plot(zlema3, color=teal, linewidth=2) plot(ema2, color=na) plot(rmax, color=rmaxcol2, linewidth=3) plot(zlrmax, color=rmaxcol, linewidth=3) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if zlrmax[1] < zlema[1] strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if zlrmax[1] > zlema[1] strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))