Estratégia de negociação da Nifty baseada no indicador RSI

Autora:ChaoZhang, Data: 2024-01-25 12:23:39
Tags:

img

Resumo

Esta estratégia projeta uma estratégia de investimento quantitativo para a negociação do índice Nifty com base no indicador Relative Strength Index (RSI).

Princípio da estratégia

A estratégia define o RSI de 2 períodos como sinais de negociação. Vai longo quando o RSI cruza acima de 20 e fecha a posição quando o RSI cruza abaixo de 70. Isso capta as oportunidades de ajuste de curto prazo do índice.

A lógica é: quando o RSI está abaixo de 20, indica estado de sobrevenda, implicando que o ativo está subestimado e o rebote está à frente. Quando o RSI cruza acima de 20, vá longo. Quando o RSI está acima de 70, indica estado de sobrecompra, implicando que o ativo está sobrevalorizado e o callback está à frente. Quando o RSI cruza abaixo de 70, feche a posição.

Análise das vantagens

Como estratégia que identifica oportunidades de sobrecompra/supervenda a curto prazo com indicadores, as principais vantagens são:

  1. O princípio é simples e claro, fácil de compreender e validar
  2. Poucos parâmetros de indicador, fáceis de otimizar e ajustar
  3. Buscar retornos excessivos a curto prazo, alinha-se com a filosofia de negociação do scalping
  4. Período de negociação personalizável, adapta-se às diferentes expectativas

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. Incapaz de captar tendências de longo prazo, provavelmente perdendo grandes movimentos
  2. Excessiva dependência da otimização dos parâmetros, risco de sobreajuste
  3. Nenhum mecanismo de stop loss para controlar efetivamente as perdas
  4. A frequência das negociações afeta o período de detenção, aumentando os custos de transacção

Para controlar os riscos acima referidos, podem ser realizadas otimizações nos seguintes aspectos:

  1. Incorporar indicadores de tendência para identificar movimentos a longo prazo
  2. Adotar a Análise Walk Forward para evitar o sobreajuste
  3. Estabelecer pontos de stop loss para um stop loss oportuno
  4. Ajustar adequadamente os parâmetros de negociação para controlar a frequência das negociações

Orientações de otimização

Principais aspectos para a otimização da estratégia:

  1. Otimizar os parâmetros do RSI para encontrar combinações ótimas de parâmetros
  2. Adicionar um mecanismo de stop loss para limitar a retirada máxima
  3. Incorporar médias móveis, etc., para avaliar a tendência a longo prazo
  4. Adicionar módulo de dimensionamento de posição para otimizar a alocação de posição
  5. Adicionar direitos autorais quantitativos para ajustar automaticamente os parâmetros

Conclusão

Esta estratégia projeta uma estratégia de negociação de curto prazo baseada no indicador RSI, capturando sinais de sobrecompra / sobrevenda para compras baixas e vendas altas. A estratégia tem um princípio simples e é fácil de implementar, mas tem certo grau de negociação frequente, incapacidade de identificar tendências de longo prazo, etc. Melhorias futuras podem ser feitas na otimização dos parâmetros do RSI, adicionando stop loss, combinando tendência de julgamento, etc., para tornar a estratégia mais estável e confiável.


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

//@version=4
strategy("RSI Strategy", overlay=true,pyramiding = 1000)
rsi_period = 2
rsi_lower = 20
rsi_upper = 70

rsi_value = rsi(close, rsi_period)
buy_signal = crossover(rsi_value, rsi_lower)
sell_signal = crossunder(rsi_value, rsi_upper)
current_date1 =  input(defval=timestamp("01 Nov 2009 00:00 +0000"), title="stary Time", group="Time Settings")

current_date =  input(defval=timestamp("01 Nov 2023 00:00 +0000"), title="End Time", group="Time Settings")
investment_amount = 100000.0
start_time = input(defval=timestamp("01 Dec 2018 00:00 +0000"), title="Start Time", group="Time Settings") 
end_time = input(defval=timestamp("30 Nov 2023 00:00 +0000"), title="End Time", group="Time Settings")

in_time = time >= start_time and time <= end_time
// Variable to track accumulation.
var accumulation = 0.0
out_time = time >= end_time 

if (buy_signal )
    strategy.entry("long",strategy.long,qty= 1) 
    accumulation += 1
if (out_time)
    strategy.close(id="long")

plotshape(series=buy_signal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup)
plotshape(series=sell_signal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown)

plot(rsi_value, title="RSI", color=color.blue)
hline(rsi_lower, title="Lower Level", color=color.red)



plot(strategy.opentrades, style=plot.style_columns, 
     color=#2300a1, title="Profit first entry")
plot(strategy.openprofit, style=plot.style_line, 
     color=#147a00, title="Profit first entry")
// plot(strategy.position_avg_price, style=plot.style_columns, 
//      color=#ca0303, title="Profit first entry")
// log.info(strategy.position_size * strategy.position_avg_price)


Mais.