Estratégia de avanço rápido do RSI

Autora:ChaoZhang, Data: 2023-10-24 11:51:56
Tags:

img

Resumo

Esta estratégia implementa operações de avanço rápido com base no indicador RSI e na EMA dos corpos de velas.

Estratégia lógica

  1. Calcular o indicador RSI com o período 7 e utilizar o RMA para a aceleração.

  2. Calcular a EMA do tamanho do corpo do candelabro com o período 30 como referência para o tamanho do corpo.

  3. Se o RSI cruzar acima da linha limite (padrão 30) e o corpo da vela atual for maior que 1/4 do tamanho médio do corpo, vá longo.

  4. Se o RSI cruzar abaixo da linha limite (padrão 70) e o corpo da vela atual for maior que 1/4 do tamanho médio do corpo, vá curto.

  5. Se já estiver em posição, feche quando o RSI cruzar a linha limite.

  6. Parâmetros como comprimento do RSI, limite, preço de referência podem ser configurados.

  7. Parâmetros como período EMA do corpo, multiplicador chroot de posição aberta podem ser configurados.

  8. O número de cruzes RSI pode ser configurado.

Análise das vantagens

  1. Utilize o atributo de reversão do RSI para capturar reversões em tempo hábil.

  2. A RMA acelera a formação do RSI para inversões mais sensíveis.

  3. Filtrar pequenas consolidações de alcance com grandes corpos de candelabro.

  4. Os dados de backtest suficientes garantem a fiabilidade.

  5. Os parâmetros personalizáveis adaptam-se aos diferentes ambientes de mercado.

  6. Lógica simples e clara.

Análise de riscos

  1. O RSI tem um viés de backtest, desempenho real a ser validado.

  2. Os grandes organismos não podem filtrar completamente os mercados agitados.

  3. Os parâmetros padrão podem não se adequar a todos os produtos, sendo necessária otimização.

  4. A taxa de vitórias pode não ser alta, precisa de suportar perdas consecutivas mentalmente.

  5. Risco de falha no avanço, precisa de um stop loss oportuno.

Orientações de otimização

  1. Otimizar os parâmetros do RSI para diferentes períodos e produtos.

  2. Otimizar o período de EMA do corpo para suavizar o tamanho do corpo.

  3. Optimize o multiplicador de corpo para posições abertas para controlar a frequência de entrada.

  4. Adicione stop loss em movimento para garantir a taxa de vitória.

  5. Adicionar um filtro de tendência para evitar a negociação contra tendência.

  6. Otimizar a gestão do dinheiro para controlar os riscos.

Conclusão

Em resumo, esta é uma estratégia de reversão muito simples e direta. Utiliza tanto o atributo de reversão do RSI quanto o ímpeto de grandes corpos de velas para entrar rapidamente durante reversões de mercado. Embora os resultados do backtest pareçam bons, o desempenho real ainda não foi validado. A otimização de parâmetros e o controle de risco são necessários ao aplicá-lo.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars")
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), rsiperiod)
fastdown = rma(-min(change(rsisrc), 0), rsiperiod)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
ur = fastrsi > uplimit
dr = fastrsi < dnlimit
uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0
dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0

//Body
body = abs(close - open)
emabody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 4
dn = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 4
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

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

Mais.