Estratégia de cruzamento da média móvel do RSI de vários prazos

Autora:ChaoZhang, Data: 2023-11-16 16:28:22
Tags:

img

Resumo

A estratégia de cruzamento de média móvel do RSI de vários prazos é uma estratégia de tendência em vários prazos. Ele usa indicadores do RSI em vários prazos e toma uma média móvel ponderada de cada RSI de cada período de tempo. Os sinais finais são gerados combinando todas as médias móveis do RSI em dois indicadores abrangentes e negociando os sinais de cruzamento, que é um típico sistema de cruzamento de média móvel dupla.

Princípios

Esta estratégia primeiro calcula os indicadores do RSI em vários prazos (1 minuto, 5 minutos, 15 minutos, etc.) Em seguida, leva 15 períodos de VMA (média móvel ponderada) do RSI para cada período de tempo para obter as linhas médias móveis do RSI.

Depois disso, todas as médias móveis do RSI de diferentes prazos são combinadas igualmente em dois sinais - linha rápida e linha lenta.

Quando a linha rápida cruza acima da linha lenta, um sinal de compra é gerado. Quando a linha rápida cruza abaixo da linha lenta, um sinal de venda é gerado. Combinando o RSI de vários prazos desta forma, os sinais de cruzamento podem efetivamente rastrear tendências enquanto filtram o ruído do mercado de curto prazo.

Vantagens

  1. A combinação de vários prazos pode suavizar as curvas de preços e evitar efetivamente falhas.

  2. O RSI indica níveis de sobrecompra/supervenda, evitando perseguir novos máximos/mínimos.

  3. As médias móveis duplas têm um melhor efeito de retenção do que um único sistema de médias móveis.

  4. O uso de VMA em vez de SMA reduz o impacto das flutuações de curto prazo.

Riscos

  1. As estratégias de vários prazos exigem um ajuste extensivo dos parâmetros, configurações inadequadas podem causar entradas boas perdidas ou entradas atrasadas.

  2. As médias móveis têm uma má adaptação da curva, apresentam um desempenho inferior nos pontos de virada da tendência.

  3. A divergência do RSI ocorre com frequência, os sinais de reversão devem ser observados.

Soluções: Otimize os parâmetros do prazo; Combine com outros indicadores como o MACD para determinar tendências; Cuidado com os sinais de divergência do RSI.

Orientações de otimização

  1. Otimizar o número de prazos e configurações de parâmetros para melhor captar tendências.

  2. Considerar adicionar stop loss ao controlo dos riscos.

  3. Combinar outros indicadores para uma melhor decisão sobre tendências e divergências.

  4. Ensaiar diferentes parâmetros do período de retenção para obter o melhor efeito de retenção.

Conclusão

A estratégia de cruzamento de média móvel RSI multi-tempo gera sinais de negociação combinando indicadores de RSI de vários prazos usando um sistema de média móvel, que é uma estratégia típica de seguimento de tendências multi-tempo. Sua força reside em rastrear efetivamente as tendências e filtrar o ruído, mas o ajuste de parâmetros e o controle de risco precisam de atenção.


/*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 )



Mais.