Estratégia de RSI Rápido de Noro

Autora:ChaoZhang, Data: 2023-09-12 11:40:02
Tags:

Este artigo detalhará a lógica por trás da Estratégia de Avanço RSI Rápido da Noro, explicará como os sinais de negociação são gerados e analisará as vantagens e os riscos potenciais desta estratégia.

I. Visão geral da estratégia

Esta estratégia usa principalmente o indicador RSI para gerar sinais de negociação, combinado com filtragem de velas e avanços min/max como julgamentos auxiliares, formando um sistema completo de decisão longa/curta.

II. Detalhes da estratégia

  1. Ajuste rápido do RSI

A estratégia usa um RSI rápido de comprimento 7 para capturar sinais de tendências de mercado através de oscilações rápidas do RSI.

  1. Filtragem de candelabro

A estratégia filtra os sinais RSI usando o tamanho do corpo do candelabro sma, considerando apenas os sinais RSI em candelabros com tamanho do corpo maior que o tamanho médio do corpo de 5 dias, evitando whipssaws.

  1. Min/Max avanços

A estratégia verifica se ocorreram avanços mínimos/máximos nos mmbars recentes, combinados com o nível do RSI para determinar reversões inferiores e desagregações superiores.

  1. Resumo do sinal de negociação

sinal longo: RSI cruza abaixo de 30, tamanho corporal excede o tamanho corporal médio, e min quebra suportes.

sinal curto: RSI cruza acima de 70, tamanho corporal excede o tamanho corporal médio, e resistenças de quebra máxima.

Signalização de saída: quando o RSI cruza os limites na direção oposta da posição.

III. Vantagens da Estratégia

  1. Os parâmetros RSI otimizados captam a mudança de tendência rapidamente.

  2. Combinando com candelabros e min/max evita whipssaws desnecessários.

  3. O mecanismo de stop loss sai quando o RSI ultrapassa os limites.

IV. Riscos da Estratégia

  1. RSI propenso a sinais falsos, precisa de confirmação auxiliar.

  2. Os parâmetros otimizados só podem corresponder a períodos específicos do mercado.

  3. O mecanismo de stop loss pode ser demasiado mecânico, incapaz de controlar grandes perdas num único stop loss.

V. Conclusão

Esta estratégia integra múltiplos indicadores técnicos para seguir uma tendência robusta. Mas os riscos de sobreajuste de backtest e stop loss devem ser observados, e o desempenho ao vivo deve ser avaliado com cautela.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.6", shorttitle = "Fast RSI str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usebc = input(true, defval = true, title = "Use BarColor Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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")

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

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

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

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > abody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm 
up3 = sma(bar, 2) == -1 and usebc
dn3 = sma(bar, 2) == 1 and usebc
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > abody / 2

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mais.