La estrategia de cruce de promedios móviles es una estrategia de negociación basada en promedios móviles. Utiliza el cruce de un promedio móvil rápido y un promedio móvil lento como señales de compra y venta. Cuando el MA rápido cruza por encima del MA lento desde abajo, se genera una señal de compra. Cuando el MA rápido cruza por debajo del MA lento desde arriba, se genera una señal de venta.
La estrategia utiliza la función sma para calcular promedios móviles simples de un período especificado como el MA rápido y el MA lento.
Cuando el MA rápido cruza por encima del MA lento desde abajo, la función crossunder detecta la señal de cruce y genera una señal de compra.
La estrategia realiza el comercio automatizado a través de señales de pista y señales de salida. La entrada larga se activa cuando el MA rápido cruza por encima del MA lento, y la entrada corta se activa cuando el MA rápido cruza por debajo del MA lento. Las señales de salida correspondientes también se generan en cruces inversos.
La estrategia de cruce de MA es una estrategia clásica y sencilla de seguimiento de tendencias. Utiliza principalmente cruces de MA como señales comerciales con lógica e implementación fáciles. Se puede adaptar a través del ajuste de parámetros. Pero también tiene inconvenientes como susceptibilidad a oscilaciones e inversiones de tendencia, alta frecuencia de señal, etc. Estos pueden mejorarse a través de filtros, parámetros dinámicos, stop loss, etc. La estrategia tiene un amplio espacio y direcciones de optimización, y es una de las estrategias comerciales cuantitativas fundamentales.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-17 04:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "MA Close Strategy", shorttitle = "MA Close",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) MASource = input(defval = open, title = "MA Source") MaLength = input(defval = 18, title = "MA Period", minval = 1) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(true,"UseStopLoss") stopLoss = input(50, title = "Stop loss percentage(0.1%)") window() => time >= timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false MA = sma(MASource,MaLength) plot(MA, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50) long = crossunder(MA, close) short = crossover(MA, close) if (long) strategy.entry("LongId", strategy.long, when = long) strategy.exit("ExitLong", from_entry = "LongId", when = short) if (short) strategy.entry("ShortId", strategy.short, when = short) strategy.exit("ExitShort", from_entry = "ShortId", when = long) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)