
Chiến lược RSI nhiều khung thời gian là một chiến lược theo dõi xu hướng trên nhiều khung thời gian. Chiến lược này sử dụng chỉ số RSI của nhiều khung thời gian cùng một lúc và xử lý trung bình di chuyển có trọng lượng đối với RSI của mỗi khung thời gian, kết hợp thành hai chỉ số tín hiệu tổng hợp.
Chiến lược này đầu tiên tính toán các chỉ số RSI riêng biệt trong nhiều khung thời gian (trong 1 phút, 5 phút, 15 phút, v.v.) và sau đó xử lý RSI của mỗi khung thời gian với chiều dài trung bình di chuyển trọng lượng 15 (VMA) để có được đường trung bình RSI của từng khung thời gian.
Sau đó, kết hợp trọng lượng bằng nhau của đường trung bình RSI của tất cả các khung thời gian, kết hợp thành hai tín hiệu đường nhanh và đường chậm. EMA đường nhanh dài 100 chu kỳ và đường chậm dài 150 chu kỳ.
Khi đường nhanh từ dưới lên phá vỡ đường chậm tạo ra tín hiệu mua; khi đường nhanh từ trên xuống phá vỡ đường chậm tạo ra tín hiệu bán. Như vậy, tín hiệu chéo tổng hợp của RSI đa khung thời gian có thể theo dõi xu hướng một cách hiệu quả và lọc ra tiếng ồn thị trường ngắn hạn.
Các nhà phân tích cho biết, việc sử dụng các khung thời gian đa dạng có thể làm phẳng đường cong giá và lọc hiệu quả các đột phá giả.
Chỉ số RSI có thể phản ánh tình trạng quá mua và quá bán, tránh theo đuổi đà tăng và giảm.
Hệ thống hai dòng đồng đều có hiệu quả giữ vị thế tốt hơn so với hệ thống một dòng đồng đều.
Sử dụng VMA thay vì SMA, có thể làm giảm tác động của biến động ngắn hạn đối với đường trung bình.
Chính sách khung thời gian đa dạng, yêu cầu điều chỉnh tham số cao, thiết lập không đúng có thể xuất hiện quá sớm hoặc quá muộn.
Hệ thống đường trung bình không phù hợp với đường cong, hoạt động kém hơn ở điểm chuyển hướng.
Chỉ số RSI dễ bị lệch, nên chú ý đến tín hiệu đảo ngược.
Giải pháp: điều chỉnh các thiết lập tham số khung thời gian; kết hợp với các chỉ số khác để đánh giá xu hướng, chẳng hạn như MACD; cảnh báo RSI đi xa tín hiệu.
Tối ưu hóa số lượng và các thiết lập tham số của khung thời gian để nắm bắt được xu hướng tốt hơn.
Cân nhắc thêm các biện pháp ngăn chặn để kiểm soát rủi ro.
Kết hợp các chỉ số khác để đánh giá xu hướng và lệch lạc, nâng cao chất lượng ra quyết định.
Kiểm tra các tham số khác nhau của chu kỳ nắm giữ để tìm ra hiệu quả nắm giữ tốt nhất.
Chiến lược chéo đường đồng nhất RSI đa khung thời gian thông qua phán đoán tổng hợp của chỉ số RSI trong nhiều khoảng thời gian, sử dụng hệ thống đồng nhất để làm mịn đường đường giá và tạo tín hiệu giao dịch, thuộc chiến lược theo dõi xu hướng đa khung thời gian điển hình. Ưu điểm của chiến lược này là có thể theo dõi xu hướng hiệu quả và lọc tiếng ồn, nhưng cần chú ý đến việc điều chỉnh tham số và kiểm soát rủi ro. Bằng cách tối ưu hóa thêm, chiến lược này có thể trở thành một hệ thống theo dõi xu hướng mạnh mẽ hơn.
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="RSI multitimeframe SMA crossover", shorttitle="RSI multitimeframe strategy", default_qty_type= strategy.percent_of_equity, margin_long=50, default_qty_value=150)
res1 = input(title="Res 01", type=input.resolution, defval="1")
res2 = input(title="Res 0", type=input.resolution, defval="5")
res3 = input(title="Res 1", type=input.resolution, defval="15")
res4 = input(title="Res 2", type=input.resolution, defval="15")
res5 = input(title="Res 3", type=input.resolution, defval="15")
res6 = input(title="Res 4", type=input.resolution, defval="30")
res7 = input(title="Res 5", type=input.resolution, defval="45")
res8 = input(title="Res 6", type=input.resolution, defval="60")
lengthRSI = input(15, minval=1)
lengthMA = input(15, minval=1)
lengthFMA = input(100, minval=1)
lengthFMA2 = input(150, minval=1)
Long_yes = input(defval=1, title="Long trades 0 or 1", minval=0, maxval=1)
Short_yes = input(defval=0, title="Short trades 0 or 1", minval=0, maxval=1)
src = close
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// stop loss
longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) *
0.01
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) *
0.01
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
rsi1 = rsi(src, lengthRSI)
MA1 = vwma(rsi1, lengthMA)
outD1 = security(syminfo.tickerid, res1, MA1)
outD2 = security(syminfo.tickerid, res2, MA1)
outD3 = security(syminfo.tickerid, res3, MA1)
outD4 = security(syminfo.tickerid, res4, MA1)
outD5 = security(syminfo.tickerid, res5, MA1)
outD6 = security(syminfo.tickerid, res6, MA1)
outD7 = security(syminfo.tickerid, res7, MA1)
outD8 = security(syminfo.tickerid, res8, MA1)
//plot_d0 = outD0
//plot_d1 = outD1
//plot_d2 = outD2
//plot_d3 = outD3
//plot_d4 = outD4
//plot_d5 = outD5
//plot_d6 = outD6
out_multi = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA)
out_multi2 = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA2)
//out_multi1 = outD2+outD3+outD4
//out_multi2 = outD4+outD5+outD6
//col0 = outD0 < 20 ? color.lime : outD0 > 80 ? color.red : color.blue
//col1 = outD1 < 20 ? color.lime : outD1 > 80 ? color.red : color.blue
//col2 = outD2 < 20 ? color.lime : outD2 > 80 ? color.red : color.blue
//col3 = outD3 < 20 ? color.lime : outD3 > 80 ? color.red : color.blue
//col4 = outD4 < 20 ? color.lime : outD4 > 80 ? color.red : color.blue
//col5 = outD5 < 20 ? color.lime : outD5 > 80 ? color.red : color.blue
//col6 = outD6 < 20 ? color.lime : outD6 > 80 ? color.red : color.blue
// plot(plot_d0,linewidth=2, color=col0)
// plot(plot_d1, linewidth=2, color=col1)
// plot(plot_d2,linewidth=2, color=col2)
// plot(plot_d3,linewidth=2, color=col3)
// plot(plot_d4,linewidth=2, color=col4)
// plot(plot_d5,linewidth=2, color=col5)
// plot(plot_d6,linewidth=2, color=col6)
long=(out_multi/8)
short=(out_multi2/8)
plot(long, linewidth=1, color=color.green)
plot(short, linewidth=1, color=color.red)
long1=crossover(long,short)
short1=crossunder(long,short)
h0 = hline(65, "Upper Band", color=color.red, linestyle=hline.style_solid, linewidth=2 )
h1 = hline(35, "Lower Band", color=color.green, linestyle=hline.style_solid, linewidth=2)
strategy.entry("buy", strategy.long, when=long1 and window() and Long_yes > 0)
if strategy.position_size > 0
strategy.exit(id="XL STP", stop=longStopPrice)
strategy.close("buy",when=short1 )
strategy.entry("sell", strategy.short, when=short1 and window() and Short_yes > 0)
if strategy.position_size < 0
strategy.exit(id="XS STP", stop=shortStopPrice)
strategy.close("buy",when=long1 )