
Chiến lược phá vỡ đường trung bình RSI kép là một chiến lược định lượng sử dụng cả chỉ số RSI và chỉ số trung bình để đánh giá thời gian giao dịch. Ý tưởng cốt lõi của chiến lược này là khi chỉ số RSI đạt đến vùng quá mua quá bán, sử dụng hướng của đường trung bình để lọc tín hiệu, tìm kiếm điểm phá vỡ tốt hơn để xây dựng vị trí.
Chỉ số RSI và SMA được tính theo các tham số được thiết lập bởi người dùng.
Khi RSI vượt qua đường bán tháo đặt (đặc biệt là 30), một tín hiệu đa đầu sẽ được tạo ra nếu giá thấp hơn đường trung bình thoát LONG.
Khi RSI vượt qua đường bán tháo được thiết lập (bằng mặc định là 70), một tín hiệu đầu không sẽ được tạo ra nếu giá cao hơn đường trung bình thoát SHORT.
Người dùng có thể chọn đường trung bình lọc, chỉ khi giá nằm trên đường trung bình lọc, tín hiệu sẽ được tạo ra.
Việc quyết định vị trí rút ra được thực hiện theo đường trung bình rút ra LONG và đường trung bình rút ra SHORT.
Thiết kế hai chỉ số, tham khảo tổng hợp hai yếu tố lớn của thị trường, tăng độ chính xác của quyết định.
Sử dụng một cách hợp lý các đặc điểm đảo ngược của chỉ số RSI để tìm thời điểm đảo ngược.
Bộ lọc đường trung bình làm tăng sự nghiêm ngặt trong phán đoán, tránh theo đuổi những cú đánh đập.
Cho phép tùy chỉnh các tham số, có thể được tối ưu hóa cho các giống và chu kỳ khác nhau.
Thiết kế logic đơn giản, dễ hiểu và sửa đổi.
Chỉ số RSI dễ tạo ra đường trục dọc, chỉ số mật độ làm giảm vấn đề này.
RSI trong chu kỳ lớn dễ bị mất hiệu lực, có thể giảm tối ưu hóa tham số hoặc hỗ trợ các chỉ số khác.
Đường trung bình có độ trễ, có thể rút ngắn chiều dài đường trung bình hoặc hỗ trợ các chỉ số như MACD.
Các chỉ số khác có thể được đưa ra để đảm bảo hiệu quả của tín hiệu giao dịch.
Tối ưu hóa tham số RSI hoặc giới thiệu chỉ số Density để giảm khả năng tín hiệu giả.
Kết hợp xu hướng và chỉ số biến động như DMI, BOLL để xác định xu hướng và mức hỗ trợ.
Tiếp theo là đưa ra các chỉ số như MACD thay thế hoặc kết hợp với sự phán đoán ngang hàng.
Thêm logic điều kiện mở vị trí để ngăn chặn tín hiệu đột phá không mong muốn.
Chiến lược đột phá đường trung bình RSI kép sử dụng các chỉ số RSI để đánh giá xu hướng mua quá mức và đánh giá đường trung bình, về mặt lý thuyết có thể nắm bắt hiệu quả cơ hội đảo ngược. Chiến lược này linh hoạt, đơn giản, dễ sử dụng, đồng thời cũng phù hợp với các loại tối ưu hóa khác nhau, là một chiến lược nhập cảnh định lượng đáng khuyên. Bằng cách giới thiệu nhiều chỉ số để hỗ trợ phán đoán, chiến lược này có thể tăng cường hiệu quả ra quyết định và tăng tỷ lệ lợi nhuận.
/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Global Market Signals: RSI Strategy.
//@version=4
strategy("GMS: RSI Strategy", overlay=true)
LongShort = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
RSILength = input(title="RSI Length", type = input.integer ,defval=14)
RSIUpper = input(title="Upper Threshold", type = input.float ,defval=70)
RSILower = input(title="Lower Threshold", type = input.float ,defval=30)
LongExit = input(title="Long Exit SMA Length", type = input.integer ,defval=5)
ShortExit = input(title="Short Exit SMA Length", type = input.integer ,defval=5)
AboveBelow = input(title="Trend SMA Filter?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
TrendLength = input(title="Trend SMA Length", type = input.integer ,defval=200)
//Long Side
if LongShort =="Long Only" and AboveBelow == "Above"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
strategy.close("LONG", when = close>sma(close,LongExit))
if LongShort =="Long Only" and AboveBelow == "Below"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
strategy.close("LONG", when = close>sma(close,LongExit))
if LongShort =="Long Only" and AboveBelow == "Don't Include"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
strategy.close("LONG", when = close>sma(close,LongExit))
if LongShort =="Both" and AboveBelow == "Above"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
strategy.close("LONG", when = close>sma(close,LongExit))
if LongShort =="Both" and AboveBelow == "Below"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
strategy.close("LONG", when = close>sma(close,LongExit))
if LongShort =="Both" and AboveBelow == "Don't Include"
strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
strategy.close("LONG", when = close>sma(close,LongExit))
//SHORT SIDE
if LongShort =="Short Only" and AboveBelow == "Above"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
strategy.close("SHORT", when = close<sma(close,ShortExit))
if LongShort =="Short Only" and AboveBelow == "Below"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
strategy.close("SHORT", when = close<sma(close,ShortExit))
if LongShort =="Short Only" and AboveBelow == "Don't Include"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
strategy.close("SHORT", when = close<sma(close,ShortExit))
if LongShort =="Both" and AboveBelow == "Above"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
strategy.close("SHORT", when = close<sma(close,ShortExit))
if LongShort =="Both" and AboveBelow == "Below"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
strategy.close("SHORT", when = close<sma(close,ShortExit))
if LongShort =="Both" and AboveBelow == "Don't Include"
strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
strategy.close("SHORT", when = close<sma(close,ShortExit))