Estratégia de recuperação da média móvel RSI bidirecional


Data de criação: 2023-10-23 15:46:33 última modificação: 2023-10-23 15:46:33
cópia: 0 Cliques: 671
1
focar em
1617
Seguidores

Estratégia de recuperação da média móvel RSI bidirecional

Visão geral

A estratégia de retorno de equilíbrio de RSI bidirecional é uma estratégia de acompanhamento de tendências que usa dois indicadores RSI de diferentes períodos de tempo para identificar situações de sobrevenda e sobrevenda. A estratégia visa lucrar com o excesso de sobrevenda e a falta de sobrevenda. A estratégia usa uma média móvel asynchronous e suave, um indicador RSI e um filtro de cor de abertura para identificar oportunidades de negociação.

Estratégia Lógica

A estratégia usa dois indicadores RSI com diferentes períodos, um no gráfico de 5 minutos e outro no gráfico de 1 hora. Para o indicador RSI, o nível de sobrevenda é considerado abaixo de 30 e o nível de sobrevenda é superior a 70.

Ele rastreia os valores do RSI, procurando quando o RSI permanece em um período contínuo de sobrevenda ou sobrecompra, indicando uma expansão de sobrevenda ou sobrecompra.

Além disso, ele usa uma média móvel asynchronous suave para verificar a linha K vermelha ou verde de um determinado período antes de entrar em uma negociação para confirmar a direção da tendência. O filtro de cor da posição ajuda a evitar falsos sinais.

Quando o RSI e as condições de variação e de média móvel são satisfeitas, a estratégia faz mais após a sobrevenda, e menos após a sobrevenda, e o preço de aposta volta à linha de equilíbrio.

Para evitar a manutenção da posição durante a noite, deve-se liquidar a posição no final do dia.

Análise de vantagens

  • Identificação de overbought e oversold usando múltiplos timeframes
  • A média móvel de filtragem de ruído de deslizamento e identificação da direção da tendência
  • Filtros de cores para evitar sinais falsos
  • Regras de abertura e fechamento de posição definidas de acordo com dois indicadores
  • Risco de controle de liquidação diária

Análise de Riscos

  • Se a tendência forte continuar, o RSI pode sofrer uma oscilação depois de um sinal de sobrevenda
  • A brecha no mercado pode desencadear um stop loss
  • O atraso da média móvel pode atrasar a abertura de posições e, assim, perder o mercado.
  • Os ganhos que podem ser obtidos ao desistir de uma posição durante a noite antes do final do dia

Direção de otimização

  • Adicionar filtros adicionais, como volume de transação ou taxa de flutuação, para confirmar o sinal
  • Optimizar o ciclo RSI e os parâmetros do nível de sobrecompra e sobrevenda
  • Considere o controle de posição dinâmico com base na volatilidade
  • Teste para parar, parar e sair, em vez de fechar antes do fim do dia
  • Teste o efeito em diferentes variedades e ajuste os parâmetros

Resumir

A estratégia de retorno de linha de equilíbrio de RSI bidirecional usa uma metodologia de regularização da dinâmica de negociação. Através de uma combinação de dois quadros de tempo, indicadores de sobrecompra e sobrevenda, análise de forma de linha K e filtros de abertura de posição, o objetivo é identificar oportunidades de retorno de linha de equilíbrio de alta probabilidade.

Código-fonte da estratégia
/*backtest
start: 2023-09-01 00:00:00
end: 2023-09-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Gidra
//2018

//@version=2
strategy(title = "Gidra's Vchain Strategy v0.1", shorttitle = "Gidra's Vchain Strategy v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiperiod = input(14, defval = 14, minval = 2, maxval = 100, title = "RSI period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI limit")
rsibars = input(3, defval = 3, minval = 1, maxval = 20, title = "RSI signals")
useocf = input(true, defval = true, title = "Use Open Color Filter")
openbars = input(2, defval = 2, minval = 1, maxval = 20, title = "Open Color, Bars")
showrsi = input(true, defval = true, title = "Show indicator RSI")
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")


//Heikin Ashi Open/Close Price
o=open
c=close
h=high
l=low
haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))
col=haopen>haclose ? red : lime
plotcandle(haopen, hahigh, halow, haclose, title="heikin", color=col)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0

//RSI condition
rsidnok = highest(rsidn, rsibars) == 1? 1 : 0
rsiupok = highest(rsiup, rsibars) == 1? 1 : 0

//Color Filter
bar = haclose > haopen ? 1 : haclose < haopen ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
openrbarok = sma(gbar, openbars) == 1 or useocf == false
opengbarok = sma(rbar, openbars) == 1 or useocf == false

//Signals
up = openrbarok and rsidnok
dn = opengbarok and rsiupok

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Indicator RSI
colbg = showrsi == false ? na : rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

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

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, 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()