Chiến lược giao dịch đảo ngược RSI

Tác giả:ChaoZhang, Ngày: 2023-09-28 16:09:39
Tags:

Tổng quan

Chiến lược này sử dụng chỉ số RSI để đánh giá xu hướng thị trường và tạo ra các tín hiệu giao dịch khi các điều kiện mua quá mức hoặc bán quá mức xảy ra. Nó nhằm mục đích nắm bắt các chuyển động đảo ngược ngắn hạn trên thị trường. Nó cũng kết hợp các đường trung bình động và logic lấy lợi nhuận / dừng lỗ để lọc tín hiệu và kiểm soát rủi ro.

Chiến lược logic

  1. Tính toán chỉ số RSI 14 giai đoạn và đặt đường mua quá mức ở 67 và đường bán quá mức ở 44.

  2. Khi RSI vượt qua trên đường mua quá mức, một tín hiệu bán được tạo ra. Khi RSI vượt qua dưới đường bán quá mức, một tín hiệu mua được tạo ra.

  3. Thêm bộ lọc trung bình động. Các tín hiệu bán chỉ xảy ra khi đóng dưới MA ngày trước; Các tín hiệu mua chỉ xảy ra khi đóng trên MA ngày trước.

  4. Kết hợp logic lấy lợi nhuận và dừng lỗ. Hoặc điểm cố định hoặc thoát dựa trên RSI có thể được sử dụng.

Phân tích lợi thế

  1. Khám phá các cơ hội đảo ngược ngắn hạn bằng cách sử dụng các mức RSI mua quá mức / bán quá mức.

  2. Bộ lọc trung bình động tránh giao dịch chống lại xu hướng.

  3. Lợi nhuận và dừng lỗ kiểm soát lỗ giao dịch duy nhất.

  4. Có thể phát hiện cơ hội đảo ngược xu hướng sớm.

Rủi ro và giải pháp

  1. Sự chậm trễ của chỉ số RSI có thể gây ra tín hiệu sai.

  2. Dừng lỗ cố định có thể quá rộng hoặc quá hẹp.

  3. Lợi nhuận cố định có thể thoát quá sớm hoặc mục tiêu quá nhỏ.

  4. Không lọc các thị trường khác nhau, gây ra giao dịch quá mức và lỗ. Điều chỉnh các thông số RSI hoặc thêm bộ lọc.

Hướng dẫn tối ưu hóa

  1. Kiểm tra các thông số RSI trên các khung thời gian khác nhau.

  2. Điều chỉnh mức RSI mua quá mức / bán quá mức.

  3. Hãy thử các đường trung bình động khác hoặc các bộ lọc khác.

  4. Kiểm tra mục tiêu lợi nhuận cố định so với mục tiêu lợi nhuận động.

  5. Tối ưu hóa giá trị lợi nhuận / dừng để phù hợp với biến động thị trường.

  6. Thêm các bộ lọc để tránh whipsaws trong các thị trường khác nhau.

  7. Hãy xem xét nhiều khung thời gian để cải thiện chất lượng tín hiệu.

Tóm lại

Chiến lược này giao dịch đảo ngược bằng cách sử dụng chỉ số RSI kết hợp với đường trung bình động và logic lấy lợi nhuận / dừng lỗ. Nó nhằm mục đích nắm bắt các bước ngoặt ngắn hạn trên thị trường. Tăng thêm các thông số tối ưu hóa và các bộ lọc bổ sung có thể cải thiện lợi nhuận trong khi giảm rủi ro. Nó phù hợp với các nhà đầu tư nhạy cảm với các động thái ngắn hạn và tìm kiếm giao dịch thường xuyên.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Thêm nữa