La estrategia de cruce de media móvil doble es una estrategia de negociación cuantitativa relativamente simple. Calcula el precio de cierre promedio de las 7 velas recientes y el precio de cierre promedio de 20 velas. Cuando el promedio móvil a corto plazo cruza el promedio móvil a largo plazo desde abajo, indica una posición larga. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo, indica una posición corta. Esto permite a la estrategia capturar los puntos de inflexión en las tendencias a mediano plazo del mercado.
La lógica básica de esta estrategia es calcular el precio de cierre promedio de las 7 velas recientes (excluyendo la vela actual) como promedio móvil a corto plazo, y el precio de cierre promedio de 20 velas (excluyendo las 7 velas recientes) como promedio móvil a largo plazo. Cuando el promedio móvil a corto plazo cruza el promedio móvil a largo plazo desde abajo, indica que el mercado está cambiando de caída a alza, lo que indica una posición larga. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo desde arriba, indica que el mercado está cambiando de alza a caída, lo que indica una posición corta.
En el caso de una posición larga, la posición larga se abrirá utilizando todo el capital de la cuenta. En el caso de una posición corta, la posición larga existente se cerrará primero antes de abrir la posición corta utilizando la misma cantidad. Cada posición abierta se mantendrá durante 20-25 velas. Durante este período, si se produce una pérdida, el 50% de la posición se detendrá. Si se produce una ganancia suficiente, el 50% de la posición se tomará como ganancia.
Las ventajas de esta simple estrategia de cruce de dos medias móviles son:
Siendo una simple estrategia de seguimiento de tendencias, también se enfrenta a algunos riesgos potenciales:
Las optimizaciones para hacer frente a estos riesgos son:
Como una estrategia simple de cruce de media móvil dual, las principales optimizaciones son:
Optimizar los parámetros de MA, probar diferentes combinaciones de MA a corto y largo plazo para obtener los mejores parámetros;
Añadir otros indicadores de filtro como volumen, índice de volatilidad, etc. para evitar señales erróneas en mercados agitados;
Optimizar las estrategias de stop loss y take profit, probar diferentes ratios para encontrar el óptimo;
Prueba de la eficacia en diferentes ciclos de mercado y optimización del período de retención;
Añadir algoritmos de aprendizaje automático, mantener la optimización de parámetros a través de pruebas de retroceso para mayor robustez.
En resumen, esta es una estrategia simple de doble cruce de promedios móviles, que utiliza cruces de MA en diferentes períodos para determinar puntos de inflexión de tendencia a mediano plazo. Tiene una gran practicidad y es fácil de operar. Pero también tiene limitaciones para determinar efectivamente los verdaderos puntos de reversión del mercado. Se necesitan más optimizaciones en la adición de filtros, ajuste de parámetros, aprendizaje automático, etc. para hacerlo más robusto en diferentes condiciones de mercado para un alfa constante.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nrathi2211 //@version=5 strategy("Closing Prices", overlay=true) //variables closingB7 = ta.highest(close, 7)[7] closingB14 = ta.highest(close, 7)[20] highB14 = ta.highest(low, 50)[7] capital = 50000 //functions qty_find(float price) => capital / int(price) profit_take() => profit = strategy.opentrades.profit(strategy.opentrades - 1) profit*.95 if(closingB7 < closingB14) if(ta.crossover(close, closingB7)) strategy.entry("long_buy", strategy.long, qty_find(close)) current_profit = strategy.opentrades.profit(strategy.opentrades - 1) if(current_profit < 0) strategy.close("Exit long_buy SL", "long_buy", qty_percent = 50) else if(current_profit < profit_take()) strategy.close("Exit long_buy TP", "long_buy", qty_percent = 50) if(ta.crossunder(close, closingB7)) strategy.exit("long_sell", from_entry = "long_buy", stop = closingB7) plot(closingB7, "cl", color.green, 2) //plot(closingB14, "cl", color.red, 2) plot(highB14, "cl", color.purple, 2)