RSI Mean Reversion Estratégia de negociação quantitativa baseada no cruzamento da média do RSI

Autora:ChaoZhang, Data: 2023-12-01 16:59:26
Tags:

img

Resumo

Esta estratégia determina os sinais de compra e venda com base no cruzamento entre o indicador RSI e sua média móvel, pertencente a estratégias de negociação de curto prazo.

Princípio da estratégia

  1. Calcular o indicador RSI com um período de 40 bares
  2. Calcular o MA do indicador RSI, com período de 10 bares
  3. Gerenciar sinal de compra quando o RSI for inferior à sua MA multiplicada por um coeficiente (intervalo de negociação 1%)
  4. Gerenciar sinal de venda quando o RSI for superior ao seu MA multiplicado por um coeficiente (1+intervalo de negociação%)
  5. Distância de intervalo de negociação por defeito é 5, o que significa 5% acima ou abaixo do MA para acionar sinais
  6. Determinação da saída quando o RSI estiver acima da sua MA e acima do nível 50

Análise das vantagens

Esta é uma estratégia típica de reversão média, utilizando as propriedades de sobrecompra/supervenda do indicador RSI para determinar os sinais de negociação.

  1. Adopção de um indicador RSI para avaliar a estrutura do mercado, que é bastante fiável
  2. O filtro MA evita trocas desnecessárias e aumenta a estabilidade
  3. Frequência de controlo do intervalo de negociação ajustável
  4. Lógica simples e fácil de entender

Em resumo, trata-se de uma estratégia de negociação de curto prazo simples e prática.

Análise de riscos

Há alguns riscos a ter em conta:

  1. Possibilidade de RSI dar sinais falsos, precisa assistir o padrão
  2. A definição inadequada do intervalo de negociação pode conduzir a excesso de negociação ou a oportunidades perdidas
  3. Frequência de negociação elevada, necessidade de considerar os custos de transacção
  4. Baseado apenas num único indicador, propenso a anomalias de mercado

Estes riscos podem ser atenuados através do ajuste dos parâmetros, da adição de filtros, etc.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar mais filtros como volume para garantir sinais apenas em pontos de virada
  2. Adicionar stop loss para controlar a perda de uma única transação
  3. Otimizar a gama de negociação para equilibrar a frequência e a taxa de lucro
  4. Utilize o aprendizado de máquina para encontrar conjuntos de parâmetros ideais
  5. Adicionar modelos de conjunto para integrar resultados de sub-estratégias

O aumento significativo do desempenho pode ser alcançado através de combinações de múltiplos indicadores, gestão de perdas de parada, otimização de parâmetros, etc.

Resumo

Em resumo, esta é uma estratégia de negociação de curto prazo muito típica e prática. Ele capitaliza os níveis de sobrecompra / sobrevenda do RSI para determinar entradas e saídas, com filtro MA adicional. A lógica é simples e clara, os parâmetros flexíveis, fáceis de implementar. Existem certos riscos de mercado, mas podem ser abordados através de mecanismos de entrada / saída refinados, ajuste de parâmetros, etc. Quando combinado com indicadores mais técnicos e técnicas de gerenciamento de risco, essa estratégia pode se tornar uma estratégia de curto prazo relativamente estável.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Mais.