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: el momento, la dirección y la divergencia. El Sr. Blau, un ingeniero eléctrico que luego se convirtió en un comerciante, estudió en profundidad la relación entre el precio y el momento.
La estrategia traza el índice de dispersión de la dirección del motor (CSI ergotic) y su línea de suavizado para filtrar el ruido.
El principio del código define una función fADX, que se adapta al índice de dirección de movimiento (((ADX), que acepta el parámetro Len para representar el ciclo de suavización. La función calcula el rango real (((TR)) del promedio móvil electivo (((RMA) como divisor, calcula la cantidad de movimiento de los polinomios y la cantidad de movimiento de los polinomios como moléculas, luego divide la proporción obtenida para representar la intensidad relativa de los polinomios y los polinomios. Finalmente, se obtiene el valor de ADX mediante una fórmula que combina la intensidad de los polinomios y la intensidad de los polinomios.
Luego viene la definición de los parámetros de la estrategia. r representa el parámetro de suavización de ATR, Length representa la longitud de ADX, BigPointValue representa el valor de punto grande, SmthLen representa la longitud de la suavización de CSI, SellZone y BuyZone representan las zonas de venta y compra elegibles.
La lógica clave en el cálculo de la CSI. En primer lugar, se calcula la amplitud de fluctuación real ATR y ADX. Luego se calcula el coeficiente de penalización K, que contiene el valor del punto mayor, ATR y ADX. Se calcula el saldo estandarizado nRes, que combina información de ATR, ADX y el precio de cierre.
Determina la dirección de la operación en función de los valores de SMA de CSI. Si está por encima de la zona de compra, hace más, y si está por debajo de la zona de venta, hace menos. Dibuja la curva CSI y su SMA, y marca con colores los diferentes rangos de operación.
Esta estrategia combina las ventajas del indicador de dinámica ATR y el indicador de tendencia ADX, teniendo en cuenta tanto la volatilidad del mercado como el grado de tendencia, evitando las limitaciones de usar solo ATR y solo ADX. El diseño del factor de penalización K combina hábilmente estos indicadores con la relación entre los valores de los puntos grandes.
El residuo estandarizado nRes se suma al uso de información sobre el precio, que no solo se centra en la tendencia dinámica, sino también en el nivel absoluto de los precios, lo que, a diferencia del oscilador general, mejora el rendimiento de la estrategia.
El procesamiento suave y el juicio por segmentos proporcionan una señal de negociación clara para la toma de decisiones estratégicas, lo que favorece la operación en el mercado real.
La estrategia es sensible a la configuración de parámetros, como la longitud de los períodos de ATR y ADX, la configuración de los valores de los puntos grandes, los parámetros de suavización de CSI, etc. La estrategia afecta el rendimiento. Se necesita determinar la combinación de parámetros adecuada a través de una gran cantidad de retroalimentación.
El CSI es un nuevo oscilador propuesto cuya eficacia necesita ser validada en más mercados diferentes. Si el indicador no funciona bien, puede afectar la rentabilidad de la estrategia.
La estrategia en sí misma no tiene un mecanismo de stop loss, sino que se realiza directamente con más tomas de posición en función de la señal CSI, existe un cierto grado de riesgo, que se debe utilizar en combinación con el stop loss.
Se puede probar una combinación de parámetros en diferentes mercados para encontrar una combinación más general.
Se puede introducir un mecanismo de duración dinámica del ciclo ADX, que ajusta los parámetros del ADX según la situación del mercado.
Se puede combinar con otros indicadores de osciladores para decidir el momento de comprar y vender, lo que hace que la estrategia sea más sólida.
Se puede agregar una estrategia de stop loss para mejorar la estrategia general.
La estrategia de dispersión dinámica integra las ventajas de varios indicadores para diseñar indicadores CSI y realizar operaciones en varias dimensiones de precios, dinámica y tendencias. La configuración de los parámetros de la estrategia es flexible y de alto rendimiento, vale la pena probar y optimizar aún más y puede ser una herramienta ventajosa para la negociación cuantitativa.
/*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")