Chiến lược đảo ngược trung bình RSI kép

Tác giả:ChaoZhang, Ngày: 2023-10-23 15:46:33
Tags:

img

Tổng quan

Chiến lược đảo ngược trung bình RSI kép là một chiến lược theo xu hướng xác định các điều kiện mua quá mức và bán quá mức bằng cách sử dụng hai chỉ số RSI trên các khung thời gian khác nhau. Nó nhằm mục đích tận dụng sự đảo ngược trung bình bằng cách đi dài sau các điều kiện bán quá mức và đi ngắn sau các điều kiện mua quá mức. Chiến lược sử dụng nến Heikin-Ashi, chỉ số RSI và bộ lọc màu mở để xác định các cơ hội giao dịch.

Chiến lược logic

Chiến lược này sử dụng hai chỉ số RSI với các khoảng thời gian khác nhau - một trên biểu đồ 5 phút và một trên biểu đồ 1 giờ. Đối với các chỉ số RSI, mức bán quá mức được xác định dưới 30 và mức mua quá mức trên 70.

Nó theo dõi các giá trị RSI và tìm kiếm các tình huống mà RSI đã dưới 30 hoặc trên 70 cho một số thanh xác định, chỉ ra các điều kiện bán quá mức hoặc mua quá mức kéo dài.

Ngoài ra, nó sử dụng nến Heikin-Ashi và kiểm tra một số nến màu xanh lá cây hoặc đỏ xác định để xác nhận hướng xu hướng trước khi tham gia giao dịch.

Khi cả hai điều kiện RSI và Heikin-Ashi phù hợp, chiến lược sẽ đi dài sau các điều kiện bán quá mức hoặc đi ngắn sau các điều kiện mua quá mức, đặt cược vào sự quay trở lại mức trung bình.

Các vị trí được đóng cửa vào cuối mỗi ngày để tránh giữ giao dịch qua đêm.

Ưu điểm

  • Sử dụng phương pháp nhiều khung thời gian để xác định các điều kiện mua quá mức / bán quá mức
  • Nến Heikin-Ashi lọc tiếng ồn và xác định hướng xu hướng
  • Bộ lọc màu mở tránh tín hiệu sai
  • Quy tắc nhập cảnh/ra khỏi rõ ràng dựa trên hai chỉ số phù hợp
  • Quản lý rủi ro bằng cách đóng các vị trí trước cuối mỗi ngày

Rủi ro

  • Whipsaws có thể nếu xu hướng mạnh tiếp tục sau khi tín hiệu RSI mua quá mức / bán quá mức
  • Khoảng cách thị trường có thể kích hoạt dừng
  • Sự chậm trễ Heikin-Ashi có thể trì hoãn các giao dịch và gây ra các động thái bị bỏ lỡ
  • Khóa các vị trí vào cuối ngày từ bỏ lợi nhuận tiềm năng của việc giữ qua đêm

Những cải tiến

  • Thêm các bộ lọc bổ sung như khối lượng hoặc biến động để xác nhận tín hiệu
  • Tối ưu hóa các giai đoạn RSI và mức mua quá mức / bán quá mức cho công cụ
  • Xem xét kích cỡ vị trí động dựa trên biến động
  • Thử nghiệm với mục tiêu lợi nhuận hoặc dừng lại thay vì ra khỏi cuối ngày
  • Hiệu quả thử nghiệm trên các thiết bị khác nhau và điều chỉnh các thông số

Kết luận

Chiến lược đảo ngược trung bình RSI kép có cách tiếp cận dựa trên quy tắc đối với đà giao dịch. Bằng cách kết hợp hai khung thời gian, chỉ số mua quá mức / bán quá mức, phân tích nến và bộ lọc đầu vào, nó nhằm mục đích xác định các thiết lập đảo ngược trung bình có khả năng cao. Quản lý rủi ro nghiêm ngặt và kích thước vị trí thận trọng giúp cân bằng lợi nhuận với việc quản lý giảm. Tăng cường tối ưu hóa hơn và kiểm tra độ bền sẽ giúp triển khai thành công trên các thị trường khác nhau.


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

Thêm nữa