Estratégia de negociação quantitativa baseada em sinais do indicador RSI

Autora:ChaoZhang, Data: 14 de setembro de 2023 20:26:49
Tags:

Este artigo explica em detalhes uma estratégia quantitativa de negociação que utiliza o indicador RSI para gerar sinais de negociação.

I. Lógica da estratégia

A principal lógica de negociação é a seguinte:

  1. Calcular o indicador RSI(14) e suavizá-lo utilizando a EMA(28) para obter o oscilador processado.

  2. Calcule Bandas de Bollinger no RSI processado para obter bandas superiores/inferiores.

  3. Quando o RSI processado cruza abaixo da linha de entrada, um sinal de compra é gerado.

  4. Quando o indicador entra nas zonas de sobrecompra/supervenda, é gerado um sinal de posição fechada.

Deste modo, as características do RSI podem ser utilizadas para capturar oportunidades de reversão.

II. Vantagens da Estratégia

A maior vantagem é o aumento do espaço de ajuste de parâmetros do processamento de indicadores, o que permite um controlo mais rigoroso da frequência de negociação e evita o excesso de negociação.

Outra vantagem são os critérios de entrada intuitivos baseados em valores numéricos claros do indicador.

Por último, o intervalo sobrecomprado/supervendido também ajuda a obter lucros e a controlar os riscos em tempo útil por transação.

III. Deficiências potenciais

No entanto, a estratégia apresenta também os seguintes riscos:

Em primeiro lugar, o RSI concentra-se em negociações de reversão, que podem gerar sinais falsos durante as tendências.

Em segundo lugar, um ajuste inadequado dos parâmetros pode também conduzir a uma otimização excessiva e a uma incapacidade de adaptação às condições de mercado em evolução.

Por último, a taxa de ganhos relativamente baixa expõe também a estratégia a riscos de utilização.

IV. Resumo

Em resumo, este artigo apresenta principalmente uma estratégia de negociação quantitativa utilizando o indicador RSI. Ele controla a frequência de negociação através do ajuste de parâmetros e tem regras de entrada / saída claras. Ao otimizar parâmetros, os riscos de reversão de negociação também precisam ser gerenciados.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//-----------------------------------------------------------------
//This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below:
//-----------------------------------------------------------------
//1.Define Oscillator Line
//+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe
//2.Define Overbought and Oversold
//+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b
//+ Overbought Zone marked above level 0.8
//+ Oversold Zone marked below level 0.2
//3.Buy Signal
//+ Entry Long Positon when %b crossover Point of Entry Long
//+ Deafault Point of Entry Long is 0.2
//+ Buy signal marked by Green dot
//4.Sell Signal
//+ Entry Short Position when %b crossunder Point of Entry Short
//+ Deafault Point of Entry Short is 0.8
//+ Sell signal marked by Red dot
//5.Exit Signal
//+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone
//+ Exit signal marked by Yellow dot
//-----------------------------------------------------------------
strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false)

//RSI
rsi_gr="=== RSI ==="
rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr)
smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr)
rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len)
//rsi's BOLLINGER BANDS
pb_gr="=== %b ==="
length = input(80, title = "Length",inline="set1",group=pb_gr)
rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr)
ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr)
ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr)
et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr)
et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr)
[rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult)
//rsi's %B
rsipB = ((rsi - rsilower) / (rsiupper - rsilower))
plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1)

h1=hline(1,color=color.new(color.red,100))
h4=hline(ovb,color=color.new(color.red,100))
h0=hline(0,color=color.new(color.green,100))
h3=hline(ovs,color=color.new(color.green,100))
h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted)

fill(h1,h4, title="Resistance", color=color.new(color.red,90))
fill(h0,h3, title="Support", color=color.new(color.green,90))

//Signal
rsi_buy=
           rsipB[1]<et_long
           and
           rsipB>et_long
rsi_sell=
           rsipB[1]>et_short
           and
           rsipB<et_short
rsi_exit=
           (rsipB[1]>ovs and rsipB<ovs)
           or
           (rsipB[1]<ovb and rsipB>ovb)
plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute)
plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute)
plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute)
//Alert
strategy.entry("Long",strategy.long,when=rsi_buy)
strategy.close("Long",when=rsi_exit)
strategy.entry("Short",strategy.short,when=rsi_sell)
strategy.close("Short",when=rsi_exit)
//EOF

Mais.