
A estratégia de cruzamento de equilíbrio de RSI de múltiplos períodos de tempo é uma estratégia de acompanhamento de tendências em múltiplos períodos de tempo. A estratégia usa os indicadores de RSI de vários períodos de tempo ao mesmo tempo, e o RSI de cada período de tempo é tratado como uma média móvel ponderada, que acaba se unindo em dois indicadores de sinais combinados.
A estratégia primeiro calcula o RSI em vários períodos de tempo (minuto 1, minuto 5, minuto 15 etc.) e depois processa o RSI de cada período de tempo com uma média móvel ponderada de 15 anos (VMA) para obter a média do RSI em cada período de tempo.
Em seguida, a média RSI de todos os quadros de tempo é combinada de forma equilibrada, combinando os dois sinais em linha rápida e lenta. A linha rápida tem um EMA de 100 ciclos e a linha lenta tem um EMA de 150 ciclos.
Quando a linha rápida de baixo para cima quebra a linha lenta, gera um sinal de compra; quando a linha rápida de cima para baixo quebra a linha lenta, gera um sinal de venda. Assim, o sinal de cruzamento integrado do RSI de vários quadros temporais pode efetivamente acompanhar a tendência e filtrar o ruído do mercado de curto prazo.
A integração de vários quadros temporais permite suavizar a curva de preços e filtrar efetivamente as falsas rupturas.
O indicador RSI pode refletir sobrecompra e sobrevenda, evitando a perseguição de alta e baixa.
A dupla linha de equilíbrio tem melhor desempenho do que o sistema de linha única.
O uso de uma VMA em vez de uma SMA reduz a influência de flutuações de curto prazo sobre a linha média.
A estratégia de multi-marco de tempo, com alto requisito de ajuste de parâmetros, pode ser adiada ou adiada se não for configurada adequadamente.
O sistema de linha média não é muito eficaz na adaptação de curvas, e tem um desempenho mais fraco nos pontos de mudança de tendência.
O indicador RSI é propenso a desvios e deve ser observado para sinais de inversão.
Solução: ajustar a configuração dos parâmetros do intervalo de tempo; combinar com outros indicadores para determinar a tendência, como o MACD e outros; alertar o RSI para a ocorrência de um sinal de desvio.
Otimizar o número de quadros de tempo e a configuração dos parâmetros para melhor capturar as tendências.
Considerar a inclusão de um mecanismo de impedimento de perdas para controlar o risco.
Melhorar a qualidade da tomada de decisão, combinada com outros indicadores de tendências e desvios.
Teste diferentes parâmetros de ciclo de posição para encontrar o melhor efeito de posição.
A estratégia de cruzamento de linha uniforme do RSI de múltiplos quadros temporais, através do julgamento integrado do indicador RSI em vários períodos temporais, utiliza o sistema de linha uniforme para suavizar a curva de preços e gerar sinais de negociação, pertence à estratégia típica de acompanhamento de tendências de múltiplos quadros temporais. A vantagem da estratégia é que ela pode acompanhar a tendência de forma eficaz e filtrar o ruído, mas precisa prestar atenção ao ajuste de parâmetros e ao controle de risco.
/*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 )