
Chiến lược trả lời đường trung bình hai chiều của RSI là một chiến lược theo dõi xu hướng sử dụng chỉ số RSI của hai chu kỳ thời gian khác nhau để xác định tình trạng quá mua và quá bán. Chiến lược này được thiết kế để kiếm lợi nhuận bằng cách thực hiện nhiều hơn sau khi quá bán và giảm sau khi quá mua. Chiến lược này sử dụng đường trung bình di chuyển trơn tru, chỉ số RSI và bộ lọc màu mở vị trí để xác định cơ hội giao dịch.
Chiến lược này sử dụng hai chỉ số RSI có chu kỳ khác nhau để đặt một trên biểu đồ 5 phút và một trên biểu đồ 1 giờ. Đối với chỉ số RSI, mức quá bán được xác định dưới 30 và mức quá mua trên 70.
Nó sẽ theo dõi các giá trị RSI để tìm RSI trong một khoảng thời gian liên tục trong khu vực bán tháo hoặc mua tháo, cho thấy tình trạng bán tháo hoặc mua tháo mở rộng.
Ngoài ra, nó sử dụng các đường trung bình di chuyển đồng nhất trơn để kiểm tra các đường K đỏ hoặc xanh trong một chu kỳ nhất định trước khi tham gia giao dịch để xác nhận hướng xu hướng. Bộ lọc màu để mở vị trí giúp tránh tín hiệu giả.
Khi RSI và đường trượt khác nhau và điều kiện trung bình di chuyển đều được đáp ứng, chiến lược này sẽ làm nhiều hơn sau khi bán quá mức, giảm giá sau khi mua quá mức, và giá đặt cược trở lại đường trung bình.
Cần giảm giá vào cuối ngày để tránh giữ cổ phiếu qua đêm.
Chiến lược trả lời đường thẳng RSI hai chiều sử dụng phương pháp định luật hóa động lực giao dịch. Bằng cách kết hợp hai khung thời gian, chỉ số overbought và oversold, phân tích hình dạng đường K và bộ lọc mở vị trí, mục tiêu của nó là xác định cơ hội trở lại đường thẳng có xác suất cao. Quản lý rủi ro nghiêm ngặt và kiểm soát vị trí thận trọng giúp kiểm soát rút lui trong khi kiếm lợi nhuận.
/*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()