La estrategia de inversión de cruce de media móvil doble es una estrategia comercial cuantitativa típica que rastrea las tendencias. La estrategia utiliza las señales de cruce de la línea de 9 días y la línea de 14 días en el indicador de media móvil doble para construir señales de compra y venta. Compra cuando la línea de 9 días rompe la línea de 14 días desde abajo para formar una cruz de oro, y vende cuando la línea de 9 días rompe la línea de 14 días desde arriba para formar una cruz de muerte. Para filtrar las señales falsas, la estrategia también introduce el indicador de línea de 50 días para determinar si el precio rompe.
Esta estrategia opera principalmente sobre la base de las señales de cruz de oro y cruz de muerte del indicador de media móvil dual. En las medias móviles duales, la línea de 9 días representa tendencias a corto plazo, la línea de 14 días representa tendencias a mediano plazo, y su cruce es un indicador técnico efectivo para juzgar los giros en las tendencias del mercado. Cuando la línea de tendencia a corto plazo rompe la línea de tendencia a mediano plazo desde abajo para formar una cruz de oro, indica que la línea de tendencia a corto plazo se está fortaleciendo, lo que es una señal de compra; cuando rompe desde arriba para formar una línea de tendencia a corto plazo, indica que la línea de tendencia a corto plazo se está debilitando, lo que es una señal de venta.
Además, la estrategia también introduce la línea de 50 días para filtrar señales engañosas. Solo genera una compra cuando el precio está por encima de la línea de 50 días; y solo genera una venta cuando el precio está por debajo de la línea de 50 días. La línea de 50 días representa tendencias a medio y largo plazo. Solo cuando las tendencias a medio y largo plazo coinciden, se llevan a cabo operaciones a corto plazo.
La lógica básica es la siguiente:
// Buy condition: 9-day line crosses above 14-day line and close price is above 50-day line
buyCondition = ta.crossover(sma9, sma14) and close > sma50
// Sell condition: 9-day line crosses below 14-day line and close price is below 50-day line
sellCondition = ta.crossunder(sma9, sma14) and close < sma50
Las ventajas de la doble estrategia de media móvil son obvias:
La doble estrategia de media móvil también presenta algunos riesgos:
Para hacer frente a los riesgos, se pueden realizar optimizaciones como las siguientes:
La doble estrategia de media móvil puede optimizarse en varios aspectos:
La estrategia de media móvil dual es generalmente una estrategia eficiente para generar ganancias. Puede obtener ganancias siguiendo las tendencias continuamente. Al mismo tiempo, tiene ciertos riesgos y necesita mejoras adicionales. Al optimizar los parámetros, los métodos de parada y las combinaciones de estrategias, los efectos de esta estrategia pueden mejorarse aún más.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("smaCrossReverse", shorttitle="smaCrossReverse", overlay=true) // Define the length for the SMAs sma9Length = input(9, title="SMA 9 Length") sma14Length = input(14, title="SMA 14 Length") sma50Length = input(50, title="SMA 50 Length") // Add input for SMA 50 // Calculate SMAs sma9 = ta.sma(close, sma9Length) sma14 = ta.sma(close, sma14Length) sma50 = ta.sma(close, sma50Length) // Calculate SMA 50 // Buy condition: SMA 9 crosses above SMA 14 and current price is above SMA 50 buyCondition = ta.crossover(sma9, sma14) and close > sma50 // Sell condition: SMA 9 crosses below SMA 14 and current price is below SMA 50 sellCondition = ta.crossunder(sma9, sma14) and close < sma50 // Track the time since position was opened var float timeElapsed = na if (buyCondition) timeElapsed := 0 else timeElapsed := na(timeElapsed[1]) ? timeElapsed[1] : timeElapsed[1] + 1 // Close the buy position after 5 minutes if (timeElapsed >= 5) strategy.close("Buy") // Track the time since position was opened var float timeElapsedSell = na if (sellCondition) timeElapsedSell := 0 else timeElapsedSell := na(timeElapsedSell[1]) ? timeElapsedSell[1] : timeElapsedSell[1] + 1 // Close the sell position after 5 minutes if (timeElapsedSell >= 5) strategy.close("Sell") // Plot the SMAs on the chart plot(sma9, title="SMA 9", color=color.blue) plot(sma14, title="SMA 14", color=color.red) plot(sma50, title="SMA 50", color=color.green) // Plot SMA 50 on the chart // Strategy entry and exit conditions using if statements if (buyCondition) strategy.entry("Buy", strategy.long) if (sellCondition) strategy.entry("Sell", strategy.short)