Una estrategia comercial basada en el cruce de medias móviles


Fecha de creación: 2024-01-24 14:59:44 Última modificación: 2024-01-24 14:59:44
Copiar: 0 Número de Visitas: 528
1
Seguir
1617
Seguidores

Una estrategia comercial basada en el cruce de medias móviles

Descripción general

La estrategia de comercio de cruce de medias móviles es una estrategia de comercio cuantitativa más común. La estrategia se genera mediante el cálculo de medias móviles de diferentes períodos y la generación de señales de comercio en función de su cruce. En concreto, se calcula una media móvil de 4 ciclos, 8 ciclos y 20 ciclos.

Principio de estrategia

La lógica central de esta estrategia es la siguiente:

  1. Calcule las líneas EMA de 4 ciclos, 8 ciclos y 20 ciclos.
  2. Para determinar la relación entre la línea EMA de 4 y la línea EMA de 8 ciclos:
    1. Cuando la línea de 4 períodos de EMA cruza la línea de 8 períodos de EMA, indica que el movimiento de los precios se fortalece y pertenece a la señal de múltiples cabezas.
    2. Cuando el EMA de 4 ciclos rompe el EMA de 8 ciclos, indica que el movimiento de los precios se ha debilitado y pertenece a la señal de cabeza hueca.
  3. Al mismo tiempo, juzgue la dirección de la línea EMA de 20 ciclos:
    1. Si la línea de EMA de 20 ciclos sube, entonces Enter Long.
    2. Si la línea de la EMA de 20 ciclos baja, entonces Enter Short.
  4. Cuando la relación entre la línea EMA de 4 y la línea EMA de 8 ciclos se invierte, Prepare Exit。
  5. Cuando la dirección de la línea de la EMA de 20 ciclos se invierte, Exit Now。

Mediante este método, utilizamos el cruce entre las diferentes líneas medias periódicas para juzgar las señales del mercado, y al mismo tiempo utilizamos la dirección de las líneas medias periódicas más largas para filtrar las señales erróneas y construir una estrategia de negociación estable.

Ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. La lógica de la estrategia es simple, clara, fácil de entender y de implementar.
  2. El uso de filtros de doble condición reduce las señales falsas.
  3. El aumento de la EMA de 20 períodos permite identificar las grandes tendencias y aumentar la estabilidad.
  4. Los parámetros se pueden personalizar para ajustar la frecuencia de las transacciones.
  5. Fácil combinación con otros indicadores o modelos para construir estrategias de combinación.

Riesgo estratégico

La estrategia también tiene sus riesgos:

  1. La estrategia de doble línea media es propensa a generar falsas señales.
  2. Los ciclos fijos no pueden adaptarse a los cambios del mercado.
  3. La mayoría de las compañías de seguros están en crisis, y la mayoría de las compañías de seguros están en crisis.

Las principales soluciones son:

  1. Reducir adecuadamente el período de tenencia de posiciones y detener los pérdidas a tiempo.
  2. Parámetros de optimización dinámica para ajustar el ciclo de la línea media.
  3. Creación de estrategias combinadas con otros indicadores o modelos.

Optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización del ciclo: determinación de la combinación óptima de ciclo de MA según las diferentes variedades Optimización de stop loss: establece un punto de parada razonable y controla las pérdidas individuales

    1. Optimización de parámetros: optimización dinámica de parámetros mediante algoritmos genéticos, cadenas de Markov y otros métodos
  2. Fusión de modelos: integración con modelos de aprendizaje profundo como LSTM, RNN y otros para extraer más Alpha

Optimización de la combinación: combinación de estrategias con otros indicadores para construir una combinación de estrategias

Resumir

La estrategia de cruce de medias móviles es una estrategia de comercio cuantitativa más clásica y comúnmente utilizada. La lógica de la estrategia es simple, fácil de entender y implementar, y tiene cierta estabilidad. Pero también hay algunos problemas, como la generación de falsas señales, la incapacidad de adaptarse a los cambios en el mercado, etc. Estos problemas pueden mejorarse mediante métodos como optimización de parámetros, optimización de stop loss y fusión de modelos. En general, la estrategia de medias móviles puede servir como un módulo básico en la caja de herramientas de la estrategia, combinada con otras estrategias más complejas, para construir una estrategia compleja y estable.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub",   overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)


testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() => true

ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)

go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]

go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]

 
if testPeriod()
    strategy.entry("simpleBuy", strategy.long, when=go_long)
    strategy.exit("simpleBuy", "simpleSell",when=exit_long)
    
    strategy.entry("simpleSell", strategy.short,when=go_short)
    strategy.exit("simpleSell", "simpleSell",when=exit_short)