Esta estrategia es una estrategia de negociación a corto plazo basada en el indicador Hull Moving Average.
Esta estrategia se basa principalmente en el indicador de promedio móvil de Hull. La línea de promedio móvil de Hull consta de dos promedios móviles. Primero calcula la línea media móvil mediana nma del precio, con un período de período de hull. Luego calcula la línea promedio móvil rápida n2ma, con un período de la mitad de los nma
Para filtrar algunas señales falsas, la estrategia también introduce la línea de casco (Hull_Line). La línea de casco es un resultado de regresión lineal de la diferencia entre nma y n2ma. Cuando hay divergencia entre el precio y la línea de casco, la estrategia saltará la señal de negociación.
En concreto, las reglas de la estrategia son las siguientes:
Calcular la nma, con período de casco
Calcular el n2ma, con el período medio del período nma
Calcular la diferencia de diferencia entre n2ma y nma
Moving average the diff with period sqrt ((hullperiod), obtenido y obtener el Hull Line Hull_Line
Cuando el precio cruza por encima de Hull Line, se genera una señal de compra
Cuando el precio cruza por debajo de la línea de casco, se genera una señal de venta
Si hay una divergencia entre el precio y Hull Line, omita la señal
Entrar con un cierto porcentaje de la posición, adoptar salida stop loss
Las ventajas de esta estrategia incluyen:
Basado en el Hull Moving Average, puede capturar rápidamente la tendencia y seguir la tendencia
Utilice Hull Line para filtrar señales falsas y mejorar la calidad de la señal
Una buena relación riesgo-beneficio y una buena utilización, adecuada para operaciones a corto plazo
Ajuste flexible de parámetros, adaptable a los diferentes entornos del mercado
Adoptar la inversión de pérdida de parada, puede detener la pérdida en el tiempo y controlar los riesgos
Combinar la estacionalidad para evitar riesgos sistémicos en períodos de tiempo específicos
Esta estrategia también tiene algunos riesgos:
Tendencia siguiendo la estrategia, no puede operar todo el día
Pérdidas mayores cuando la tendencia se invierte
Retraso de las medias móviles, no puede capturar puntualmente los puntos de inflexión
La alta frecuencia de negociación conduce a mayores costes de negociación
Los ajustes de parámetros inadecuados pueden conducir a una menor rentabilidad en los mercados de rango
Para controlar estos riesgos, podemos tomar las siguientes medidas:
Adoptar una estrategia de stop loss de martingale para controlar pérdidas individuales
Optimizar los parámetros y la robustez de las pruebas en diferentes entornos de mercado
Combinar indicadores de evaluación de tendencias para evitar perseguir tendencias durante las reversiones
Aumentar el tiempo de retención para reducir la frecuencia de negociación
Esta estrategia también puede optimizarse en los siguientes aspectos:
Combinar indicadores de impulso para localizar el punto de partida de las tendencias para una mejor entrada
Añadir modelos de aprendizaje automático para ayudar a juzgar la dirección y la fuerza de la tendencia
Adoptar ajustes de parámetros adaptativos para ajustar los parámetros basados en la dinámica del mercado en tiempo real
Configuración de sistemas de casco de varios plazos, con diferentes tamaños de posición para diferentes plazos
Combinar indicadores de volumen para evitar falsas rupturas con un impulso insuficiente
Añadir un modelo de posicionamiento basado en la volatilidad para ajustar dinámicamente los tamaños de las posiciones basados en la volatilidad
El Hull Moving Average Swing Trading Strategy es una estrategia de seguimiento de tendencias a corto plazo eficiente en general. Utiliza el sistema Hull Moving Average para determinar la dirección de la tendencia con el propósito de seguir la tendencia. En comparación con los sistemas de promedios móviles individuales, tiene una mayor calidad de señal y flexibilidad de parámetros. La ventaja de esta estrategia radica en capturar rápidamente los cambios de tendencia con reducciones relativamente pequeñas. La debilidad es la incapacidad de hacer frente a las reversiones de tendencia. Podemos usar optimización de parámetros, estrategias de stop loss, agregar modelos auxiliares, etc. para controlar los riesgos y hacer que la estrategia sea robusta en más entornos de mercado.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 6h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Hull Moving Average Swing Trader by SEASIDE420 strategy("Hull Moving Average Swing Trader", shorttitle="HMA_Swing_Trader", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0) hullperiod = input(title="HullMA Period", type=input.integer, defval=210, minval=1) price = input(open, type=input.source, title="Price data") FromMonth = input(defval=1, title="From Month", minval=1, maxval=12) FromDay = input(defval=1, title="From Day", minval=1, maxval=31) FromYear = input(defval=2020, title="From Year", minval=2017) ToMonth = input(defval=1, title="To Month", minval=1, maxval=12) ToDay = input(defval=1, title="To Day", minval=1, maxval=31) ToYear = input(defval=9999, title="To Year", minval=2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma = 2 * wma(price, round(hullperiod / 2)) nma = wma(price, hullperiod) diff = n2ma - nma sqn = round(sqrt(hullperiod)) n2ma1 = 2 * wma(price[1], round(hullperiod / 2)) nma1 = wma(price[1], hullperiod) diff1 = n2ma1 - nma1 n1 = wma(diff, sqn) n2 = wma(diff1, sqn) Hull_Line = n1 / n1 * n2 Hull_retracted = if n1 > n2 Hull_retracted = Hull_Line - 2 else Hull_retracted = Hull_Line + 2 c1 = Hull_retracted + n1 - price c2 = Hull_retracted - n2 + price c4 = n1 > n2 ? color.green : color.red c2p = plot(c2, color=color.black, linewidth=1) c3p = plot(price, color=color.black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) //plot(cross(c1, c2) ? c1 : na, style=plot.style_circles, color=c4, linewidth=4) if price < c2 strategy.close("BUY", when=window()) if price > c2 strategy.close("SELL", when=window()) if price > c2 and price[1] > c1 strategy.entry("BUY", strategy.long, when=window()) if price < c1 and price[1] < c2 strategy.entry("SELL", strategy.short, when=window()) // /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D