Estrategia de negociación con media móvil dinámica


Fecha de creación: 2023-12-21 11:33:50 Última modificación: 2023-12-21 11:33:50
Copiar: 1 Número de Visitas: 736
1
Seguir
1623
Seguidores

Estrategia de negociación con media móvil dinámica

Descripción general

La estrategia combina las ventajas de los indicadores de volumen dinámico y las medias móviles para seguir la tendencia a medio plazo de los precios de las acciones y obtener ganancias estables.

El principio

La estrategia se basa principalmente en tres variantes de Hull Moving Averages, que incluyen el promedio Hull Moving Average ((HMA), el promedio Hull Moving Average ((WHMA) y el promedio Hull Moving Average ((EHMA). De acuerdo con el código, la estrategia permite al usuario cambiar entre los tres tipos de Hull MA.

La fórmula para calcular el HMA es:

HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))

Entre ellos, WMA representa una media móvil ponderada y n representa un parámetro de ciclo. HMA responde más rápidamente a los cambios de precio que SMA (medios móviles simples).

La fórmula de cálculo de WHMA y EHMA es similar a la de HMA. La política tiene HMA como opción predeterminada.

Después de calcular el HMA, la estrategia utiliza el valor de la línea media de la HMA como señal de negociación. Cuando el precio cruza la línea media de la HMA, se hace una entrada adicional; cuando el precio cruza la línea media de la HMA, se sale de la posición. De esta manera, utiliza la línea media de la HMA para seguir la tendencia a medio plazo de los precios y obtener ganancias.

Las ventajas

La estrategia tiene las siguientes ventajas en comparación con las estrategias tradicionales de medias móviles:

  1. Respuesta más rápida, mayor capacidad de seguimiento de tendencias, entrada y parada de pérdidas a tiempo
  2. Reducir la frecuencia de las transacciones sin sentido y evitar el seguimiento de la caída
  3. Configuración flexible de los parámetros de Hull MA para adaptarse a un entorno de mercado más amplio
  4. Se puede cambiar entre HMA, WHMA y EHMA para ampliar el alcance de la aplicación

El riesgo

La estrategia también tiene sus riesgos:

  1. Es propenso a generar señales de invalidez múltiples en el ajuste, lo que aumenta la frecuencia de las transacciones y los costos de los puntos de deslizamiento
  2. La configuración incorrecta de los parámetros de Hull MA puede perder el punto de reversión de la tendencia y aumentar el riesgo de pérdidas
  3. La elección de acciones incorrectas, con poca liquidez, puede tener un gran deslizamiento

Respuesta:

  1. Optimización de los parámetros de Hull MA para encontrar el valor óptimo
  2. En combinación con otros indicadores para determinar el punto de inflexión
  3. Elegir acciones con buena liquidez y un volumen de negocios promedio diario

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. Aumentar el volumen de transacciones o filtrar otros indicadores para garantizar la fiabilidad de las señales de transacción
  2. Combinado con otros indicadores como el MACD, KDJ y otros para determinar el momento de entrada, mejora las probabilidades de ganar
  3. Ajuste de los parámetros del ciclo de Hull MA según los datos de retroceso del disco
  4. Cambiar a WHMA o EHMA para probar las variantes de Hull que mejor funcionan en una acción específica
  5. Incrementar las estrategias de control de pérdidas individuales

Resumir

La estrategia de movimiento de medias móviles integra las ventajas de la respuesta rápida de Hull MA, que puede seguir eficazmente la tendencia a mediano plazo de los precios de las acciones, abrir más posiciones en el momento adecuado y detener las salidas de pérdidas, y el historial de retroalimentación tiene un buen rendimiento. Al optimizar aún más la configuración de los parámetros y la selección de la gama de acciones, la estrategia puede obtener ganancias extras más estables.

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

//@version=5
strategy('Position Investing by SirSeff', 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)
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)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2000, '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() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
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)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)