Estratégia de RSI de média móvel de intervalo sazonal

Autora:ChaoZhang, Data: 2023-10-27 16:04:21
Tags:

img

Resumo

Esta estratégia combina média móvel e índice de força relativa (RSI), dois indicadores técnicos, para capturar características cíclicas sazonais e gerar sinais de negociação. A vantagem desta estratégia é que pode identificar tendências sazonais muito claramente, mas também tem o risco de ser enganado por sinais errados.

Estratégia lógica

A estratégia primeiro calcula a média móvel de um determinado período n para capturar a direção da tendência de médio a longo prazo. Em seguida, calcula o indicador RSI da média móvel para julgar se ele está atualmente em um estado de sobrecompra ou sobrevenda.

Quando o RSI cruza acima da faixa inferior, um sinal de compra é gerado, indicando um estado de sobrevenda, e uma posição longa pode ser aberta. Quando o RSI cruza abaixo da faixa superior, um sinal de venda é gerado, indicando um estado de sobrecompra, e uma posição curta pode ser aberta. Além disso, a estratégia também define o intervalo para o mês e a data para negociar apenas durante meses e dias específicos, a fim de capturar padrões sazonais.

Vantagens da estratégia

  • Utilize a média móvel para determinar a tendência principal e o RSI para julgar cenários de sobrecompra/supervenda, combinando indicadores duplos para melhorar a precisão

  • A definição de um intervalo mensal e de datas pode identificar eficazmente as tendências sazonais e captar essas oportunidades comerciais

  • Ajustes flexíveis dos parâmetros do RSI para ajustar a sensibilidade na determinação dos níveis de sobrecompra/supervenda

  • Parâmetros de média móvel personalizáveis para adaptar a sensibilidade na avaliação das principais tendências

Riscos e soluções

  • O risco de ser enganado por sinais errados, por exemplo, inversões de tendência desencadeadas por eventos não sazonais, pode gerar sinais comerciais inadequados.

  • A solução é encurtar adequadamente o período da média móvel para capturar as voltas da tendência mais rapidamente.

  • A solução consiste em determinar um intervalo sazonal mais preciso com base em testes de dados históricos.

  • A solução é definir um intervalo mais amplo para evitar ser enganado por pequenas flutuações.

Orientações de otimização

  • Introduzir outros indicadores auxiliares, por exemplo, oscilador estocástico, para definir condições de filtragem mais rigorosas e reduzir os sinais errados.

  • Testar mais combinações de parâmetros diferentes para encontrar parâmetros ideais e melhorar o desempenho da estratégia, por exemplo, ajustar o período da média móvel, as faixas do RSI, etc.

  • Utilize métodos de otimização de parâmetros para pesquisar automaticamente o espaço de parâmetros para conjuntos de parâmetros ideais.

  • Coletar mais dados históricos e utilizar o aprendizado de máquina para treinar e otimizar regras de estratégia.

  • Considere adicionar estratégias de stop loss/take profit para otimizar a gestão de dinheiro.

Resumo

Esta estratégia combina a média móvel e o RSI, com a adição de julgamentos sazonais, para formar um sistema relativamente completo de tendência e identificação de sobrecompra / sobrevenda. A vantagem reside em sua capacidade de reconhecer claramente padrões sazonais e capitalizar tais oportunidades de negociação.


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = " RSI of MA Strategy ",shorttitle="MARSI Strategy",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,initial_capital=1)



lengthofma = input(15,minval=1,title="Length of MA")
len = input(14, minval=1, title="Length")
upperband = input(70,minval=1,title='Upper Band for RSI')
lowerband = input(30,minval=1,title="Lower Band for RSI")

src=sma(close,lengthofma)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=purple)

band1 = hline(upperband)
band0 = hline(lowerband)
fill(band1, band0, color=purple, transp=90)



longCond =  crossover(rsi,lowerband)

shortCond =  crossunder(rsi,upperband)




monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)

if (  longCond ) 
    strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND",  comment="LONG")
    
else
    strategy.cancel(id="LONG")
    



if ( shortCond ) 

    strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND",  comment="SHORT")
else
    strategy.cancel(id="SHORT")





Mais.