Estratégia de negociação rápida de brechas RSI para criptomoedas

Autora:ChaoZhang, Data: 2023-11-27 11:22:19
Tags:

img

Visão geral: Esta é uma estratégia de negociação de gap RSI rápida projetada para mercados de criptomoedas.

Princípios: A estratégia utiliza duas técnicas principais: indicadores rápidos do RSI e padrões de lacuna.

Em primeiro lugar, ele calcula um indicador RSI rápido baseado em apenas 7 velas. Isso torna o RSI mais sensível para detectar rapidamente condições de sobrecompra / sobrevenda. O limite superior do RSI é definido em 70 e o limite inferior em 30. Acima de 70 é considerado sobrecomprado, enquanto abaixo de 30 é considerado sobrevendido.

Em segundo lugar, detecta padrões de gaps em gráficos de velas. Gaps referem-se a espaços vazios entre o preço de abertura atual e o preço de fechamento anterior. Gaps sinalizam alta volatilidade e reversões de tendência potenciais.

Quando um gap para baixo aparece enquanto o RSI rápido mostra uma condição de sobrevenda, vá longo.

Além disso, a estratégia utiliza outros filtros, incluindo os indicadores SMA e Min/Max, para evitar sinais falsos.

Vantagens: A maior vantagem desta estratégia é a captura de voltas ultra rápidas de sobrecompra / sobrevenda e oportunidades de reversão de lacuna. É especialmente adequado para mercados de criptomoedas altamente voláteis para aproveitar mudanças rápidas de tendência. Em comparação com o RSI regular, o RSI rápido reage muito mais rapidamente, adequando-se à natureza de alta frequência da negociação de criptomoedas. Os filtros adicionais também ajudam a remover sinais falsos e melhorar a confiabilidade.

Riscos:
Os principais riscos que a estratégia enfrenta incluem:

  1. O RSI rápido pode ser excessivamente sensível, causando sinais falsos excessivos.

  2. As diferenças podem ser apenas oscilações normais de preços em vez de reversões reais.

  3. Durante períodos de baixa volatilidade, as posições podem ser mantidas inativas por períodos prolongados.

  4. Configurações incorretas de parâmetros como período Min/Max podem levar a sinais diluídos e baixa eficiência.

Em consequência, os seguintes métodos poderão ajudar a mitigar os riscos acima referidos:

  1. Ajustar parâmetros RSI rápido e aumentar o período RSI para torná-lo menos sensível.

  2. Aplique stop loss dinâmico para bloquear lucros.

  3. Otimizar a taxa de participação na estratégia. Limitar o envolvimento durante ambientes de baixa volatilidade.

  4. Testar e otimizar continuamente os parâmetros para garantir configurações robustas.

Reforço: As principais direcções de otimização incluem:

  1. Explore outros indicadores como MACD, KDJ combinados com lacunas para melhorar a precisão.

  2. Construir mecanismos adaptativos de stop loss baseados na volatilidade do mercado.

  3. Incorporar indicadores de volume como OBV para confirmar a reversão após as lacunas.

  4. Otimizar parâmetros de filtro como período Min/Max para descobrir as melhores configurações para reduzir os falsos sinais.

  5. Pesquise a adaptabilidade dos parâmetros em diferentes ativos criptográficos.

Estes esforços poderiam melhorar significativamente a estabilidade, a adaptabilidade e a fiabilidade da estratégia.

Conclusão: Em resumo, a estratégia de negociação de gap RSI rápida é uma abordagem eficiente projetada explicitamente para mercados de criptomoedas voláteis.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.5", shorttitle = "Fast RSI str 1.5", overlay = true)

//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")
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 
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
    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
    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.