La estrategia de negociación de promedios móviles de la Cruz Dorada es una estrategia de negociación cuantitativa clásica. Esta estrategia utiliza promedios móviles de diferentes períodos para determinar las tendencias del mercado para posiciones largas y cortas. Cuando el promedio móvil a corto plazo cruza por encima del promedio móvil a largo plazo, se considera una señal de compra. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo, se considera una señal de venta.
Esta estrategia se basa en tres promedios móviles simples (SMA) de diferentes períodos: 50 días, 100 días y 200 días.
Cuando el promedio móvil de 50 días se cruza por encima del promedio móvil de 100 días, se realiza una operación larga.
Señal de salida: cuando la media móvil de 50 días se cruce por debajo de la media móvil de 100 días, cierre las posiciones; o cuando el precio de cierre esté por debajo de la media móvil de 100 días, salida; o cuando la media móvil de 100 días se cruce por debajo de la media móvil de 200 días, salida.
Tome ganancias y stop loss: fije el retraso de tomar ganancias y stop loss fijo.
Esta estrategia utiliza la capacidad de los promedios móviles para determinar eficazmente las tendencias de precios promedio del mercado.
Simple de implementar, sólo requiere tres medias móviles de diferentes períodos.
Las medias móviles tienen capacidades de filtrado de ruido que reducen el impacto de la aleatoriedad del mercado en las operaciones y hacen que las señales sean más confiables.
Las medias móviles reflejan eficazmente los cambios en la tendencia del precio medio del mercado, utilizando cruces entre líneas a corto y largo plazo para determinar los cambios de tendencia principales.
Los períodos de media móvil pueden ajustarse para diferentes niveles de control de riesgos.
Puede generar muchas señales falsas. Los cruces frecuentes pueden ocurrir cuando los promedios a corto y largo plazo son demasiado cercanos, lo que resulta en señales excesivamente inválidas.
Las medias móviles responden lentamente a los cambios de precios y no pueden reaccionar instantáneamente a las noticias del mercado y a los eventos importantes.
El filtro de ruido también significa perder beneficios de las fluctuaciones menores del mercado.
Selección de parámetros subjetivos: los períodos de media móvil adecuados son en gran medida subjetivos y dependen del mercado específico.
Añadir filtros para reducir las señales falsas, como los filtros de rango de precios para limitar las señales a movimientos por encima de una cierta magnitud.
Incorporar otros indicadores para las estrategias combinadas, que pueden mejorar la precisión de la señal, por ejemplo, los indicadores de volatilidad o volumen.
Añadir módulos de optimización adaptativa para optimizar dinámicamente los períodos de promedio móvil basados en algoritmos de aprendizaje automático, lo que permite la adaptación a las condiciones cambiantes del mercado.
Incorporar modelos avanzados de aprendizaje profundo en lugar de promedios móviles para obtener capacidades superiores de extracción y modelado de características.
La estrategia de trading de media móvil de la Cruz Dorada es una estrategia típica de seguimiento de tendencias. Refleja las tendencias de precios promedio del mercado de manera simple y práctica, adecuada para principiantes. Sin embargo, también tiene algunos defectos que se pueden mejorar mediante la mejora de la calidad de la señal, la combinación con otros indicadores técnicos, la introducción de mecanismos adaptativos, etc. para adaptarse a mercados más complejos. En general, esta es una estrategia con alto valor de referencia y aprendizaje.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1m basePeriod: 1m 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/ // © CJDeegan //@version=4 strategy(title = "[LIVE] Golden Cross", overlay=true) // ------------Functions------------ //Percent to Decimal Conversion perToDec(a) => a * 0.01 //Price Difference to Tick diffToTick(a,b) => (a - b) / syminfo.mintick // ------------Strategy Inputs------------ takeProfitInput = input(300, "Take Profit Price (% Gain)") stopLossInput = input(25, "Stop Loss (% Loss)") startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2018, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // ------------Populate Indicators------------ //EMA sma50 = sma(close,50) sma100 = sma(close,100) sma200 = sma(close,200) // ------------Entry Logic------------ //Guards entryGuard = true //Triggers entryTrigger = crossover(sma50,sma100) //Conditions entryCondition = entryGuard and entryTrigger //Calculations //Execution if (inDateRange and entryCondition) strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry") //------------Exit Logic------------ //Guards //Triggers exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200) //Conditions exitCondition = exitTrigger //Calculations //Take Profit takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput)) //Take Profit Ticks takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price) //StopLoss stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput)) //Execution if (inDateRange) strategy.close("Long", when = exitCondition, comment = "Sell Trigger") strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice) //Plots plot(sma50, "SMA 50", color = color.blue) plot(sma100, "SMA 100", color = color.green) plot(sma200, "SMA 200", color = color.yellow) entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr) profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr) stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr) fill(entry,profit, color=color.green) fill(entry,stop, color=color.red)