
La estrategia utiliza una combinación de indicadores móviles (DMI) y el Hull Moving Average (HMA) para determinar la dirección del mercado, el HMA confirma la fuerza de la tendencia y permite operaciones sin gestión de riesgo.
Calcula el rango de onda verdadero (TRUE RANGE), el indicador de movimiento de la cabeza (DIPlus), el indicador de movimiento de la cabeza vacía (DIMinus) y el índice de dirección promedio (ADX).
Calcula el promedio de Hull rápido (fasthull) y el promedio de Hull lento (slowhull).
La activación tiene varias condiciones: DIMinus en DIPlus y slowhull en fasthull.
Trigger las condiciones de vacío: DIMinus por DIPlus y fasthull por slowhull.
Si se cumple con la condición de hacer más vacío, se emite una señal de hacer más y una de vacío.
Esta estrategia, combinada con la doble confirmación de los indicadores de determinación de tendencias DMI y Hull, permite identificar la dirección de la tendencia del mercado y evitar la repetición de los mercados de más y de menos. La gestión sin riesgo reduce la frecuencia de las operaciones y los niveles de ganancias generales son buenos en el largo plazo.
El mayor riesgo de esta estrategia reside en la configuración sin pérdidas, la imposibilidad de controlar las pérdidas de manera efectiva en caso de una fuerte fluctuación en el mercado. Además, el espacio para optimizar los parámetros es limitado, y la falta de orientación también es una gran desventaja.
Se puede reducir el riesgo mediante la adición de paradas móviles y combinaciones de parámetros de optimización.
Se añade el stop ATR, que utiliza el stop trailing de amplitud real.
Optimización de los parámetros del ciclo de Hull para encontrar la combinación óptima.
El ajuste dinámico hace más vacío en el umbral de los parámetros.
Se añaden filtros como indicadores de energía, para asegurar que la tendencia continúe.
La combinación de estrategias de DMI y HMA, el juicio es preciso, sencillo y eficaz, adecuado para el funcionamiento de la línea media y larga. Cuando se agrega el stop loss adecuado y la optimización de los parámetros, puede convertirse en un sistema de seguimiento de tendencias muy excelente.
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © Tuned_Official
//@version=4
strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025)
//Inputs
hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29)
hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2)
len = input(title="Length for DI", type=input.integer, defval=76)
//Calculations
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
//Indicators
fasthull = hma(close, hullLen1)
slowhull = hma(close, hullLen2)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
//Plots
plot(DIPlus, color=color.green, title="DI+")
plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
//conditions
go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus
go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus
//Entry
if strategy.position_size < 0 or strategy.position_size == 0
strategy.order("long", strategy.long, when=go_long)
if strategy.position_size > 0 or strategy.position_size == 0
strategy.order("Short", strategy.short, when=go_short)