
La estrategia de cruce de línea recta del RSI de varios marcos de tiempo es una estrategia de seguimiento de tendencias de varios marcos de tiempo. La estrategia utiliza el RSI de varios marcos de tiempo al mismo tiempo y el RSI de cada marco de tiempo es procesado con un promedio móvil ponderado, que finalmente se fusiona en dos indicadores de señal integral.
La estrategia comienza por calcular el RSI en varios marcos de tiempo (minuto 1, minuto 5, minuto 15 etc.) y luego se trata el RSI de cada marco de tiempo con un promedio móvil ponderado de longitud 15 (VMA) para obtener el promedio RSI de cada marco de tiempo.
Luego, se combina el promedio RSI de todos los marcos de tiempo de igual peso, combinando las dos señales de la línea rápida y la línea lenta respectivamente. El EMA de la línea rápida es de 100 ciclos y el de la línea lenta es de 150 ciclos.
Cuando la línea rápida de abajo hacia arriba rompe la línea lenta genera una señal de compra; cuando la línea rápida de arriba hacia abajo rompe la línea lenta genera una señal de venta. De esta manera, la señal cruzada integral del RSI de varios marcos de tiempo puede seguir la tendencia de manera efectiva y filtrar el ruido del mercado a corto plazo.
La integración de múltiples marcos de tiempo permite suavizar la curva de precios y filtrar con eficacia las brechas falsas.
El indicador RSI puede reflejar el estado de sobrecompra y sobreventa, evitando perseguir los altos y bajos.
El sistema de doble línea de paridad tiene un mejor efecto de mantenimiento de la posición que el sistema de una sola línea de paridad.
El uso de VMA en lugar de SMA reduce el impacto de las fluctuaciones a corto plazo en la línea media.
Las estrategias de marcos de tiempo múltiples, los requisitos de ajuste de parámetros son más altos, y la configuración incorrecta puede entrar en juego demasiado pronto o demasiado tarde.
El sistema de línea media no es muy eficaz para la adaptación de la curva y tiene un mal desempeño en los puntos de cambio de tendencia.
Los indicadores RSI son propensos a la desviación, por lo que hay que tener en cuenta las señales de cambio.
Solución: ajustar la configuración de los parámetros del marco de tiempo; combinar con otros indicadores para juzgar la tendencia, como el MACD, etc.; advertir que el RSI se desvía de la señal.
Optimización de la cantidad y configuración de parámetros de los marcos de tiempo para capturar mejor las tendencias.
Considerar la inclusión de un mecanismo de suspensión de pérdidas para controlar el riesgo.
En combinación con otros indicadores para juzgar tendencias y desviaciones, mejorar la calidad de la toma de decisiones.
Prueba diferentes parámetros de ciclo de tenencia para encontrar el mejor efecto de tenencia.
La estrategia de cruce de la línea media del RSI de varios marcos temporales es una estrategia típica de seguimiento de tendencias de varios marcos temporales. Utiliza el criterio integral de los indicadores RSI en varios marcos temporales para suavizar la curva de precios y generar señales de negociación. La ventaja de esta estrategia es que puede seguir la tendencia de manera efectiva y filtrar el ruido, pero debe tener en cuenta la optimización de los parámetros y el control del riesgo.
/*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 )