ADX Filtrado Chande Kroll Tendencia de pérdida de parada siguiendo la estrategia

El autor:¿ Qué pasa?, fecha: 2023-11-06 14:52:27
Las etiquetas:

img

Resumen general

Esta estrategia combina el indicador de stop loss de Chande Kroll y el indicador de índice de movimiento direccional promedio (ADX) para implementar una estrategia de seguimiento de tendencia relativamente simple.

Estrategia lógica

La estrategia primero calcula las líneas largas de parada larga y corta de parada corta de la línea de parada de pérdida de Chande Kroll. La línea larga se calcula sobre la base del precio más alto en los últimos períodos p. La línea corta se calcula sobre la base del precio más bajo en los últimos períodos p. El punto más alto de las líneas largas y cortas en los últimos períodos q se utiliza entonces como las líneas largas y cortas de parada de pérdida actuales. Esto filtra las fluctuaciones de precios a corto plazo y solo desencadena la parada de pérdida en los puntos de inversión de tendencia.

Cuando el precio de cierre cruza por encima de la línea corta stop_short, se genera una señal larga.

Además, el indicador ADX se utiliza para juzgar la fuerza de la tendencia. Sólo cuando el ADX es mayor que el umbral, la señal de stop loss desencadena la entrada. Esto filtra la sierra no direccional en la consolidación.

Ventajas

La estrategia combina las ventajas de los indicadores de tendencia y los indicadores de stop loss. Puede capturar oportunamente las reversiones de tendencia mientras evita los golpes en los mercados no direccionales. La optimización de los parámetros de stop loss de Chande Kroll puede suavizar el filtrado y garantizar la stop loss solo en los puntos de reversión de tendencia. El indicador ADX asegura la entrada solo cuando la tendencia es significativa, evitando los golpes de stop loss durante la consolidación del mercado.

Los riesgos

Si el umbral de ADX se establece demasiado alto, las oportunidades de entrada pueden perderse al comienzo de las tendencias cuando los valores de ADX siguen siendo bajos.

Los puntos de stop loss que están demasiado cerca también pueden causar apertura y cierre frecuentes de posiciones de estrategia. Esto aumentará los costos de negociación y deslizamiento.

Optimización

Considere permitir que las señales de stop loss se activen solo cuando el ADX rompe por encima de un umbral. Esto puede mejorar la confiabilidad del tiempo de entrada. Otros indicadores de tendencia también se pueden combinar para condiciones conjuntivas, como combinar los valores del ADX con las pendientes de la EMA.

Las líneas de stop loss también se pueden ajustar dinámicamente en función de ATR, lo que permite paradas más amplias cuando aumenta la volatilidad del mercado para evitar una sensibilidad excesiva.

Resumen de las actividades

La estrategia integra las fortalezas de los indicadores de stop loss y ADX de Chande Kroll para construir una estrategia de tendencia relativamente simple y práctica. A través de la optimización de parámetros, la estabilidad y rentabilidad de la estrategia se pueden mejorar aún más.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

Más.