La estrategia de cruce de promedios móviles de RSI es una estrategia de seguimiento de tendencias a través de múltiples marcos de tiempo. Utiliza indicadores de RSI en múltiples marcos de tiempo y toma un promedio móvil ponderado de cada RSI de cada marco de tiempo. Las señales finales se generan combinando todos los promedios móviles de RSI en dos indicadores integrales y negociando las señales de cruce, que es un típico sistema de cruce de promedios móviles duales.
Esta estrategia primero calcula los indicadores del RSI en múltiples marcos de tiempo (1 minuto, 5 minutos, 15 minutos, etc.) Luego se necesita VMA de 15 períodos (media móvil ponderada) del RSI para cada marco de tiempo para obtener las líneas de media móvil del RSI.
Después de eso, todos los promedios móviles del RSI de diferentes marcos de tiempo se combinan por igual en dos señales: línea rápida y línea lenta.
Cuando la línea rápida cruza por encima de la línea lenta, se genera una señal de compra. Cuando la línea rápida cruza por debajo de la línea lenta, se genera una señal de venta. Al combinar el RSI de varios marcos de tiempo de esta manera, las señales de cruce pueden rastrear efectivamente las tendencias mientras filtran el ruido del mercado a corto plazo.
La combinación de múltiples marcos de tiempo puede suavizar las curvas de precios y evitar de manera efectiva las falsas rupturas.
El RSI indica los niveles de sobrecompra/sobreventa, evitando perseguir nuevos máximos/ mínimos.
Las medias móviles dobles tienen un mejor efecto de retención que un único sistema de medias móviles.
El uso de VMA en lugar de SMA reduce el impacto de las fluctuaciones a corto plazo.
Las estrategias de marcos de tiempo múltiples requieren una extensa afinación de parámetros, configuraciones inadecuadas pueden causar entradas buenas perdidas o entradas tardías.
Los promedios móviles tienen un mal ajuste de la curva, un rendimiento inferior en los puntos de inflexión de la tendencia.
La divergencia del RSI ocurre con frecuencia, las señales de reversión deben ser observadas.
Soluciones: Optimice los parámetros del marco de tiempo; Combine con otros indicadores como el MACD para determinar tendencias; Cuidado con las señales de divergencia del RSI.
Optimizar el número de marcos de tiempo y la configuración de parámetros para capturar mejor las tendencias.
Considere la posibilidad de añadir un stop loss para controlar los riesgos.
Combinar otros indicadores para una mejor decisión sobre tendencias y divergencias.
Prueba de diferentes parámetros del período de retención para obtener el mejor efecto de retención.
La estrategia de cruce de promedio móvil RSI multi-tiempo genera señales comerciales combinando indicadores de RSI de múltiples marcos de tiempo utilizando un sistema de promedio móvil, que es una estrategia típica de seguimiento de tendencias multi-tiempo.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="RSI multitimeframe SMA crossover", shorttitle="RSI multitimeframe strategy", default_qty_type= strategy.percent_of_equity, margin_long=50, default_qty_value=150) res1 = input(title="Res 01", type=input.resolution, defval="1") res2 = input(title="Res 0", type=input.resolution, defval="5") res3 = input(title="Res 1", type=input.resolution, defval="15") res4 = input(title="Res 2", type=input.resolution, defval="15") res5 = input(title="Res 3", type=input.resolution, defval="15") res6 = input(title="Res 4", type=input.resolution, defval="30") res7 = input(title="Res 5", type=input.resolution, defval="45") res8 = input(title="Res 6", type=input.resolution, defval="60") lengthRSI = input(15, minval=1) lengthMA = input(15, minval=1) lengthFMA = input(100, minval=1) lengthFMA2 = input(150, minval=1) Long_yes = input(defval=1, title="Long trades 0 or 1", minval=0, maxval=1) Short_yes = input(defval=0, title="Short trades 0 or 1", minval=0, maxval=1) src = close // === INPUT BACKTEST RANGE === fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) // === INPUT SHOW PLOT === showDate = input(defval = true, title = "Show Date Range", type = input.bool) // === FUNCTION EXAMPLE === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // stop loss longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 0.01 longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 0.01 shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) rsi1 = rsi(src, lengthRSI) MA1 = vwma(rsi1, lengthMA) outD1 = security(syminfo.tickerid, res1, MA1) outD2 = security(syminfo.tickerid, res2, MA1) outD3 = security(syminfo.tickerid, res3, MA1) outD4 = security(syminfo.tickerid, res4, MA1) outD5 = security(syminfo.tickerid, res5, MA1) outD6 = security(syminfo.tickerid, res6, MA1) outD7 = security(syminfo.tickerid, res7, MA1) outD8 = security(syminfo.tickerid, res8, MA1) //plot_d0 = outD0 //plot_d1 = outD1 //plot_d2 = outD2 //plot_d3 = outD3 //plot_d4 = outD4 //plot_d5 = outD5 //plot_d6 = outD6 out_multi = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA) out_multi2 = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA2) //out_multi1 = outD2+outD3+outD4 //out_multi2 = outD4+outD5+outD6 //col0 = outD0 < 20 ? color.lime : outD0 > 80 ? color.red : color.blue //col1 = outD1 < 20 ? color.lime : outD1 > 80 ? color.red : color.blue //col2 = outD2 < 20 ? color.lime : outD2 > 80 ? color.red : color.blue //col3 = outD3 < 20 ? color.lime : outD3 > 80 ? color.red : color.blue //col4 = outD4 < 20 ? color.lime : outD4 > 80 ? color.red : color.blue //col5 = outD5 < 20 ? color.lime : outD5 > 80 ? color.red : color.blue //col6 = outD6 < 20 ? color.lime : outD6 > 80 ? color.red : color.blue // plot(plot_d0,linewidth=2, color=col0) // plot(plot_d1, linewidth=2, color=col1) // plot(plot_d2,linewidth=2, color=col2) // plot(plot_d3,linewidth=2, color=col3) // plot(plot_d4,linewidth=2, color=col4) // plot(plot_d5,linewidth=2, color=col5) // plot(plot_d6,linewidth=2, color=col6) long=(out_multi/8) short=(out_multi2/8) plot(long, linewidth=1, color=color.green) plot(short, linewidth=1, color=color.red) long1=crossover(long,short) short1=crossunder(long,short) h0 = hline(65, "Upper Band", color=color.red, linestyle=hline.style_solid, linewidth=2 ) h1 = hline(35, "Lower Band", color=color.green, linestyle=hline.style_solid, linewidth=2) strategy.entry("buy", strategy.long, when=long1 and window() and Long_yes > 0) if strategy.position_size > 0 strategy.exit(id="XL STP", stop=longStopPrice) strategy.close("buy",when=short1 ) strategy.entry("sell", strategy.short, when=short1 and window() and Short_yes > 0) if strategy.position_size < 0 strategy.exit(id="XS STP", stop=shortStopPrice) strategy.close("buy",when=long1 )