Estratégia de negociação quantitativa baseada no StochRSI

Autora:ChaoZhang, Data: 2023-12-07 16:05:17
Tags:

img

Resumo

Esta estratégia é desenvolvida com base no indicador StochRSI. A estratégia usa principalmente o indicador StochRSI para julgar situações de sobrecompra e sobrevenda. Combinado com o indicador RSI para filtrar alguns sinais falsos, vá curto quando o indicador StochRSI mostra área de sobrecompra e vá longo quando mostra área de sobrevenda para obter lucros.

Princípio da estratégia

Esta estratégia aplica principalmente o indicador StochRSI para julgar áreas de sobrecompra e sobrevenda no mercado. O indicador StochRSI consiste na linha K e na linha D. A linha K reflete a posição do valor atual do RSI na faixa de preços do RSI durante um período recente. A linha D é a média móvel da linha K. Quando a linha K cruza acima da linha D, é uma área de sobrecompra e posições longas podem ser tomadas. Quando a linha K cai abaixo da linha D, é uma área de sobrevenda e posições curtas podem ser tomadas.

Especificamente, a estratégia primeiro calcula o valor do indicador RSI de 14 períodos e, em seguida, aplica o indicador StochRSI no indicador RSI. Os parâmetros do indicador StochRSI são definidos com um comprimento de 14, período de linha K suavizado de 3 e período de linha D suavizado de 3. Quando a linha K cruzar acima da área de sobrevenda definida pelo usuário (o padrão é 1), a posição longa será tomada. Quando a linha K cair abaixo da área de sobrecompra definida pelo usuário (o padrão é 99), a posição curta será tomada.

Além disso, os parâmetros de stop loss e take profit são definidos na estratégia.

Análise das vantagens

  1. Usar o indicador StochRSI para determinar áreas de sobrecompra e sobrevenda é mais confiável do que o indicador único RSI
  2. Filtragem de sinais com RSI evita falsos breakouts
  3. Estabelecimento de mecanismos de stop loss e take profit para controlar os riscos

Análise de riscos

  1. O indicador StochRSI pode apresentar sinais falsos
  2. Precisa de definir os parâmetros de sobrecompra e sobrevenda razoavelmente, caso contrário, isso causará mau funcionamento
  3. Se o ponto de stop loss for muito pequeno, é fácil ficar preso.

Para os riscos acima referidos, podem ser definidos parâmetros de ciclo mais longo ou considerar-se a utilização em combinação com outros indicadores para filtrar sinais, ajustar parâmetros de sobrecompra e sobrevenda para se adaptarem a diferentes mercados e testar diferentes parâmetros de stop loss e take profit.

Orientações de otimização

  1. Considere a utilização em combinação com outros indicadores, tais como MACD, Bollinger Bands etc para filtrar sinais falsos
  2. Teste diferentes configurações de ciclos de parâmetros para se adaptar a mais condições de mercado
  3. Otimizar o stop loss e tomar pontos de lucro por múltiplos backtesting para encontrar os parâmetros ideais

Resumo

Esta estratégia opera com base em áreas de sobrecompra e sobrevenda julgadas pelo indicador StochRSI. Em comparação com o único indicador RSI, o StochRSI combina a idéia de KDJ e pode julgar pontos de virada com mais precisão. Ao mesmo tempo, sinais falsos são filtrados pelo RSI e os riscos são controlados por stop loss e take profit. Ainda há grande espaço para otimização, pode ser combinado com outros indicadores ou configurações de parâmetros otimizadas.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version= 2
strategy("STOCHRSI JURE", overlay=false)
lengthrsi = input(10)
overSold = input( 1 )
overBought = input(99)

call_trail_stop = input(300)
call_trail_offset = input(0)
call_sl = input(10000)

price = ohlc4
vrsi = rsi(price, lengthrsi)

smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src = input(close, title="RSI Source")

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)


plot( k, color=blue, linewidth=1, title="K")
plot( d, color=red, linewidth=1, title="D")

if (crossover(k, overSold) ) 
    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND",  comment="BUY")
    strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)


if (crossunder(k, overBought) ) 
    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL")
    strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)
    

//if (  ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) )  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
//    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY")
//else
//    strategy.cancel(id="BUY")

//if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 
//    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL")
//else
//    strategy.cancel(id="SELL")
    
    
    

Mais.