Estrategia de negociación de tendencias cruzadas de ADX

El autor:¿ Qué pasa?, Fecha: 2023-12-08 15:49:12
Las etiquetas:

img

Resumen general

Esta estrategia combina el índice de movimiento direccional (ADX), el indicador direccional más (DI +) y los promedios móviles rápidos y lentos para determinar la dirección del mercado y el período de retención. Pertenece a las estrategias comerciales de seguimiento de tendencias.

Principios

La lógica central de esta estrategia es generar señales de compra cuando la línea +DI cruza por encima de la línea ADX desde abajo hacia arriba, y generar señales de venta cuando la línea +DI cruza por debajo de la línea ADX desde arriba hacia abajo. Por lo tanto, esta estrategia se basa en el cruce entre DI y ADX para determinar las tendencias del mercado y los puntos de reversión. Al mismo tiempo, la relación entre los promedios rápidos y lentos se utiliza para determinar la tendencia general del mercado. Las señales de negociación solo se considerarán cuando la EMA rápida esté por encima de la EMA lenta.

Específicamente, se activará una señal de compra cuando se cumplan las siguientes condiciones:

  1. La EMA rápida está por encima de la EMA lenta
  2. La línea +DI cruza la línea ADX hacia arriba
  3. Valor ADX por debajo del umbral de 30

Se activará una señal de venta cuando se cumplan las siguientes condiciones:

  1. Valor ADX superior al umbral de 30
  2. La línea +DI cruza la línea ADX hacia abajo

La estrategia también incorpora una lógica de stop loss para salir de todas las posiciones cuando el precio cae por debajo del nivel de stop loss.

Ventajas

La estrategia combina los indicadores DI, ADX y media móvil para determinar eficazmente los cambios en las tendencias del mercado.

  1. Utilice los cruces DI y ADX para determinar con precisión los puntos de entrada y salida
  2. Sistema de filtro EMA rápido y lento para determinar la tendencia general del mercado, evitando malas operaciones
  3. Utilice los valores de ADX para determinar la fuerza de la tendencia, solo negocie cuando la tendencia sea débil, evitando fallas falsas
  4. Incorporar un mecanismo de stop loss para controlar el riesgo a la baja
  5. Condiciones de entrada estrictas evitar la compra de las partes superiores y la venta de los fondos
  6. Las reglas claras de salida permiten detener las pérdidas y obtener ganancias a tiempo

Los riesgos

Hay algunos riesgos a tener en cuenta con esta estrategia:

  1. El indicador ADX tiene un efecto de retraso, podría perder el mejor momento para las reversiones de precios
  2. Cuando la volatilidad del mercado es alta pueden producirse más señales falsas
  3. Los ajustes de EMA rápidos y lentos incorrectos podrían llevar a operaciones perdidas o filtrar señales válidas
  4. El nivel de suspensión de pérdidas establecido demasiado alto no permite controlar eficazmente el riesgo

Estos riesgos pueden abordarse mediante la optimización de los parámetros de ADX y promedio móvil, el ajuste del nivel de stop loss, la adición de filtros para la confirmación, etc.

Oportunidades de mejora

Hay espacio para otras mejoras:

  1. Prueba ADX de diferentes períodos de longitud para encontrar combinaciones óptimas
  2. Añadir otros indicadores como RSI, Bandas de Bollinger para la confirmación de la señal
  3. Utilice algoritmos de aprendizaje automático para optimizar automáticamente parámetros y reglas
  4. Ajuste dinámico de los niveles de stop loss para mitigar los riesgos en etapa tardía
  5. Construir un modelo de puntuación multifactorial para hacer más sólidos los criterios de entrada y salida

Conclusión

En general, esta estrategia de tendencia cruzada de ADX es bastante estable, capaz de capturar efectivamente las reversiones desde el principio, pero el control del riesgo es crítico.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00


strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1)   //


TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange

SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)

fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)




//long condition
longCondition=  ADX < threshold  and crossover(DIPlus,ADX)  and fastEmaVal > slowEmaVal


barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ADXLE", long=true,  when= longCondition  and strategy.position_size<1) 

barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)



//Add
strategy.entry(id="ADXLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ADXLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss


//exit condition
exitCondition=  ADX > threshold  and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll",    qty=strategy.position_size ,   when= exitCondition)   //close all     

Más.