
Este artículo presenta una estrategia de comercio cuantitativo optimizado basada en el Hull Moving Average (HMA), que combina análisis de múltiples períodos y un mecanismo de stop loss dinámico. Esta estrategia se basa en la famosa Hull Suite y se ha mejorado con la adición de la orden “strategy.exit (()) ” de PineScript v5 para implementar un stop trailing o un stop trailing retardado. La estrategia utiliza principalmente las características de respuesta rápida de HMA para capturar tendencias de mercado, al tiempo que mejora la fiabilidad de la señal mediante el análisis de varios períodos de tiempo. El stop loss dinámico ayuda a proteger los beneficios y controlar el riesgo.
Hull Moving Averages (HMA): El núcleo de la estrategia es el uso de HMA y sus variantes (EHMA y THMA) para identificar las tendencias del mercado. HMA tiene una velocidad de reacción más rápida y menos retraso en comparación con las medias móviles tradicionales.
Análisis multi-periódico: estrategia para generar señales de negociación comparando HMA de diferentes períodos de tiempo. Este método puede reducir las señales falsas y mejorar la precisión de la negociación.
Detención dinámica: la estrategia utiliza el mecanismo de trailing stop, que se activa cuando el beneficio alcanza un cierto número de puntos, para bloquear efectivamente los beneficios y controlar el riesgo.
Control de la hora de negociación: la estrategia permite al usuario definir una hora de negociación específica, lo que ayuda a evitar la negociación en momentos de baja volatilidad o falta de liquidez.
Control de la dirección: la estrategia ofrece la opción de elegir la dirección de la operación (a largo, corto o bidireccional), lo que le permite adaptarse a diferentes entornos de mercado y estilos de negociación.
Flexibilidad: La estrategia permite a los usuarios elegir diferentes variantes de Hull Moving Averages (HMA, EHMA, THMA) para adaptarse a las diferentes condiciones del mercado.
La gestión de riesgos es excelente: la estrategia permite limitar las pérdidas potenciales al mismo tiempo que protege las ganancias mediante el uso de mecanismos de parada dinámica.
Adaptabilidad: El método de análisis de múltiples ciclos permite a las estrategias adaptarse a diferentes entornos de mercado y reducir el impacto de las falsas señales.
Buena visualización: la estrategia ofrece varias opciones de visualización, como un gráfico de bandas HMA codificado en color, que ayuda a los operadores a comprender las tendencias del mercado de manera más intuitiva.
Alto grado de automatización: las estrategias pueden ejecutarse de forma totalmente automatizada, reduciendo la posibilidad de influencias emocionales artificiales y errores operativos.
El exceso de operaciones: debido a que la estrategia se basa en una HMA de reacción rápida, puede generar demasiadas señales falsas en el mercado horizontal, lo que lleva al exceso de operaciones.
Riesgo de deslizamiento: La estrategia utiliza la técnica de scalping, que puede enfrentar un mayor riesgo de deslizamiento, especialmente en mercados con poca liquidez.
Sensibilidad de parámetros: el rendimiento de la estrategia depende en gran medida de la configuración de los parámetros, y los parámetros incorrectos pueden causar un mal rendimiento de la estrategia.
Cambios en las condiciones del mercado: En caso de cambios drásticos en las condiciones del mercado, la estrategia puede necesitar volver a optimizar los parámetros para mantener su eficacia.
Dependencia tecnológica: la ejecución de la estrategia depende de una conexión de red estable y una plataforma de negociación, y las fallas tecnológicas pueden causar grandes pérdidas.
Aumentar los indicadores de sentimiento del mercado: La combinación de indicadores de sentimiento del mercado, como VIX y el índice de volatilidad implícita de las opciones, puede ayudar a las estrategias a adaptarse mejor a los diferentes entornos del mercado.
Introducción de algoritmos de aprendizaje automático: el uso de técnicas de aprendizaje automático para ajustar dinámicamente los parámetros de HMA y los niveles de stop loss puede mejorar la adaptabilidad de las estrategias.
Aumentar el análisis de volumen de transacciones: La combinación de datos de volumen de transacciones puede mejorar la precisión de la evaluación de tendencias y reducir las pérdidas causadas por brechas falsas.
Optimización de la selección del marco de tiempo: encontrar la configuración óptima para el análisis de múltiples períodos de tiempo mediante el retroceso de diferentes combinaciones de marcos de tiempo.
Introducción del método de nivelación de riesgo: el uso de la nivelación de riesgo para distribuir fondos en transacciones de varias variedades permite un mejor control del riesgo de la cartera en general.
La estrategia de comercio cuantitativo multicíclico optimizada por HMA combinada con el stop loss dinámico es un sistema de comercio flexible y eficiente. Proporciona a los comerciantes una solución de comercio cuantitativo integral mediante la combinación de las características de respuesta rápida del promedio móvil de Hull, la estabilidad del análisis multicíclico y el control del riesgo de stop loss dinámico.
/*backtest
start: 2023-07-25 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © anotherDAPTrader
//Based upon Hull Suite by InSilico and others//
//with SCALP exit//
//@version=5
strategy('DAP Hull Sweet Scalp v1 Strategy', overlay=true)
// Session //
session = input(title='Session (Goes flat at end of session!)', defval='1800-1700')
//Check if it's in session//
is_session(session) =>
not na(time(timeframe.period, session))
//Call the function
Session = is_session(session)
//Start and end of the session
start = Session and not Session[1]
end = not Session and Session[1]
//Plot the background color to see the session
bgcolor(Session ? color.new(color.white, 0) : na)
// trade directions //
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
src = close
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length(180-200 for floating S/R , 55 for swing entry)')
switchColor = input(true, 'Color Hull according to trend?')
candleCol = input(false, title='Color candles based on Hull\'s Trend?')
visualSwitch = input(true, title='Show as a Band?')
thicknesSwitch = input(1, title='Line Thickness')
transpSwitch = input.int(40, title='Band Transparency', step=5)
//FUNCTIONS
//HMA
HMA(_src, _length) =>
ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA
EHMA(_src, _length) =>
ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA
THMA(_src, _length) =>
ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)
//SWITCH
Mode(modeSwitch, src, len) =>
modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na
//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]
//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800
//PLOT
///< Frame
Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color=candleCol ? switchColor ? hullColor : na : na)
// Scalp //
slPoints = input.int(title='Profit Points Before Stop', minval=0, maxval=1000, step=1, defval=1, confirm=false)
slOffset = input.int(title='Then Trailing Stop Loss of ', minval=1, maxval=1000, step=1, defval=1, confirm=false)
//trades//
// Long Entry Function//
if Session and ta.crossover(HULL[0] , HULL[2])
strategy.entry('long', strategy.long)
strategy.exit('trailing stop', from_entry='long', trail_points=slPoints, trail_offset=slOffset)
// Short Entry Function//
if Session and ta.crossunder(HULL[0] , HULL[2])
strategy.entry('short', strategy.short)
strategy.exit('trailing stop', from_entry='short', trail_points=slPoints, trail_offset=slOffset)
if end
strategy.close_all("End of Session - Go FLat")