Estrategia de trading cuantitativo basada en media móvil simple


Fecha de creación: 2023-12-22 13:28:01 Última modificación: 2023-12-22 13:28:01
Copiar: 0 Número de Visitas: 768
1
Seguir
1623
Seguidores

Estrategia de trading cuantitativo basada en media móvil simple

Descripción general

La estrategia de cruce de promedio móvil es una estrategia de negociación cuantitativa basada en promedios móviles simples. La estrategia genera señales de compra y venta al cruzar promedios móviles simples de diferentes períodos.

Concretamente, la estrategia calcula el promedio móvil simple de la línea de 9 y la línea de 45 días. Cuando el precio cruza la línea de 9 y la línea de 45 días, produce una señal de compra; cuando el precio cruza la línea de 9 y la línea de 45 días, produce una señal de venta.

Principio de estrategia

La lógica central de esta estrategia se basa en el principio de la horquilla de plata y la horquilla muerta de las medias móviles. Las medias móviles pueden filtrar eficazmente el ruido del mercado, indicando cambios en la tendencia general. Cuando una media corta atraviesa la media larga, indica que los precios comienzan a entrar en una tendencia alcista; cuando una media corta atraviesa la media larga, indica que los precios comienzan a entrar en una tendencia bajista.

En concreto, la estrategia utiliza un promedio móvil simple de 9 y 45 días. La línea 9 representa una tendencia a corto plazo y la línea 45 representa una tendencia a largo plazo. Cuando el precio cruza la línea 9 y 45 días, indica que el precio de la acción está en un canal ascendente en el corto y largo plazo, por lo que genera una señal de compra; cuando el precio cruza la línea 9 y 45 días, indica que el aumento del precio de la acción se debilita gradualmente, por lo que genera una señal de venta.

Desde el punto de vista de la lógica del código, la estrategia primero calcula el promedio móvil simple de la línea de 9 días y la línea de 45 días, y luego determina los forks dorados y muertos de la línea de igualdad a través de las funciones ta.crossover y ta.crossunder. Al generar señales de compra y venta, se usa la función plotshape para trazar un gráfico de señal de triángulos y triángulos invertidos en un gráfico de línea K.

Además, la estrategia también establece la lógica de stop loss para las posiciones largas y cortas. En concreto, después de abrir una posición, se extrae el precio más alto y el precio más bajo de la línea K anterior como precio de stop loss. Esto puede bloquear las ganancias y evitar grandes pérdidas.

Análisis de las ventajas

  • El uso de la configuración de doble línea media permite capturar los cambios en las tendencias a medio y largo plazo, evitar el ruido del mercado a corto plazo y mejorar la calidad de la señal.
  • La combinación de una estrategia de stop loss puede controlar el riesgo de manera efectiva y bloquear los beneficios.
  • La lógica de la estrategia es simple, fácil de entender y fácil de implementar.
  • La tasa de utilización de los fondos es alta y se puede obtener una plena rentabilidad.

Análisis de riesgos

  • Las estrategias de doble línea son propensas a generar señales de empuje de horquilla muerta, lo que puede causar demasiadas transacciones no válidas.
  • La fijación de los precios de stop loss puede ser demasiado conservadora para seguir la tendencia.
  • La elección incorrecta de los parámetros puede causar una frecuencia de transacción demasiado alta o demasiado baja.
  • No se puede adaptar a un cambio de tendencias tan grande.

Respuesta:

  1. Optimización de los parámetros de la línea media para reducir la ineficacia de las transacciones
  2. Optimización de la lógica de stop loss, con el uso de stop loss de seguimiento de tendencias
  3. Combinación con otros indicadores para filtrar señales
  4. Intervenciones humanas para evitar el cambio de tendencia

Dirección de optimización

La estrategia tiene espacio para ser optimizada aún más:

  1. El uso de medias móviles adaptativas o medias móviles de índices puede capturar mejor los cambios de tendencia.

  2. Aumentar las señales de filtración, como los indicadores de fluctuación, para evitar señales erróneas en situaciones de temblor.

  3. Utiliza el método de optimización de parámetros para encontrar la combinación de parámetros óptima.

  4. La inclusión de un mecanismo de seguimiento de tendencias en la lógica de stop loss permite a la línea de stop loss seguir el precio de forma flexible.

  5. Aumentar el juicio sobre la resistencia de soporte a gran escala para evitar señales erróneas en áreas de precios clave.

  6. La calidad de la señal se filtra aún más en combinación con modelos de aprendizaje automático.

Resumir

La estrategia de cruce de líneas es una estrategia de seguimiento de tendencias sencilla y práctica. Puede filtrar eficazmente el ruido y capturar los cambios en las tendencias a medio y largo plazo de los precios.

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

//@version=5
strategy("SMA Crossover Strategy", overlay=true)

// Input parameters
fast_length = input(9, title="Fast SMA Length")
slow_length = input(45, title="Slow SMA Length")

// Calculate moving averages
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)

// Buy condition
buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma)

// Sell condition
sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma)

// Calculate stop loss levels
prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on)
prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on)

// Plot signals on the chart
plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Strategy exit conditions
long_stop_loss = sell_condition ? prev_low : na
short_stop_loss = buy_condition ? prev_high : na

strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss)
strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss)

strategy.entry("Long", strategy.long, when=buy_condition)
strategy.entry("Short", strategy.short, when=sell_condition)