Estratégia de inversão do ímpeto do RSI

Autora:ChaoZhang, Data: 2023-11-07 15:45:15
Tags:

img

Resumo

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.

Estratégia lógica

A estratégia é aplicada principalmente através das seguintes partes:

  1. Indicador RSI da Connors

    Calcula o RSI convencional, RSI Win Ratio e RSI Parisiense para obter o RSI de Connors como média.

  2. Indicador RSI rápido

    Utiliza mudanças de preço para calcular RSI rápido, refletindo ciclos ultra curto prazo.

  3. Filtro do corpo do candelabro

    Requer corpo de alta para longo e corpo de baixa para curto para evitar falhas.

  4. 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.

  5. 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.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. 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.

  2. Filtro do corpo do candelabro

    Negociar apenas em breakouts corporais pode reduzir as perdas de falsos breakouts.

  3. 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.

  4. Simples e intuitivo

    O RSI e o corpo do candelabro são indicadores básicos, lógica fácil de entender.

  5. Fácil de implementar

    Utiliza apenas indicadores integrados, requer pouco código e é fácil de implementar.

Análise de riscos

Os principais riscos desta estratégia:

  1. Risco de reversão fracassada

    O preço continua a tendência original após o sinal de reversão, levando a perdas.

  2. Risco de mercado variável

    Sinais ineficazes frequentes desencadeados em mercados variados.

  3. Risco falso de fuga

    O filtro do corpo do candelabro não pode evitar completamente falhas.

  4. Risco de parâmetro

    Os parâmetros RSI inadequados podem deixar de realizar operações ou desencadear múltiplas operações ineficazes.

  5. Risco de condições especiais de mercado

    Os indicadores RSI podem falhar e gerar sinais incorretos em condições especiais de mercado.

Orientações de otimização

A estratégia pode ser otimizada a partir dos seguintes aspectos:

  1. Adicionar mecanismos de stop loss

    Otimizar as estratégias de stop loss para paradas mais razoáveis, reduzindo as perdas de negociação única.

  2. Integrar múltiplos indicadores

    Adicione filtros como MACD e KD para tornar os sinais mais confiáveis.

  3. Adicionar filtros de probabilidade

    Combinar tendência, análise de suporte/resistência para evitar operações de baixa probabilidade.

  4. Optimize as configurações dos parâmetros

    Testar parâmetros em diferentes produtos e prazos para encontrar valores ótimos.

  5. Evitar condições especiais de mercado

    Identificar e evitar negociações em condições especiais de mercado para evitar grandes perdas.

Conclusão

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()

Mais.