Chiến lược phục hồi trung bình động RSI hai chiều


Ngày tạo: 2023-10-23 15:46:33 sửa đổi lần cuối: 2023-10-23 15:46:33
sao chép: 0 Số nhấp chuột: 671
1
tập trung vào
1617
Người theo dõi

Chiến lược phục hồi trung bình động RSI hai chiều

Tổng quan

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 Logic

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.

Phân tích lợi thế

  • Sử dụng nhiều khung thời gian để xác định tình trạng quá mua quá bán
  • Phong cách trượt khác với trung bình di chuyển lọc tiếng ồn, nhận ra hướng xu hướng
  • Lưu trữ bộ lọc màu để tránh tín hiệu giả
  • Phù hợp hai chỉ số theo quy tắc mở và đóng vị trí rõ ràng
  • Rủi ro kiểm soát giao dịch hàng ngày trước

Phân tích rủi ro

  • Nếu xu hướng mạnh mẽ tiếp tục, RSI có thể bị sụp đổ sau tín hiệu quá mua quá bán
  • Lỗ hổng thị trường có thể gây ra lỗ hổng
  • Sự chậm trễ của trung bình di chuyển có thể trì hoãn việc mở vị trí và do đó bỏ lỡ thị trường
  • Tỷ lệ lợi nhuận có thể thu được từ việc giữ giao dịch qua đêm trước khi kết thúc mỗi ngày

Hướng tối ưu hóa

  • Thêm các bộ lọc bổ sung như khối lượng giao dịch hoặc tỷ lệ biến động để xác nhận tín hiệu
  • Tối ưu hóa chu kỳ RSI và tham số mức bán tháo
  • Xem xét kiểm soát vị thế động dựa trên biến động
  • Kiểm tra lệnh dừng lỗ và rút ra, thay vì đóng cửa trước khi ngày kết thúc
  • Kiểm tra hiệu quả trên các giống khác nhau và điều chỉnh tham số

Tóm tắt

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.

Mã nguồn chiến lược
/*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()