
Chiến lược giao dịch RSI deviation có thể kiểm soát rủi ro một cách hiệu quả bằng cách nhận ra sự khác biệt giữa chỉ số RSI và biến động giá, cho tín hiệu mua và bán. Chiến lược này đồng thời có các chức năng như dừng lỗ, dừng lại và theo dõi dừng lỗ.
Chiến lược này chủ yếu dựa trên sự lệch của chỉ số RSI để xác định cơ hội giao dịch. Cụ thể, chiến lược này đầu tiên tính toán giá trị RSI trong một chu kỳ nhất định, sau đó vẽ đường xu hướng của chỉ số RSI. Đồng thời, chiến lược cũng vẽ đường xu hướng của giá.
Nếu xác định RSI đường thấp tăng và đường giá cao giảm, bạn sẽ đưa ra một tín hiệu mua. Nếu xác định RSI đường cao giảm và đường giá thấp tăng, bạn sẽ đưa ra một tín hiệu bán. Một khi tín hiệu giao dịch được hình thành, chiến lược có thể giao dịch theo kích thước của giá trị RSI.
Ngoài ra, chiến lược cũng thiết lập các chức năng dừng lỗ, dừng và theo dõi dừng lỗ. Ngăn chặn có thể kiểm soát rủi ro mất mát, dừng có thể khóa lợi nhuận, theo dõi dừng có thể cho phép lợi nhuận tiếp tục hoạt động. Những thiết lập này có thể quản lý rủi ro của mỗi giao dịch một cách hiệu quả.
Chiến lược giao dịch theo RSI có những lợi thế sau:
Bằng cách nắm bắt các biến động của chỉ số RSI, bạn có thể phát hiện ra biến động giá sớm hơn.
Chỉ số RSI được sử dụng rộng rãi, hầu hết các phần mềm giao dịch đều có RSI. Chiến lược này rất phù hợp.
Các tham số của chỉ số RSI được thiết lập linh hoạt, có thể điều chỉnh theo chu kỳ quan sát của thị trường để thích ứng với các tình huống khác nhau.
Kết hợp với các thiết lập dừng, dừng và theo dõi dừng, bạn có thể kiểm soát hiệu quả rủi ro của mỗi giao dịch.
Chiến lược giao dịch là sử dụng các tín hiệu giao dịch ở tần số vừa phải, tránh giao dịch quá nhiều.
Ý tưởng chiến lược rõ ràng và dễ hiểu, dễ dàng cho chương trình máy tính thực hiện.
Chiến lược này cũng có một số rủi ro:
RSI không phải là 100% đáng tin cậy, có thể có tín hiệu giả. Cần kết hợp với các chỉ số khác để lọc tín hiệu.
RSI có thể bị mất hiệu lực trong các tình huống xu hướng và nên tránh sử dụng.
RSI tham số không được thiết lập đúng cũng có thể ảnh hưởng đến hiệu quả của chiến lược. Chu kỳ quá ngắn sẽ làm tăng tần suất giao dịch và rủi ro.
Đặt điểm dừng quá nhỏ, có thể dừng quá sớm; điểm dừng quá lớn, không thể kiểm soát rủi ro hiệu quả. Cần thiết lập cân bằng.
Theo dõi dừng có thể dừng quá sớm khi giá dao động mạnh. Cần thiết lập khoảng cách dừng theo dõi hợp lý kết hợp với tỷ lệ biến động của thị trường.
Các rủi ro tương ứng có thể được giảm thiểu bằng các biện pháp sau:
Thêm các chỉ số khác như MACD, Brinline và các bộ lọc tín hiệu khác để giảm tín hiệu giả.
Chỉ sử dụng chiến lược này trong các thị trường chấn động và tránh các xu hướng rõ ràng.
Tối ưu hóa các thiết lập tham số RSI, chọn độ dài chu kỳ tốt nhất. Đồng thời kiểm tra các tham số ưa thích của các thị trường khác nhau.
Đặt điểm dừng và dừng hợp lý dựa trên dữ liệu đo lường lịch sử.
Cần điều chỉnh mức độ theo dõi lỗ theo biến động thị trường và sở thích rủi ro.
Chiến lược này có thể được tối ưu hóa bằng cách:
Thêm các chỉ số khác để lọc tín hiệu giao dịch và tăng độ tin cậy của tín hiệu.
Sử dụng công nghệ học máy để tự động tối ưu hóa các thiết lập tham số RSI.
Thiết kế các thuật toán dừng lỗ động theo các mô hình thị trường khác nhau. Ví dụ: mở rộng lệnh dừng lỗ trong thời gian rung động và thu hẹp lệnh dừng lỗ trong thời gian xu hướng.
Thiết kế các thuật toán quản lý vị trí động, điều chỉnh kích thước vị trí của mỗi giao dịch dựa trên các yếu tố như biến động của thị trường.
Trong việc theo dõi dừng lại, hãy đưa ra khái niệm tỷ lệ dao động và thiết lập khoảng cách theo dõi dừng lại dựa trên cường độ biến động giá.
Cố gắng triển khai chiến lược này cho các thị trường khác như ngoại hối và tiền điện tử.
Xây dựng hệ thống giao dịch định lượng, thực hiện giao dịch tự động hóa chiến lược.
Chiến lược giao dịch lệch RSI này tạo ra tín hiệu giao dịch bằng cách nắm bắt sự khác biệt giữa chỉ số RSI và biến động giá. Ưu điểm của chiến lược là đơn giản và rõ ràng, dễ dàng thực hiện tự động. Đồng thời, các thiết lập dừng lỗ, dừng và theo dõi dừng lỗ cũng có thể kiểm soát rủi ro hiệu quả.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © faytterro
//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
xo:= xo + i/(len)
yo:= yo + x[len-1-i]/(len)
xyo:= xyo + i*x[len-1-i]/(len)
xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
xo2:= xo2 + i/(len)
yo2:= yo2 + src[len-1-i]/(len)
xyo2:= xyo2 + i*src[len-1-i]/(len)
xxo2:= xxo2 + i*i/(len)
dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 :
((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) :
(cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)
// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
xo3:= xo3 + i/(len)
yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
xxo3:= xxo3 + i*i/(len)
dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
array.set(dizi3,i,a3*i+b3)
// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
xo4:= xo4 + i/(len)
yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
xxo4:= xxo4 + i*i/(len)
dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
array.set(dizi4,i,a4*i+b4)
// line=line.new((last_bar_index-ta.barssince(cg)-len),
// array.get(dizi3,0),
// last_bar_index-ta.barssince(cg),
// array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
// array.get(dizi4,0),
// last_bar_index-ta.barssince(cr),
// array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])
alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
longCondition = cg and ta.highest(ttk[1],len/2)<1
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)
shortCondition = cr and ta.lowest(ttk[1],len/2)>-1
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)