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:
Calcular os valores do RSI para os períodos 2, 7 e 14, respectivamente.
Quando o RSI-2 está abaixo de 10, o RSI-7 abaixo de 20 e o RSI-14 abaixo de 30, é identificado um fundo.
Quando o RSI-2 está acima de 90, o RSI-7 acima de 80 e o RSI-14 acima de 70, um topo é identificado.
Gerar sinais de compra/venda com base na unanimidade do RSI.
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()