
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.
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.
Respuesta:
La estrategia tiene espacio para ser optimizada aún más:
El uso de medias móviles adaptativas o medias móviles de índices puede capturar mejor los cambios de tendencia.
Aumentar las señales de filtración, como los indicadores de fluctuación, para evitar señales erróneas en situaciones de temblor.
Utiliza el método de optimización de parámetros para encontrar la combinación de parámetros óptima.
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.
Aumentar el juicio sobre la resistencia de soporte a gran escala para evitar señales erróneas en áreas de precios clave.
La calidad de la señal se filtra aún más en combinación con modelos de aprendizaje automático.
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.
/*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)