Estratégia de negociação automática baseada em RSI

Autora:ChaoZhang, Data: 2024-02-29 14:14:01
Tags:

img

Resumo

Esta estratégia projeta um sistema de negociação automatizado para posições longas e curtas baseado no indicador RSI. Ele entra em negociações quando o RSI mostra níveis de sobrecompra ou sobrevenda e sai com stop losses desencadeados por condições específicas.

Estratégia lógica

A estratégia utiliza o indicador RSI para identificar condições de mercado de sobrecompra/supervenda. Especificamente, quando o RSI cai abaixo da linha de sobrevenda, entra em posições longas; quando o RSI excede a linha de supercompra, entra em posições curtas.

Além disso, as regras de saída são estabelecidas na estratégia. Após a abertura de posições longas, se o RSI cruzar acima da linha de sobrecompra novamente, ele irá desencadear stop losses para fechar longs; da mesma forma, após a abertura de curto, se o RSI cruzar abaixo da linha de sobrevenda novamente, ele vai fechar curto.

Análise das vantagens

A maior vantagem desta estratégia é o uso do indicador RSI para julgar cenários de sobrecompra / sobrevenda, que é um método de análise técnica relativamente maduro e confiável na negociação quantitativa.

Além disso, o mecanismo de stop loss controla efetivamente o risco de queda durante fortes tendências unidirecionais, o que contrasta fortemente com as estratégias tradicionais de seguir tendências, onde os corredores podem facilmente entrar em problemas.

Análise de riscos

O maior risco é que o indicador RSI pode dar sinais de negociação errados ocasionalmente. Nenhum indicador técnico pode ser 100% preciso na previsão dos movimentos do mercado, incluindo o RSI. Quando o RSI faz julgamentos errados sobre o estado de sobrecompra / sobrevenda, isso levará a entradas erradas para a estratégia.

Para mitigar esse risco, as perdas de parada são implementadas na estratégia. Mas as chances de gatilhos de perda de parada ainda podem ser altas durante tendências fortes, e intervenção manual seria necessária para fechar as posições erradas.

Orientações de otimização

Ainda há espaço para novas otimizações:

  1. Incorporar outros indicadores para confirmar os sinais de entrada e evitar entradas erradas apenas a partir do RSI.

  2. Otimizar os parâmetros do RSI para encontrar melhores valores de comprimento para detecções mais precisas de sobrecompra/supervenda.

  3. Ajuste fino da colocação de stop loss para equilibrar a prevenção de perdas e evitar saídas prematuras.

Conclusão

Em geral, esta estratégia de negociação automatizada baseada em RSI tem a vantagem de identificar efetivamente as condições de mercado de sobrecompra e sobrevenda. Ao entrar em posições longas e curtas durante níveis extremos de RSI, visa lucrar com reversões de mercado. O mecanismo de stop loss também ajuda a limitar perdas durante fortes tendências unidirecionais. No entanto, o risco de sinais de RSI mal avaliados permanece.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows Buy and close Buy positions --------------- //

timebull = stratbull 
timebear = stratbear 

strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")


Mais.