Tendencia dinámica al alza de ADX siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-12-11 17:18:32
Las etiquetas:

img

Resumen general

Esta estrategia rastrea los cambios dinámicos del indicador ADX para capturar los cambios tempranos en las tendencias del mercado para seguir la tendencia oportuna. Cuando el ADX sube rápidamente desde niveles bajos, indica que se está formando una tendencia que presenta una gran oportunidad de entrar. Con la ayuda de promedios móviles, puede filtrar señales falsas de manera efectiva.

Estrategia lógica

El núcleo de esta estrategia radica en juzgar el desarrollo de la tendencia basado en los cambios dinámicos del indicador ADX. Un ADX bajo significa pequeñas fluctuaciones en las tendencias. Cuando el ADX sube rápidamente desde niveles bajos, indica que se está formando una tendencia. La estrategia captura la aparición de la tendencia mediante el monitoreo del fuerte aumento del ADX.

Específicamente, la señal de entrada consiste en los siguientes factores:

  1. ADX sobrepasa un umbral (por ejemplo, 10)
  2. ADX sube rápidamente hacia arriba
  3. Los precios se cruzan por encima de la media móvil simple o exponencial

Cuando se cumplen todas las condiciones anteriores, indica que se está formando una tendencia alcista para ir largo. Cuando el precio cae por debajo de los promedios móviles, se cierran posiciones. Se utilizan dos promedios móviles para juzgar las tendencias con mayor precisión.

La lógica de stop loss es similar: ir corto cuando el ADX cae rápidamente, y cerrar posiciones cuando el precio sube por encima de los promedios móviles.

Análisis de ventajas

La mayor ventaja aquí es la captura oportuna de las tendencias emergentes. La forma convencional de ver los valores absolutos de ADX a menudo requiere una confirmación por encima de 20 o 25 para llamar a una tendencia, perdiendo así el momento óptimo de entrada.

Además, las medias móviles ayudan a filtrar las señales falsas de manera efectiva, mejorando la estabilidad de la estrategia.

Análisis de riesgos y optimización

El mayor riesgo proviene de la naturaleza rezagada del propio ADX. A pesar de atrapar el rápido aumento para reducir el rezagado, todavía hay algún retraso. Esto causa perderse algunos mercados que se invierten rápidamente.

Además, ADX no juzga perfectamente las tendencias y inevitablemente las diagnostica erróneamente de vez en cuando.

Todavía hay un gran espacio para optimizar esta estrategia, principalmente para mejorar la precisión de ADX en la captura de tendencias. Se pueden explorar métodos como el aprendizaje automático, modelos de entrenamiento para pronosticar la distribución de probabilidades basados en los cambios de ADX. También se pueden probar otros aspectos como el ajuste de parámetros, indicadores adicionales, etc.

Conclusión

Esta estrategia de seguimiento de tendencias ADX dinámica captura rápidamente los cambios de tendencia al identificar fuertes subidas de ADX, siguiendo así las tendencias de manera oportuna.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1h
basePeriod: 15m
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/
// © dhilipthegreat

//@version=4
//Rising ADX strategy

strategy(title="Rising ADX strategy", overlay=false)

adxlen = input(14, title="ADX Length", minval=1)
threshold = input(10, title="threshold", minval=5)

hline(threshold, color=color.black, linestyle=hline.style_dashed)

atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen=input(20, title="Moving average 1 ",minval=1, maxval=50)
avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na

atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen2=input(20, title="Moving average 2",minval=1, maxval=200)
avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na

//ADX&DI
dilen = 14
dirmov(len,_high,_low,_tr) =>
	up = change(_high)
	down = -change(_low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(_tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)

	[plus, minus]

adx(dilen, adxlen,_high,_low,_tr) =>
	[plus, minus] = dirmov(dilen,_high,_low,_tr)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

[plus, minus] = dirmov(dilen,high,low,tr)
sig = adx(dilen, adxlen,high,low,tr)
prev_sig = adx(dilen, adxlen,high[1],low[1],tr)
plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2)

//////
longCondition=  sig > threshold  and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2
barcolor(longCondition ? color.yellow: na)
Long_side = input(true, "Long side")
if Long_side
    strategy.entry(id="Long", long=true,  when= longCondition  and strategy.position_size<1)
    exitCondition=  (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2
    strategy.close(id="Long",comment="L exit",    qty=strategy.position_size ,   when= exitCondition)   //close all

shortCondition=  sig > threshold  and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2
barcolor(shortCondition ? color.gray: na)
Short_side = input(true, "Short side")
if Short_side
    strategy.entry(id="Short", long=false,  when= shortCondition  and strategy.position_size<1)
    sell_exitCondition=  (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2
    strategy.close(id="Short",comment="S exit",    qty=strategy.position_size ,   when= sell_exitCondition)   //close all

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

barcolor(strategy.position_size<0 ? color.orange: na)
bgcolor(strategy.position_size<0 ? color.orange: na)

Más.