La estrategia de cruce de promedios móviles es una estrategia de análisis técnico muy clásica y comúnmente utilizada. La idea central de esta estrategia es utilizar el cruce entre promedios móviles de diferentes períodos como señales comerciales. Cuando el promedio móvil a corto plazo cruza por encima del promedio móvil a largo plazo desde abajo, se genera una señal de compra. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo desde arriba, se genera una señal de venta.
Esta estrategia utiliza datos de entrada para establecer el tipo (SMA, EMA, WMA, RMA) y el período de la media móvil, así como el intervalo de tiempo de backtesting.
En la función de variante se calculan diferentes tipos de medias móviles. La media móvil calculada se guarda en la variable ma.
Cuando el precio de cierre cruza por encima de ma, se genera una señal de compra.
Para establecer un stop loss, se calcula el intervalo verdadero promedio de 14 períodos atr. Tome el punto de cruce como referencia, añada o resta 2 veces atr como el intervalo de stop loss.
La lógica específica de entrada y salida es la siguiente:
Entrada larga: cruces cerrados por encima de ma y dentro del intervalo de tiempo de backtest, punto de stop loss es punto de entrada cerrado
Salida larga: cierre de cruces por debajo de ma menos 2 veces atr para la salida de stop loss o el precio más alto excede el punto de entrada cierre más 2 veces atr para la salida de take profit
Entrada corta: cierre de cruces por debajo de ma y dentro del intervalo de tiempo de backtest, punto de stop loss es punto de entrada cerrado
Salida corta: cierre de cruces por encima de ma más 2 veces atr para la salida de stop loss o cierre del precio más bajo que el punto de entrada menos 2 veces atr para la salida de take profit.
Para hacer frente a los riesgos, se pueden realizar optimizaciones en los siguientes aspectos:
Esta estrategia puede optimizarse en los siguientes aspectos:
La estrategia de cruce de promedios móviles es una estrategia de análisis técnico muy típica y comúnmente utilizada. La idea central de la estrategia es simple y fácil de implementar, adecuada para varios mercados, y es una de las estrategias de negociación cuantitativa de nivel de entrada. Sin embargo, la estrategia también tiene algunos problemas como generar señales frecuentes y ser propenso a detener la pérdida. Con las optimizaciones adecuadas, el rendimiento se puede mejorar mucho. En general, la estrategia de cruce de promedios móviles proporciona un muy buen marco para el desarrollo de estrategias y es la piedra angular del aprendizaje de estrategias de negociación cuantitativas.
/*backtest start: 2023-10-03 00:00:00 end: 2023-11-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("MA Cross Strategy", overlay=true,commission_value = 0.1) type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"]) length = input(28) source = close // === INPUT BACKTEST RANGE === FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2000, title = "From Year", minval = 2000) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" variant(type, src, len) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v5 = wma(src, len) // Weighted v7 = rma(src, len) // Smoothed type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1 ma = variant(type,source, length) atr = security(syminfo.tickerid, "D", atr(14)) range = valuewhen(cross(close,ma), (atr*2), na) ep = valuewhen(cross(close,ma), close, na) plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1) plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999) strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep ) strategy.exit("Long Exit", "Long Entry", stop = ep-range) strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep ) strategy.exit("Short Exit", "Short Entry", stop = ep+range) strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )