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


Data de criação: 2023-12-07 16:05:17 última modificação: 2023-12-07 16:05:17
cópia: 0 Cliques: 627
1
focar em
1619
Seguidores

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

Visão geral

Esta estratégia foi desenvolvida com base no indicador StochRSI. A estratégia usa principalmente o indicador StochRSI para avaliar o excesso de compra e venda, em combinação com o indicador RSI para filtrar alguns sinais falsos, fazer um vazio quando o indicador StochRSI mostra uma área de sobrevenda e fazer mais quando mostra uma área de sobrevenda, para obter lucro.

Princípio da estratégia

Esta estratégia usa principalmente o indicador StochRSI para determinar as áreas de sobrevenda do mercado. O indicador StochRSI é composto por linhas K e D, onde a linha K reflete o valor atual do RSI em um período recente. O valor da linha K é a média móvel da linha K.

Concretamente, a estratégia primeiro calcula o valor do indicador RSI de comprimento 14, e depois aplica o indicador StochRSI no indicador RSI. O parâmetro de configuração do indicador StochRSI é de comprimento 14, a linha de ciclo de smoothing K é 3, e a linha D é 3. Quando a linha K atravessa a área de oversold definida pelo usuário (default 1), faz mais; Quando a linha K atravessa a área de oversold definida pelo usuário (default 99), faz vazio.

Além disso, a estratégia também define os parâmetros de stop loss e stop loss. O parâmetro de stop loss é o padrão de 10000; o stop loss é definido como uma curva trailing stop, com um número de trailing points padrão de 300 e um deslocamento de 0 segundo os parâmetros.

Análise de vantagens

  1. O uso do Stoch RSI para determinar áreas de sobrecompra e sobrevenda é mais confiável do que o RSI isolado
  2. Combinação de sinais de filtragem RSI para evitar falsas rupturas
  3. Configurar o risco de controle do mecanismo de parada de danos

Análise de Riscos

  1. A probabilidade de um falso sinal de cabeça no StochRSI
  2. O que é necessário é um parâmetro de overbought/oversold razoavelmente definido, caso contrário, a operação será errada.
  3. Um ponto de parada pequeno demais pode ser bloqueado e um ponto de parada grande demais pode gerar ganhos limitados.

Para os riscos acima, pode-se definir um ciclo de parâmetros mais longo ou considerar o uso em combinação com outros indicadores para filtrar sinais, ajustar os parâmetros de sobrevenda para adaptar-se a diferentes mercados e testar diferentes parâmetros de stop-loss.

Direção de otimização

  1. Pode ser considerado o uso em combinação com outros indicadores, como MACD, linhas de Brin e outros, para filtrar falsos sinais
  2. Pode testar diferentes configurações de parâmetros de ciclo para adaptar-se a mais situações de mercado
  3. Optimizar o ponto de parada de perda, testando várias vezes no feedback para encontrar o parâmetro ideal

Resumir

Esta estratégia baseia-se no indicador StochRSI para determinar as áreas de sobrevenda e sobrevenda. Em comparação com o indicador RSI isolado, o StochRSI combina a idéia do KDJ para determinar o ponto de inflexão com mais precisão. Ao mesmo tempo, combina o RSI para filtrar os falsos sinais e definir o risco de controle de parada de perda.

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