Combinando las ventajas de la media móvil y el índice ADX, esta estrategia puede identificar eficazmente la existencia y la dirección de las tendencias y reducir las señales falsas.
Esta estrategia es propensa a riesgos comerciales durante las fluctuaciones significativas del mercado. Cuando los precios se mueven violentamente y los indicadores no reaccionan, puede traer pérdidas a la cuenta. Además, la configuración inadecuada de parámetros también puede afectar el rendimiento de la estrategia.
Las pérdidas se pueden controlar mediante el stop loss. Al mismo tiempo, los parámetros se pueden optimizar y combinar con otros indicadores para filtrar para reducir las señales falsas.
Se pueden optimizar los siguientes aspectos de esta estrategia:
Combinar con otros indicadores de filtrado, como bandas de Bollinger, RSI, etc., para mejorar la calidad de la señal
Optimizar los parámetros de longitud de la media móvil y ADX para encontrar la combinación óptima de parámetros
Añadir mecanismos de stop loss para controlar pérdidas individuales
Prueba diferentes períodos de espera para encontrar el ciclo de espera óptimo
/*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")