Chiến lược giao dịch đảo ngược dựa trên chỉ số RSI đa thời kỳ

Tác giả:ChaoZhang, Ngày: 2023-09-14 20:42:55
Tags:

Bài viết này giải thích chi tiết về một chiến lược giao dịch định lượng sử dụng các chỉ số RSI nhiều giai đoạn để xác định các điểm đảo ngược.

I. Chiến lược logic

Chiến lược sử dụng 3 nhóm chỉ số RSI với các thông số khác nhau:

  1. Tính toán các giá trị RSI lần lượt cho giai đoạn 2, 7 và 14.

  2. Khi RSI-2 dưới 10, RSI-7 dưới 20, và RSI-14 dưới 30, một đáy được xác định.

  3. Khi RSI-2 trên 90, RSI-7 trên 80 và RSI-14 trên 70, một đỉnh được xác định.

  4. Tạo tín hiệu mua / bán dựa trên sự đồng thuận của RSI.

  5. Đặt các tham số có thể điều chỉnh trước để đồng thuận chỉ số, điều khiển tần số tín hiệu.

Bằng cách phân tích các chỉ số RSI qua các giai đoạn chung, độ chính xác điểm đảo ngược có thể được cải thiện.

II. Lợi thế của Chiến lược

Ưu điểm lớn nhất là sử dụng phân tích RSI nhiều khung thời gian cải thiện việc xác định các điểm chính và lọc ra các tín hiệu sai.

Một lợi thế khác là tính linh hoạt để điều chỉnh các tham số đồng thuận và thích nghi với môi trường thị trường khác nhau.

Cuối cùng, các kết hợp RSI cũng cung cấp nhiều tùy chọn điều chỉnh hơn.

III. Các rủi ro tiềm ẩn

Tuy nhiên, có những rủi ro sau đây:

Thứ nhất, chính chỉ số RSI có sự chậm trễ vốn có trong việc xác định sự đảo ngược.

Thứ hai, nhiều chỉ số đưa ra sự mơ hồ của tín hiệu đòi hỏi các quy tắc rõ ràng.

Cuối cùng, các giao dịch đảo ngược có tỷ lệ thất bại đòi hỏi sự chuẩn bị tâm lý.

IV. Tóm tắt

Tóm lại, bài viết này đã giải thích một chiến lược định lượng để xác định sự đảo ngược dựa trên phân tích RSI đa giai đoạn. Nó cải thiện việc nhận ra các điểm chuyển đổi thị trường bằng cách đánh giá sự đồng thuận của RSI. Nhưng các rủi ro như chậm trễ và tín hiệu sai cần phải được quản lý. Nhìn chung nó cung cấp một cách tiếp cận tối ưu hóa chiến lược RSI linh hoạt.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Triple RSI Top/Bottom v1.1", shorttitle = "3RSI Top/Bottom 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
indi = input(3, defval = 3, minval = 1, maxval = 3, title = "Indicators")
accuracy = input(3, defval = 3, minval = 1, maxval = 10, title = "accuracy")
fromyear = input(1900, defval = 1900, 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")

//RSI-2
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//RSI-7
middleup = rma(max(change(close), 0), 7)
middledown = rma(-min(change(close), 0), 7)
middlersi = middledown == 0 ? 100 : middleup == 0 ? 0 : 100 - (100 / (1 + middleup / middledown))

//RSI-14
slowup = rma(max(change(close), 0), 14)
slowdown = rma(-min(change(close), 0), 14)
slowrsi = slowdown == 0 ? 100 : slowup == 0 ? 0 : 100 - (100 / (1 + slowup / slowdown))

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
acc = 10 - accuracy
signalup1 = fastrsi < (5 + acc) ? 1 : 0
signalup2 = middlersi < (10 + acc * 2) ? 1 : 0
signalup3 = slowrsi < (15 + acc * 3) ? 1 : 0

signaldn1 = fastrsi > (95 - acc) ? 1 : 0
signaldn2 = middlersi > (90 - acc * 2) ? 1 : 0
signaldn3 = slowrsi > (85 - acc * 3) ? 1 : 0

up = signalup1 + signalup2 + signalup3 >= indi
dn = signaldn1 + signaldn2 + signaldn3 >= indi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Thêm nữa