A estratégia de reversão do ímpeto do RSI identifica condições de sobrecompra e sobrevenda combinando indicadores do RSI e direções do corpo do candelabro para negociação de reversão.
A estratégia é aplicada principalmente através das seguintes partes:
Indicador RSI da Connors
Calcula o RSI convencional, RSI Win Ratio e RSI Parisiense para obter o RSI de Connors como média.
Indicador RSI rápido
Utiliza mudanças de preço para calcular RSI rápido, refletindo ciclos ultra curto prazo.
Filtro do corpo do candelabro
Requer corpo de alta para longo e corpo de baixa para curto para evitar falhas.
Condições longas e curtas
Vai longo quando o RSI do Connors está abaixo de 20 e rápido abaixo de 25 com corpo de alta.
Vai curto quando o RSI do Connors for acima de 80 e rápido acima de 75 com corpo de baixa.
Saída de perdas de parada
Sai com stop loss quando o corpo do candelabro se vira.
Connors RSI identifica pontos de reversão de tendência de longo prazo, RSI rápido identifica reversões de curto prazo, e corpo de velas garante a validade de breakouts.
As vantagens desta estratégia incluem:
Combinação de indicadores de longo e curto prazo
Connors RSI reflete ciclos de longo prazo e RSI rápido reflete ciclos de curto prazo, combinando ambos pode identificar com precisão pontos de reversão.
Filtro do corpo do candelabro
Negociar apenas em breakouts corporais pode reduzir as perdas de falsos breakouts.
Parâmetros ajustáveis
Os parâmetros do RSI, os produtos de negociação e os prazos de negociação podem ser ajustados livremente para atender a diferentes mercados.
Simples e intuitivo
O RSI e o corpo do candelabro são indicadores básicos, lógica fácil de entender.
Fácil de implementar
Utiliza apenas indicadores integrados, requer pouco código e é fácil de implementar.
Os principais riscos desta estratégia:
Risco de reversão fracassada
O preço continua a tendência original após o sinal de reversão, levando a perdas.
Risco de mercado variável
Sinais ineficazes frequentes desencadeados em mercados variados.
Risco falso de fuga
O filtro do corpo do candelabro não pode evitar completamente falhas.
Risco de parâmetro
Os parâmetros RSI inadequados podem deixar de realizar operações ou desencadear múltiplas operações ineficazes.
Risco de condições especiais de mercado
Os indicadores RSI podem falhar e gerar sinais incorretos em condições especiais de mercado.
A estratégia pode ser otimizada a partir dos seguintes aspectos:
Adicionar mecanismos de stop loss
Otimizar as estratégias de stop loss para paradas mais razoáveis, reduzindo as perdas de negociação única.
Integrar múltiplos indicadores
Adicione filtros como MACD e KD para tornar os sinais mais confiáveis.
Adicionar filtros de probabilidade
Combinar tendência, análise de suporte/resistência para evitar operações de baixa probabilidade.
Optimize as configurações dos parâmetros
Testar parâmetros em diferentes produtos e prazos para encontrar valores ótimos.
Evitar condições especiais de mercado
Identificar e evitar negociações em condições especiais de mercado para evitar grandes perdas.
A estratégia de reversão de impulso do RSI identifica reversões de longo e curto prazo usando o Connors RSI e o RSI rápido, com filtros de corpo de velas para aumentar a validade do sinal. As vantagens como combinações de indicadores e parâmetros ajustáveis permitem capturar reversões e negociar contra-tendência quando sobrecomprado ou sobrevendido.
/*backtest start: 2023-10-07 00:00:00 end: 2023-11-06 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, 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") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usecrsi = input(true, defval = true, title = "Use CRSI Strategy") usefrsi = input(true, defval = true, title = "Use FRSI Strategy") usemod = input(true, defval = true, title = "CRSI+FRSI Mode") limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit") usebod = input(true, defval = true, title = "Use Body-filter") usecol = input(true, defval = true, title = "Use Color-filter") 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") //CRSI rsilen = 3 streaklen = 2 lookback = 100 rsi = rsi(close,rsilen) upday = close > close[1] ? 1 : 0 downday = close < close[1] ? -1 : 0 upstreak = upday!=0 ? upstreak[1] + upday : 0 downstreak = downday!=0 ? downstreak[1] + downday : 0 streak = upstreak + downstreak streakrsi = rsi(streak,streaklen) roc = close/close[1] - 1 roccount = 0 for i=1 to lookback-1 roccount := roc[i]<roc ? roccount + 1 : roccount crsi = (rsi + streakrsi + roccount) / 3 //Oscilator // rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue) // band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red) // band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green) // fill(band1, band0, color=purple, transp=90) //Fast RSI fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Color Filter bar = close > open ? 1 : close < open ? -1 : 0 gbar = bar == 1 or usecol == false rbar = bar == -1 or usecol == false //Signals up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if ((up1 or up2) and usemod == false) or (up1 and up2 and usemod) if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod) if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()