Estrategia de divergencia de dirección de impulso

El autor:¿ Qué pasa?, Fecha: 2023-12-27 15:37:31
Las etiquetas:

img

Resumen general

La estrategia de divergencia de dirección de momento es una de las técnicas descritas por William Blau en su libro Momentum, Direction and Divergence. La estrategia se centra en tres aspectos clave: momento, dirección y divergencia. Blau, que era ingeniero eléctrico antes de convertirse en comerciante, examina a fondo la relación entre precio e impulso.

La estrategia traza Ergotic CSI y su línea suavizada para filtrar el ruido.

Estrategia lógica

El código comienza definiendo una función fADX, que toma el parámetro Len como el período de suavizado. La función calcula el RMA del True Range (TR) como denominador, y el RMA del momento ascendente y el momento descendente como numerador, luego los divide para obtener relaciones que indican la fuerza relativa de la parte ascendente y descendente. Finalmente, ADX se obtiene combinando la fuerza ascendente y la fuerza descendente.

Luego se definen los parámetros de estrategia. r es el parámetro de suavización para ATR, longitud es la longitud de ADX, BigPointValue es el valor de punto grande, SmthLen es la longitud de suavización para CSI, SellZone y BuyZone son zonas de venta y compra que cumplen con los criterios. inversa indica si invertir las señales comerciales.

La lógica clave está en el cálculo de CSI. Primero se calculan ATR y ADX. Luego se calcula el coeficiente de penalización K, incorporando consideraciones de valor de punto grande, ATR y ADX. La nRes residual estandarizada combina información de ATR, ADX y precio de cierre. Finalmente se obtiene el valor de CSI y se calcula su SMA.

La dirección de negociación se determina de acuerdo con el valor SMA de CSI. Ir largo si está por encima de BuyZone, ir corto si está por debajo de SellZone. Trazar la curva CSI y su SMA, código de color de diferentes zonas comerciales.

Análisis de ventajas

La estrategia combina las ventajas del indicador de impulso ATR y el indicador de tendencia ADX, teniendo en cuenta tanto la volatilidad del mercado como la fuerza de la tendencia, evitando las limitaciones de usar solo ATR o ADX.

El nRes residual estandarizado incorpora información de precios, prestando atención no solo a la tendencia de impulso sino también al nivel absoluto de precios, que es diferente de los osciladores típicos, mejorando el rendimiento de la estrategia.

El proceso de suavización y la determinación de zonas proporcionan señales comerciales claras para el comercio práctico.

Análisis de riesgos

La estrategia es bastante sensible a la configuración de parámetros como los períodos de ATR y ADX, el gran valor de punto, etc., que pueden afectar el rendimiento.

Como oscilador recién propuesto, la eficacia del CSI necesita validación en mercados más diversos.

La estrategia en sí misma no tiene un mecanismo de stop loss, sólo directamente largo o corto por señales CSI.

Direcciones de optimización

Prueba combinaciones de parámetros en diferentes mercados para encontrar ajustes relativamente universales.

Introducir un mecanismo dinámico de periodos ADX que ajuste los parámetros ADX en función del estado del mercado.

Incorporar otros indicadores de oscilador para determinar entradas y salidas para hacer la estrategia más robusta.

Añadir mecanismos de stop loss para completar la estrategia.

Resumen de las actividades

La Estrategia de Divergencia de Dirección de Momento integra las ventajas de múltiples indicadores, utilizando las dimensiones de precio, impulso y tendencia para diseñar el indicador CSI para el comercio.


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

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2018
// This is one of the techniques described by William Blau in his book 
// "Momentum, Direction and Divergence" (1995). If you like to learn more, 
// we advise you to read this book. His book focuses on three key aspects 
// of trading: momentum, direction and divergence. Blau, who was an electrical 
// engineer before becoming a trader, thoroughly examines the relationship between 
// price and momentum in step-by-step examples. From this grounding, he then looks 
// at the deficiencies in other oscillators and introduces some innovative techniques, 
// including a fresh twist on Stochastics. On directional issues, he analyzes the 
// intricacies of ADX and offers a unique approach to help define trending and 
// non-trending periods.
// This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise. 
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

strategy(title="Ergodic CSI Backtest")
r = input(32, minval=1)
Length = input(1, minval=1)
BigPointValue = input(1.0, minval=0.00001)
SmthLen = input(5, minval=1)
SellZone = input(0.004, minval=0.00001)
BuyZone = input(0.024, minval=0.001)
reverse = input(false, title="Trade reverse")
hline(BuyZone, color=green, linestyle=line)
hline(SellZone, color=red, linestyle=line)
source = close
K = 100 * (BigPointValue / sqrt(r) / (150 + 5))
xTrueRange = atr(1) 
xADX = fADX(Length)
xADXR = (xADX + xADX[1]) * 0.5
nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0)
xCSI = iff(close > 0,  nRes / close, 0)
xSMA_CSI = sma(xCSI, SmthLen)
pos = iff(xSMA_CSI > BuyZone, 1,
       iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xCSI, color=green, title="Ergodic CSI")
plot(xSMA_CSI, color=red, title="SigLin")

Más.