Estratégia de negociação de reversão baseada no RSI de vários períodos

Autora:ChaoZhang, Data: 14 de setembro de 2023 20:42:55
Tags:

Este artigo explica em detalhes uma estratégia quantitativa de negociação que utiliza indicadores de RSI de vários períodos para identificar pontos de reversão.

I. Lógica da estratégia

A estratégia utiliza 3 grupos de indicadores RSI com diferentes parâmetros:

  1. Calcular os valores do RSI para os períodos 2, 7 e 14, respectivamente.

  2. Quando o RSI-2 está abaixo de 10, o RSI-7 abaixo de 20 e o RSI-14 abaixo de 30, é identificado um fundo.

  3. Quando o RSI-2 está acima de 90, o RSI-7 acima de 80 e o RSI-14 acima de 70, um topo é identificado.

  4. Gerar sinais de compra/venda com base na unanimidade do RSI.

  5. Parâmetros ajustáveis pré-definidos para o consenso dos indicadores, controlo da frequência do sinal.

Ao analisar os indicadores RSI em períodos coletivos, a precisão do ponto de reversão pode ser melhorada.

II. Vantagens da Estratégia

A maior vantagem é que o uso de análise RSI de vários prazos melhora a identificação de pontos-chave e filtra sinais falsos.

Outra vantagem é a flexibilidade para ajustar os parâmetros de consenso e adaptar-se aos diferentes ambientes de mercado.

Por último, as combinações do RSI também fornecem mais opções de ajuste.

III. Riscos potenciais

No entanto, existem os seguintes riscos:

Em primeiro lugar, o próprio RSI tem um atraso inerente na identificação de reversões.

Em segundo lugar, os múltiplos indicadores introduzem uma ambigüidade de sinais que exige regras claras.

Por fim, os negócios de reversão têm uma taxa de falhas que exigem preparação psicológica.

IV. Resumo

Em resumo, este artigo explicou uma estratégia quantitativa de identificação de reversões com base na análise do RSI de vários períodos. Melhora o reconhecimento de pontos de virada do mercado julgando a unanimidade do RSI. Mas riscos como atraso e sinais errados precisam ser gerenciados.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Triple RSI Top/Bottom v1.1", shorttitle = "3RSI Top/Bottom 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
indi = input(3, defval = 3, minval = 1, maxval = 3, title = "Indicators")
accuracy = input(3, defval = 3, minval = 1, maxval = 10, title = "accuracy")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI-2
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//RSI-7
middleup = rma(max(change(close), 0), 7)
middledown = rma(-min(change(close), 0), 7)
middlersi = middledown == 0 ? 100 : middleup == 0 ? 0 : 100 - (100 / (1 + middleup / middledown))

//RSI-14
slowup = rma(max(change(close), 0), 14)
slowdown = rma(-min(change(close), 0), 14)
slowrsi = slowdown == 0 ? 100 : slowup == 0 ? 0 : 100 - (100 / (1 + slowup / slowdown))

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
acc = 10 - accuracy
signalup1 = fastrsi < (5 + acc) ? 1 : 0
signalup2 = middlersi < (10 + acc * 2) ? 1 : 0
signalup3 = slowrsi < (15 + acc * 3) ? 1 : 0

signaldn1 = fastrsi > (95 - acc) ? 1 : 0
signaldn2 = middlersi > (90 - acc * 2) ? 1 : 0
signaldn3 = slowrsi > (85 - acc * 3) ? 1 : 0

up = signalup1 + signalup2 + signalup3 >= indi
dn = signaldn1 + signaldn2 + signaldn3 >= indi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mais.