Chiến lược giao dịch tự động dựa trên RSI

Tác giả:ChaoZhang, Ngày: 2024-02-29 14:14:01
Tags:

img

Tổng quan

Chiến lược này thiết kế một hệ thống giao dịch tự động cho cả các vị trí dài và ngắn dựa trên chỉ số RSI. Nó đi vào giao dịch khi chỉ số RSI cho thấy mức mua quá mức hoặc bán quá mức, và thoát với các lỗ dừng được kích hoạt bởi các điều kiện cụ thể.

Chiến lược logic

Chiến lược này sử dụng chỉ số RSI để xác định các điều kiện thị trường mua quá mức / bán quá mức. Cụ thể, khi RSI giảm xuống dưới đường bán quá mức, nó đi vào các vị trí dài; khi RSI vượt quá đường mua quá mức, nó đi vào các vị trí ngắn.

Ngoài ra, các quy tắc thoát được thiết lập trong chiến lược. Sau khi mở các vị trí dài, nếu RSI vượt qua đường mua quá mức một lần nữa, nó sẽ kích hoạt dừng lỗ để đóng các giao dịch dài; tương tự như vậy, sau khi mở các giao dịch ngắn, nếu RSI vượt qua đường bán quá mức một lần nữa, nó sẽ đóng các giao dịch ngắn.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là sử dụng chỉ số RSI để đánh giá các kịch bản mua quá mức / bán quá mức, đây là một phương pháp phân tích kỹ thuật tương đối trưởng thành và đáng tin cậy trong giao dịch định lượng. So với các chiến lược trung bình động đơn giản, chiến lược này có thể nắm bắt các bước ngoặt của thị trường chính xác hơn, do đó làm tăng tiềm năng lợi nhuận của hệ thống giao dịch.

Ngoài ra, cơ chế dừng lỗ kiểm soát hiệu quả rủi ro giảm trong các xu hướng một chiều mạnh mẽ, trái ngược với các chiến lược theo xu hướng truyền thống, nơi người chạy có thể dễ dàng gặp rắc rối.

Phân tích rủi ro

Rủi ro lớn nhất là chỉ số RSI có thể cung cấp tín hiệu giao dịch sai đôi khi. Không chỉ số kỹ thuật nào có thể chính xác 100% trong việc dự đoán chuyển động thị trường, bao gồm cả RSI. Khi RSI đưa ra phán đoán sai về tình trạng mua quá mức / bán quá mức, nó sẽ dẫn đến các mục nhập sai cho chiến lược.

Để giảm thiểu rủi ro như vậy, dừng lỗ được thực hiện trong chiến lược. Nhưng tỷ lệ dừng lỗ vẫn có thể cao trong thời gian xu hướng mạnh, và sự can thiệp thủ công sẽ được yêu cầu để đóng các vị trí sai. Nói chung, sự giám sát và điều chỉnh của con người vẫn cần thiết cho hệ thống tự động để đạt được hiệu suất tối đa.

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

Vẫn còn chỗ cho việc tối ưu hóa thêm:

  1. Bao gồm các chỉ số khác để xác nhận tín hiệu nhập cảnh và tránh các mục nhập sai từ chỉ số RSI một mình.

  2. Tối ưu hóa các thông số RSI để tìm ra các giá trị chiều dài tốt hơn để phát hiện mua quá mức / bán quá mức chính xác hơn.

  3. Điều chỉnh tốt vị trí dừng lỗ để cân bằng giữa ngăn ngừa mất mát và tránh thoát sớm.

Kết luận

Nhìn chung, chiến lược giao dịch tự động dựa trên chỉ số RSI này có lợi thế là có thể xác định hiệu quả các điều kiện thị trường mua quá nhiều và bán quá nhiều. Bằng cách nhập vào các vị trí dài và ngắn trong các mức RSI cực cao, nó nhằm mục đích lợi nhuận từ sự đảo ngược thị trường. Cơ chế dừng lỗ cũng giúp hạn chế tổn thất trong các xu hướng một chiều mạnh mẽ. Tuy nhiên, nguy cơ đánh giá sai các tín hiệu RSI vẫn còn. Việc tối ưu hóa thêm các chỉ số xác nhận, tham số RSI và vị trí dừng lỗ có thể nâng cao lợi nhuận và kiểm soát rủi ro của chiến lược. Như với tất cả các hệ thống tự động, giám sát của con người vẫn cần thiết cho các can thiệp trong các tình huống thị trường đặc biệt.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows Buy and close Buy positions --------------- //

timebull = stratbull 
timebear = stratbear 

strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")


Thêm nữa