
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.
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.
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.
/*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()