Estrategia dinámica de seguimiento de tendencia ascendente del ADX


Fecha de creación: 2023-12-11 17:18:32 Última modificación: 2023-12-11 17:18:32
Copiar: 0 Número de Visitas: 437
1
Seguir
1212
Seguidores

Estrategia dinámica de seguimiento de tendencia ascendente del ADX

Descripción general

La estrategia permite un seguimiento oportuno de la tendencia al seguir los cambios dinámicos en el indicador ADX, capturando los cambios iniciales en la tendencia del mercado. Cuando el ADX sube rápidamente desde los niveles bajos, indica que la tendencia se está formando, que es un gran momento para entrar.

Principio de estrategia

La estrategia se basa principalmente en los cambios dinámicos en el indicador ADX para juzgar el desarrollo de la tendencia. Cuando el indicador ADX está bajo, representa un cambio de tendencia pequeño; cuando el ADX sube rápidamente desde el nivel bajo, indica que la tendencia se está formando. La estrategia capta el desarrollo de la tendencia al monitorear el rápido aumento del ADX.

En concreto, la estrategia de admisión incluye los siguientes criterios:

  1. ADX sobre el umbral establecido (como 10)
  2. El ADX sube rápidamente
  3. El precio se coloca sobre una media móvil simple o una media móvil indexada.

Cuando las condiciones anteriores se cumplen al mismo tiempo, representa que la tendencia se está formando, haciendo más; en el momento de atravesar la media móvil, la posición está en equilibrio. El uso de dos medias móviles permite juzgar con mayor precisión el desarrollo de la tendencia.

Las condiciones de stop loss son similares: cuando el ADX cae rápidamente hacia abajo, se abre; cuando el precio se cierra por debajo de la media móvil, se cierra.

Análisis de las ventajas

La mayor ventaja de esta estrategia es la captura de la evolución de la tendencia en el tiempo. El método tradicional de ver solo el valor del ADX, a menudo se espera que el ADX suba a 20 o 25 para confirmar la tendencia, lo que ha perdido el mejor momento de entrada.

Además, la estrategia se ha complementado con la introducción de las medias móviles, que permiten filtrar algunos errores de diagnóstico y mejorar la estabilidad de la estrategia.

Análisis de riesgos y optimización

El mayor riesgo de esta estrategia reside en el retraso del indicador ADX en sí mismo. A pesar de que se puede reducir el retraso mediante el seguimiento de los rápidos aumentos, todavía existe un cierto retraso. Esto puede causar que parte de los mercados que cambian rápidamente no puedan ser capturados.

Además, el indicador ADX no es 100% exacto para juzgar las tendencias, y es inevitable que haya algunos diagnósticos erróneos. Aunque la introducción de promedios móviles puede filtrar parte del ruido, aún se necesita una optimización adicional.

La estrategia aún tiene mucho espacio para la optimización, la clave está en mejorar aún más la precisión de captura de los indicadores de ADX. Se puede considerar la introducción de métodos como el aprendizaje automático, el entrenamiento de modelos para determinar la distribución de probabilidades después de los cambios en ADX. También se puede probar diferentes combinaciones de parámetros y otros indicadores auxiliares para optimizar las pruebas.

Resumir

Esta estrategia de seguimiento de tendencias de ADX de ascenso dinámico permite el seguimiento oportuno de las tendencias mediante la captura de los puntos de cambio en el mercado en los que el ADX aumenta rápidamente. La mayor ventaja es que es extremadamente ágil en el tiempo y puede capturar de manera efectiva las tendencias al principio.

Código Fuente de la Estrategia
/*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)