Estrategia de negociación de media móvil Hall bidireccional


Fecha de creación: 2023-12-11 11:30:15 Última modificación: 2023-12-11 11:30:15
Copiar: 0 Número de Visitas: 826
1
Seguir
1621
Seguidores

Estrategia de negociación de media móvil Hall bidireccional

Descripción general

La estrategia de negociación de promedios móviles de Hall bidireccionales es una estrategia de negociación cuantitativa que utiliza promedios móviles de Hall bidireccionales como señal de negociación. La estrategia toma como ejemplo el uso de un solo promedio móvil en el análisis técnico tradicional, y utiliza promedios móviles de Hall bidireccionales para comprar y vender en los puntos de ruptura.

Principio de estrategia

El núcleo de la estrategia de negociación de promedios móviles de doble casco es el promedio móvil de doble casco. El promedio móvil de doble casco consta de tres líneas en el medio, arriba y abajo, que representan diferentes promedios de precios. Su fórmula de cálculo es:

La banda de la mitad:Mode{modeSwitch, src, len) En la pista: HULL[0] Baja línea: HULL[2]

La función Mode permite elegir entre diferentes variantes de la media móvil de Hull, incluyendo HMA, EHMA y THMA. La src representa la fuente de precios y la len representa la longitud del ciclo.

La estrategia toma como referencia el trazo medio de las medias móviles de Hall bidireccionales para determinar la relación entre el precio y el trazo medio y establecer la señal de negociación:

  • Hacer más cuando los precios están en la vía media
  • Cuando el precio baja a la brecha media, se mantiene a la par.

Es decir, si el precio de cierre de la línea K actual es mayor que el valor de la órbita media, se hace más cuando se abre la siguiente línea K; si el precio de cierre de la línea K actual es menor que el valor de la órbita media, se cierra la posición cuando se abre la siguiente línea K.

Análisis de las ventajas

La estrategia de comercio de promedios móviles bidireccionales de Hall tiene las siguientes ventajas:

  1. El uso de zonas de bandas bidireccionales en lugar de una única línea media, tiene un mejor efecto de soporte y resistencia, y es más conveniente para seguir la tendencia.

  2. En comparación con las medias móviles generales, las medias móviles de Hull tienen una menor latencia y pueden responder más rápidamente a los cambios en los precios.

  3. Aprovechando métodos de análisis tecnológicos tradicionales, es fácil de entender y adecuado para la automatización de las transacciones.

  4. La lógica de la estrategia es simple, clara y fácil de implementar, adecuada para el comercio de algoritmos de alta frecuencia.

  5. Los tipos y parámetros de promedio móvil de Hull se pueden personalizar y optimizar para diferentes variedades y marcos de tiempo de negociación.

Análisis de riesgos

A pesar de las muchas ventajas de la estrategia de comercio de promedios móviles bidireccionales de Hall, también hay algunos riesgos a tener en cuenta:

  1. Cuando los precios oscilan, es posible que se produzcan más paros. Se pueden ajustar los parámetros adecuadamente para filtrar parte del ruido de las transacciones.

  2. La estrategia se basa principalmente en el seguimiento de la tendencia y no es muy eficaz cuando los precios se mueven horizontalmente. Se pueden agregar otros indicadores o mecanismos para juzgar la tendencia.

  3. El promedio móvil de Hull en sí mismo también tiene un retraso, especialmente en el corto plazo. La optimización de parámetros y la combinación de indicadores pueden resolver en parte.

  4. Las señales de negociación son frecuentes y son susceptibles de sobre-negociación. El control adecuado de la gestión de posiciones y la frecuencia de negociación.

Dirección de optimización

Las siguientes son algunas de las principales direcciones de optimización de la estrategia de comercio de promedios móviles bidireccionales:

  1. Optimizar el tipo y los parámetros de las medias móviles de Hull, y ajustar la sensibilidad de la vía media para adaptarse a las diferentes variedades de operaciones.

  2. La inclusión de un mecanismo de stop loss. Trailing stop o stop incremental, para controlar eficazmente las pérdidas individuales.

  3. En combinación con otros indicadores para determinar la dirección y la intensidad de la tendencia, evitar ser encajonado. Por ejemplo, MACD, KD, etc.

  4. Agregar condiciones de activación de estrategias basadas en el número de operaciones o en la rentabilidad. Controlar el número de cierres de ciclo y reducir la posición llena.

  5. Combinación de múltiples marcos de tiempo. Utiliza marcos de tiempo más altos para determinar la dirección de la tendencia y evitar ser engañado por el ruido.

  6. Optimización de la lógica de salida. Puede basarse en la forma de la vela para aumentar la certeza de entrada.

Resumir

La estrategia de comercio de media móvil bidireccional de Hall es, en general, una estrategia cuantitativa que utiliza una media móvil de tipo índice de tendencia para construir señales de comercio. En comparación con las medias móviles tradicionales, la estrategia responde más rápidamente y tiene un mejor seguimiento. La lógica de la estrategia es simple, clara y fácil de implementar, adecuada para el comercio automatizado.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
//Converted to Strategy by DashTrader
strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close)
src = input(close, title="Source")
modeSwitch = input("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(40, title="Band Transparency",step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - 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)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry("long", strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.close("long")