Estratégia de avanço duplo do RSI

Autora:ChaoZhang, Data: 2023-12-27 14:33:15
Tags:

img

Resumo

A estratégia de ruptura dupla do RSI é uma estratégia de negociação algorítmica que identifica pontos de reversão de preços usando o indicador RSI. Ela gera sinais de negociação comparando o indicador RSI com valores de limiar superior e inferior pré-definidos para determinar se o mercado está sobrecomprado ou sobrevendido.

Estratégia lógica

Esta estratégia baseia-se principalmente no indicador RSI para julgar a condição do mercado. O indicador RSI é calculado com base nas mudanças nos preços de fechamento durante um determinado período, refletindo o impulso de compra e venda do estoque. Quando o RSI cruza acima do limiar superior pré-definido (default 75), ele indica que o estoque entrou na zona de supercompra. Quando o RSI cai abaixo do limiar inferior pré-definido (default 25), ele indica que o estoque entrou na zona de supervenda.

As regras de julgamento são as seguintes:

  1. Quando o RSI ultrapassar o limiar superior, vá para curto;
  2. Quando o RSI cruzar abaixo do limiar inferior, vá longo;
  3. Fechar posição quando se alcança o stop loss ou o take profit.

A sua lógica de negociação é simples e clara, com configurações razoáveis de parâmetros de referência, um grande espaço de configuração e é adequada para captar tendências maiores no mercado.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Uma lógica simples que seja fácil de compreender e implementar;
  2. Configurações razoáveis de parâmetros de referência que possam ser personalizadas;
  3. Lógicas de negociação reversa configuráveis que possam responder de forma flexível às condições de mercado;
  4. Pode identificar eficazmente os pontos de inversão dos preços e capturar as principais tendências.

Em geral, com configurações razoáveis de parâmetros de referência, implementação simples e capacidade de determinar efetivamente as inversões de preços através do RSI, esta estratégia é adequada para a captura de tendências de médio a longo prazo e é fácil de compreender e usar como uma estratégia quantitativa.

Análise de riscos

Embora esta estratégia seja relativamente simples e fiável, não podemos ignorar os riscos potenciais que ela enfrenta:

  1. Relativamente alta probabilidade de os indicadores RSI desencadearem sinais falsos.
  2. Possibilidade de stop loss contínuo num mercado em tendência.
  3. O RSI é incapaz de determinar efetivamente as tendências de variação, levando a maiores perdas neste ambiente.

Para controlar os riscos, precisamos prestar atenção aos seguintes aspectos:

  1. Ajustar adequadamente os parâmetros para evitar taxas excessivas de erro de julgamento.
  2. Confirmar sinais de negociação com outros indicadores para melhorar a precisão.
  3. Aumentar o rácio de lucro e reduzir o tamanho da perda de parada única.
  4. Evite negociar em mercados variados.

Orientações de otimização

Considerando que os principais riscos enfrentados por esta estratégia são erros de avaliação de reversão e perdas em mercados variados, podemos otimizar a partir dos seguintes aspectos:

  1. Os indicadores como o KDJ e o MACD podem desempenhar um papel de filtragem para evitar julgamentos errados.
  2. Aumentar o limiar para os montantes de perda de parada única.
  3. Defina limites de frequência de posições abertas. Adicione uma lógica que restrinja as entradas a uma ou N vezes por determinado período para controlar a abertura de posições excessivamente frequente.
  4. Estabelecer avaliações das condições do mercado. Garantir que a estratégia só funcione em mercados de tendência, evitando mercados variados, o que pode otimizar significativamente a relação risco/recompensação da estratégia.

Conclusão

Em resumo, a estratégia de ruptura dupla do RSI é uma estratégia quantitativa simples e prática. Ela identifica inversões de preços através do RSI para alcançar uma tendência simples. Embora existam certos riscos de erro de julgamento, otimizações como sintonização de parâmetros, filtragem de sinal podem ajudar a mitigar isso e permitir que ela desempenhe um papel importante na captura de tendências de médio a longo prazo. Sua lógica é direta, tornando-a adequada para quantes iniciantes se referirem e aprenderem.


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RSI Algo", overlay=true)

// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

time_cond = true


myPeriod = input(defval=14, type=input.integer, title="Period")
myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold")
myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold")
myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim")
myLineToggle = input(defval=true, type=input.bool, title="Show Lines")
myLabelToggle = input(defval=true, type=input.bool, title="Show Labels")
myRSI=rsi(close, myPeriod)
buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond
sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond
myPosition = 0
myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0
trendColor = buy ? color.red : sell ? color.green : na
plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false)
plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false)
plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false)

strategy.initial_capital = 50000
    //Calculate the size of the next trade
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(2,type=input.float,title="Risk %")/100           //risk % per trade
isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...")


stop = input(250, title="stop loss pips")
tp = input(2500, title="take profit pips")
if(isTwoDigit)
    stop := stop/100
    
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = 1
    
strategy.entry("long",1,size,when=buy and myPosition[1]==1 )
strategy.entry("short",0,size,when=sell and myPosition[1]==0)

strategy.exit("exit_long","long",loss=stop, profit=tp)      //Long exit (stop loss)
strategy.exit("exit_short","short",loss=stop, profit=tp)      //Short exit (stop loss)

//strategy.close_all(when= not time_cond)


Mais.