
A estratégia de reversão do RSI combina o indicador RSI com a direção da entidade da linha K para identificar o fenômeno de sobrevenda e sobrevenda. A estratégia usa simultaneamente o RSI convencional e o RSI rápido, e em conjunto com a filtragem da entidade da linha K, para identificar efetivamente oportunidades de reversão.
A estratégia é implementada principalmente através das seguintes partes:
Calcule o RSI convencional, o RSI da probabilidade de vitória e o RSI do Paris-Charles, tomando a média dos três como o RSI de Connors.
O RSI rápido é calculado usando a variação de preços, refletindo o ciclo ultra curto.
O que é necessário é fazer mais fios sólidos e cinéticos, para evitar falsas rupturas.
Quando o RSI de Connors está abaixo de 20, o RSI rápido está abaixo de 25, e a linha de sol aparece, faça mais.
Quando o RSI de Connors é superior a 80, o RSI rápido é superior a 75, a linha de fundo aparece, fazendo um vazio.
A entidade retira-se quando a parada de perdas se desloca.
Através do RSI de Connors para determinar o ponto de reversão da tendência da linha longa, o RSI rápido para determinar o ponto de reversão da linha curta, a entidade da linha K para garantir a eficácia da ruptura, para que possa encontrar efetivamente oportunidades de reversão e abrir posições de reversão em tempo hábil para os supermercados.
A estratégia tem as seguintes vantagens:
O RSI de Connors reflete um ciclo de linha longa e o RSI rápido reflete um ciclo de linha curta, combinando os dois, pode-se determinar com mais precisão o ponto de reversão.
A operação somente em caso de brecha real pode reduzir os prejuízos causados por uma falsa brecha.
Os parâmetros do RSI, o tipo de negociação e o período de negociação podem ser ajustados livremente para adaptar-se a diferentes mercados.
O RSI e a linha K são indicadores básicos e a lógica da estratégia é simples e fácil de entender.
O programa é baseado em um algoritmo que usa apenas indicadores embutidos, menos código e menos dificuldade de implementação.
A estratégia enfrenta os seguintes principais riscos:
O preço continuou a funcionar na tendência original após o sinal de reversão, resultando em prejuízos.
A falha foi causada por uma série de sinais repetitivos que causaram inúmeras transações inválidas.
A filtragem física não evita completamente a ocorrência de falhas.
Os parâmetros do RSI estão mal definidos, podendo causar oportunidades perdidas ou inúmeras transações inválidas.
Em situações especiais, o indicador RSI falha, gerando um sinal de erro.
A estratégia pode ser melhorada em vários aspectos:
Optimizar a estratégia de stop loss para torná-la mais razoável e reduzir os prejuízos individuais.
Adição de filtros de MACD, KD e outros indicadores para tornar o sinal mais confiável.
Combinando tendências, resistência de suporte e outras probabilidades de julgamento, evite negociações de baixa probabilidade.
Teste de parâmetros para diferentes tipos e períodos de negociação para encontrar o melhor parâmetro.
Identificar situações especiais, suspender a negociação e evitar grandes perdas.
A estratégia de reversão do RSI dinâmica aumenta a eficácia do sinal através da reversão do RSI de Connors e do RSI rápido, em combinação com a filtragem de entidades da linha K. A estratégia possui vantagens como portfólio de indicadores, flexibilidade de ajuste de parâmetros, capacidade de capturar oportunidades de reversão e intervenção oportuna na negociação em caso de sobrevenda.
/*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()