Estrategia de negociación de media móvil de oscilación del casco

El autor:¿ Qué pasa?, Fecha: 2023-10-07 15:24:31
Las etiquetas:

Resumen general

Esta estrategia es una estrategia de negociación a corto plazo basada en el indicador Hull Moving Average.

Estrategia lógica

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 nmas. Cuando n2ma cruza por encima de nma, se genera una señal de compra. Cuando n2ma cruza por debajo de nma, se genera una señal de venta.

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:

  1. Calcular la nma, con período de casco

  2. Calcular el n2ma, con el período medio del período nma

  3. Calcular la diferencia de diferencia entre n2ma y nma

  4. Moving average the diff with period sqrt ((hullperiod), obtenido y obtener el Hull Line Hull_Line

  5. Cuando el precio cruza por encima de Hull Line, se genera una señal de compra

  6. Cuando el precio cruza por debajo de la línea de casco, se genera una señal de venta

  7. Si hay una divergencia entre el precio y Hull Line, omita la señal

  8. Entrar con un cierto porcentaje de la posición, adoptar salida stop loss

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Basado en el Hull Moving Average, puede capturar rápidamente la tendencia y seguir la tendencia

  2. Utilice Hull Line para filtrar señales falsas y mejorar la calidad de la señal

  3. Una buena relación riesgo-beneficio y una buena utilización, adecuada para operaciones a corto plazo

  4. Ajuste flexible de parámetros, adaptable a los diferentes entornos del mercado

  5. Adoptar la inversión de pérdida de parada, puede detener la pérdida en el tiempo y controlar los riesgos

  6. Combinar la estacionalidad para evitar riesgos sistémicos en períodos de tiempo específicos

Análisis de riesgos

Esta estrategia también tiene algunos riesgos:

  1. Tendencia siguiendo la estrategia, no puede operar todo el día

  2. Pérdidas mayores cuando la tendencia se invierte

  3. Retraso de las medias móviles, no puede capturar puntualmente los puntos de inflexión

  4. La alta frecuencia de negociación conduce a mayores costes de negociación

  5. 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:

  1. Adoptar una estrategia de stop loss de martingale para controlar pérdidas individuales

  2. Optimizar los parámetros y la robustez de las pruebas en diferentes entornos de mercado

  3. Combinar indicadores de evaluación de tendencias para evitar perseguir tendencias durante las reversiones

  4. Aumentar el tiempo de retención para reducir la frecuencia de negociación

Direcciones de optimización

Esta estrategia también puede optimizarse en los siguientes aspectos:

  1. Combinar indicadores de impulso para localizar el punto de partida de las tendencias para una mejor entrada

  2. Añadir modelos de aprendizaje automático para ayudar a juzgar la dirección y la fuerza de la tendencia

  3. Adoptar ajustes de parámetros adaptativos para ajustar los parámetros basados en la dinámica del mercado en tiempo real

  4. Configuración de sistemas de casco de varios plazos, con diferentes tamaños de posición para diferentes plazos

  5. Combinar indicadores de volumen para evitar falsas rupturas con un impulso insuficiente

  6. Añadir un modelo de posicionamiento basado en la volatilidad para ajustar dinámicamente los tamaños de las posiciones basados en la volatilidad

Resumen de las actividades

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


Más.