La stratégie utilise le croisement des indicateurs MA et ADX comme base pour les décisions de négociation. Lorsque ADX est au-dessus du seuil et que DIdiff (DI+ - DI-) est supérieur à 0, elle va long. Lorsque ADX est au-dessus du seuil et que DIdiff est inférieur à 0, elle sort des positions.
En combinant les avantages de la moyenne mobile et de l'indice ADX, cette stratégie permet d'identifier efficacement l'existence et la direction des tendances et de réduire les faux signaux.
En outre, cette stratégie est une stratégie entièrement quantitative basée sur des calculs de paramètres avec de bons résultats de backtesting et des performances stables en direct, ce qui la rend adaptée au trading algorithmique.
Cette stratégie est sujette aux risques de trading lors de fluctuations importantes du marché. Lorsque les prix évoluent violemment et que les indicateurs ne réagissent pas, elle peut entraîner des pertes sur le compte. En outre, des paramètres incorrects peuvent également affecter les performances de la stratégie.
En même temps, les paramètres peuvent être optimisés et combinés avec d'autres indicateurs de filtrage pour réduire les faux signaux.
Les aspects suivants de cette stratégie peuvent être optimisés:
Combiner avec d'autres indicateurs de filtrage, tels que les bandes de Bollinger, le RSI, etc., pour améliorer la qualité du signal
Optimiser les paramètres de longueur de la moyenne mobile et ADX pour trouver la combinaison optimale de paramètres
Ajouter des mécanismes de stop loss pour contrôler les pertes uniques
Tester différentes périodes de rétention pour trouver le cycle de rétention optimal
L'indice de mouvement directionnel de la moyenne de l'élan La stratégie de croisement de la moyenne mobile peut identifier efficacement les directions de tendance du marché en calculant l'élan des prix et la force de la tendance. C'est une stratégie de suivi de tendance fiable. Cette stratégie a un degré algorithmique élevé, un backtesting stable et de bonnes performances en direct. Une optimisation ultérieure peut conduire à une meilleure efficacité de la stratégie.
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Julien_Eche //@version=5 strategy("MA ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity) start_date = input(timestamp("1975-01-01T00:00:00"), title="Start Date") end_date = input(timestamp("2099-01-01T00:00:00"), title="End Date") // Indicator Inputs group1 = "MA Parameters" lengthMA = input.int(50, title="MA Length", minval=1, group=group1) sourceMA = input(close, title="MA Source", group=group1) group2 = "ADX Parameters" diLength = input.int(14, title="DI Length", minval=1, group=group2) adxSmoothing = input.int(14, title="ADX Smoothing", minval=1, maxval=50, group=group2) adxMAActive = input.int(15, title="ADX MA Active", minval=1, group=group2) // Directional Movement calculations upwardMovement = ta.change(high) downwardMovement = -ta.change(low) trueRangeSmoothed = ta.rma(ta.atr(diLength), diLength) positiveDM = fixnan(100 * ta.rma(upwardMovement > downwardMovement and upwardMovement > 0 ? upwardMovement : 0, diLength) / trueRangeSmoothed) negativeDM = fixnan(100 * ta.rma(downwardMovement > upwardMovement and downwardMovement > 0 ? downwardMovement : 0, diLength) / trueRangeSmoothed) dmSum = positiveDM + negativeDM // Average Directional Index (ADX) calculation averageDX = 100 * ta.rma(math.abs(positiveDM - negativeDM) / math.max(dmSum, 1), adxSmoothing) // Line color determination lineColor = averageDX > adxMAActive and positiveDM > negativeDM ? color.teal : averageDX > adxMAActive and positiveDM < negativeDM ? color.red : color.gray // Moving Average (MA) calculation maResult = ta.wma(sourceMA, lengthMA) // Plotting the Moving Average with color plot(maResult, color=lineColor, title="MA", linewidth=3) // Strategy logic if (averageDX > adxMAActive and positiveDM > negativeDM) strategy.entry("Buy", strategy.long) if (averageDX > adxMAActive and positiveDM < negativeDM) strategy.close("Buy")