Estratégia de negociação automática longa e curta com base no indicador RSI


Data de criação: 2024-02-29 14:14:01 última modificação: 2024-02-29 14:14:01
cópia: 25 Cliques: 686
1
focar em
1617
Seguidores

Estratégia de negociação automática longa e curta com base no indicador RSI

Visão geral

Esta estratégia baseia-se no RSI para projetar um sistema de negociação automático de longo prazo. O sistema pode entrar automaticamente em um longo prazo quando o RSI é sobre comprado e sobre vendido, e ativamente parar de perder quando determinadas condições são acionadas.

Princípio da estratégia

Esta estratégia usa o indicador RSI para avaliar o fenômeno de sobrevenda e sobrevenda no mercado. Concretamente, quando o indicador RSI está abaixo da linha de sobrevenda definida, faça uma entrada em alta; quando o indicador RSI está acima da linha de sobrevenda definida, faça uma entrada em baixa.

Além disso, esta estratégia também define a condição de saída. Se o indicador RSI cruzar novamente a linha de supera compra depois de fazer mais, ele desencadeará a saída de perda de múltiplos itens. Da mesma forma, se o indicador RSI cruzar novamente a linha de supera venda depois de fazer menos, ele desencadeará a saída de perda de itens vazios.

Análise de vantagens

A principal vantagem desta estratégia é a utilização do indicador RSI para determinar o fenômeno de sobrecompra e sobrevenda do mercado, um método de análise técnica mais confiável e mais desenvolvido em negociação quantitativa. Em comparação com a estratégia de média móvel simples, esta estratégia pode capturar com mais precisão os pontos de mudança do mercado, aumentando assim a margem de lucro do sistema de negociação.

Além disso, esta estratégia estabelece condições de saída que podem efetivamente controlar o risco de perdas trazidas por uma tendência unidirecional. Isso contrasta com a estratégia tradicional de acompanhamento de tendências, que pode evitar a ocorrência de posições cobertas.

Análise de Riscos

O maior risco desta estratégia é que os sinais de negociação emitidos pelo indicador RSI podem ser mal interpretados. Nenhum indicador técnico pode determinar com 100% de precisão o movimento do mercado, e o indicador RSI não é uma exceção.

Para reduzir esse risco, esta estratégia estabelece um limite de perda. No entanto, em situações unilaterais, a probabilidade de o limite de perda ser acionado também é maior.

Direção de otimização

A estratégia ainda tem espaço para ser melhorada:

  1. A combinação de vários indicadores confirma o sinal de entrada, evitando a entrada errada causada pelo julgamento do indicador RSI sozinho. Por exemplo, pode ser incluído o indicador de média móvel, etc.

  2. Optimizar os parâmetros do RSI para encontrar os parâmetros de comprimento mais adequados para o RSI, tornando o julgamento de sobrecompra e sobrevenda mais preciso.

  3. Otimizar a configuração da linha de suspensão para evitar perdas ao máximo, mas também para garantir que a linha de suspensão não seja muito sensível.

Resumir

Em geral, esta estratégia de negociação automática baseada no RSI tem a vantagem de identificar efetivamente as condições de mercado de sobrecompra e sobrevenda. Através da entrada em posições de hipoteca e hipoteca durante os níveis extremos do RSI, visa lucrar com a reversão do mercado. O mecanismo de stop loss também ajuda a limitar as perdas em fortes tendências unidirecionais.

Código-fonte da estratégia
/*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="")