Chiến lược chéo trung bình động RSI nhiều khung thời gian

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

img

Tổng quan

Chiến lược chéo trung bình chuyển động RSI nhiều khung thời gian là một chiến lược theo xu hướng trên nhiều khung thời gian. Nó sử dụng các chỉ số RSI trên nhiều khung thời gian và lấy một trung bình chuyển động cân của mỗi khung thời gian. Các tín hiệu cuối cùng được tạo ra bằng cách kết hợp tất cả các trung bình chuyển động RSI thành hai chỉ số toàn diện và giao dịch các tín hiệu chéo, đó là một hệ thống chéo trung bình chuyển động kép điển hình.

Nguyên tắc

Chiến lược này đầu tiên tính toán các chỉ số RSI trên nhiều khung thời gian (1 phút, 5 phút, 15 phút, v.v.).

Sau đó, tất cả các đường trung bình động RSI từ các khung thời gian khác nhau được kết hợp bằng nhau thành hai tín hiệu - đường nhanh và đường chậm.

Khi đường nhanh vượt qua trên đường chậm, một tín hiệu mua được tạo ra. Khi đường nhanh vượt qua dưới đường chậm, một tín hiệu bán được tạo ra. Bằng cách kết hợp RSI nhiều khung thời gian theo cách này, các tín hiệu chéo có thể theo dõi hiệu quả xu hướng trong khi lọc ra tiếng ồn thị trường ngắn hạn.

Ưu điểm

  1. Kết hợp nhiều khung thời gian có thể làm mịn đường cong giá và tránh sự phá vỡ sai một cách hiệu quả.

  2. RSI chỉ ra mức mua quá mức / bán quá mức, tránh theo đuổi mức cao / thấp mới.

  3. Trung bình di chuyển kép có hiệu quả giữ tốt hơn so với một hệ thống trung bình di chuyển duy nhất.

  4. Sử dụng VMA thay vì SMA làm giảm tác động của biến động ngắn hạn.

Rủi ro

  1. Các chiến lược nhiều khung thời gian đòi hỏi điều chỉnh tham số rộng rãi, cài đặt không đúng có thể gây ra việc bỏ lỡ các mục nhập tốt hoặc các mục nhập muộn.

  2. Mức trung bình động có sự phù hợp đường cong kém, hoạt động kém tại các điểm chuyển hướng.

  3. Sự khác biệt RSI xảy ra thường xuyên, tín hiệu đảo ngược nên được theo dõi.

Giải pháp: Tối ưu hóa các thông số khung thời gian; Kết hợp với các chỉ số khác như MACD để xác định xu hướng; Hãy cẩn thận với các tín hiệu phân kỳ RSI.

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

  1. Tối ưu hóa số lượng khung thời gian và cài đặt tham số để nắm bắt tốt hơn xu hướng.

  2. Xem xét thêm dừng lỗ để kiểm soát rủi ro.

  3. Kết hợp các chỉ số khác để quyết định tốt hơn về xu hướng và chênh lệch.

  4. Kiểm tra các thông số thời gian giữ khác nhau để có hiệu quả giữ tốt nhất.

Kết luận

Chiến lược chéo trung bình chuyển động RSI nhiều khung thời gian tạo ra các tín hiệu giao dịch bằng cách kết hợp các chỉ số RSI từ nhiều khung thời gian sử dụng hệ thống trung bình chuyển động, đây là một chiến lược theo dõi xu hướng nhiều khung thời gian điển hình. Sức mạnh của nó nằm trong việc theo dõi hiệu quả xu hướng và lọc tiếng ồn, nhưng điều chỉnh tham số và kiểm soát rủi ro cần chú ý. Với tối ưu hóa hơn nữa, nó có thể trở thành một hệ thống theo dõi xu hướng mạnh mẽ.


/*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 )



Thêm nữa