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:
Calcular o indicador RSI(14) e suavizá-lo utilizando a EMA(28) para obter o oscilador processado.
Calcule Bandas de Bollinger no RSI processado para obter bandas superiores/inferiores.
Quando o RSI processado cruza abaixo da linha de entrada, um sinal de compra é gerado.
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