La estrategia es una estrategia de comercio de líneas cortas basada en el indicador de promedios móviles de Hull. La estrategia utiliza el promedio móvil de Hull para formar señales de compra y venta, y pertenece a la estrategia de seguimiento de tendencias.
La estrategia se basa principalmente en el indicador de promedios móviles de Hull, que consiste en dos promedios móviles. Primero se calcula el promedio móvil intermedio de los precios, nma, con un período de hullperiod. Luego se calcula el promedio móvil rápido de los precios, n2ma, con un período de nma.
Para filtrar algunas señales falsas, la estrategia también introdujo la línea de Hull (Hull_Line). La línea de Hull es el resultado de una regresión lineal calculada entre nma y n2ma. La estrategia salta la señal de compra y venta cuando el precio se desvía de la línea de Hull.
En concreto, las reglas de la estrategia son las siguientes:
Calcula el nma, el período de hullperiod
Calcula n2ma, el ciclo es la mitad del ciclo nma
Calcular la diferencia entre n2ma y nma
El promedio móvil de la diferencia en el período de tiempo es sqrt{\displaystyle \sqrt{\mathrm {hull } }{\displaystyle \sqrt{hull }{\mathrm {hull }{\mathrm {hull }{\mathrm {hull } }{\mathrm {hull }{\mathrm {Hull } } }{\mathrm {Hull }{Line } } }
Se emite una señal de compra cuando el precio cruza la línea de Hull
Se emite una señal de venta cuando el precio se rompe la línea de Hull
Si el precio se desvía de la línea de Hull, salte la señal
Entrar en una posición de cierta proporción y cerrar la pérdida de salida
La estrategia tiene las siguientes ventajas:
Basado en el promedio móvil de Hull, es capaz de capturar rápidamente las tendencias, y las fluctuaciones son las principales.
El uso de cables de casco para filtrar falsas señales y mejorar la calidad de la señal
El retiro y la pérdida son buenos para operaciones de línea corta.
Ajuste de parámetros con flexibilidad para adaptarse a diferentes entornos de mercado
El uso de reversión de pérdidas, que puede detener el riesgo a tiempo
Riesgo sistemático combinado con estacionalidad que se puede evitar en un período de tiempo específico
La estrategia también tiene sus riesgos:
Las estrategias de seguimiento de tendencias no permiten el comercio todo el día.
Cuando la tendencia se invierte, se generan mayores pérdidas
Los promedios móviles están atrasados y no pueden capturar los puntos de inflexión a tiempo.
Las transacciones en línea corta son frecuentes y costosas.
Los parámetros mal configurados pueden causar una caída en las ganancias de los mercados en crisis
Los riesgos mencionados pueden ser controlados con las siguientes medidas:
La estrategia de detención de pérdidas de Martingale para controlar las pérdidas individuales
Optimización de parámetros, prueba de la robustez de los parámetros en diferentes entornos de mercado
Indicadores de tendencia para evitar caídas en la reversión
Aumentar el tiempo de tenencia y reducir la frecuencia de las transacciones
La estrategia también puede ser optimizada en los siguientes aspectos:
Combinación de indicadores de dinámica para determinar el punto de inicio de la tendencia y una mejor entrada de la disposición
Aumentar los modelos de aprendizaje automático para ayudar a determinar la dirección y la intensidad de las tendencias
Utiliza configuración de parámetros adaptativos y ajusta los parámetros en función del mercado en tiempo real
Configuración de un sistema de casco de varios períodos de tiempo, con diferentes posiciones para diferentes períodos
Combinado con el indicador de energía del volumen de transacciones, evita falsos avances de energía insuficiente
Agrega un módulo de gestión de posiciones basado en la volatilidad para ajustar dinámicamente las posiciones en función de la volatilidad
La estrategia Hull Moving Average Oscillatory Trading Strategy en general es una estrategia de seguimiento de líneas cortas muy práctica. Utiliza el sistema Hull Moving Average para determinar la dirección de la tendencia y alcanzar el avance. En comparación con el sistema de promedios móviles individuales, tiene una mayor calidad de señal y flexibilidad de parámetros.
/*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