Chiến lược giao dịch RSI-SRSI nhiều khung thời gian

Tác giả:ChaoZhang, Ngày: 2024-02-18 16:13:50
Tags:

img

Tổng quan

Chiến lược giao dịch này kết hợp các chỉ số kỹ thuật Relative Strength Index (RSI) và Stochastic Relative Strength Index (Stochastic RSI) để tạo ra các tín hiệu giao dịch. Ngoài ra, nó sử dụng xu hướng giá của tiền điện tử trong các khung thời gian cao hơn để xác nhận xu hướng và tăng độ tin cậy tín hiệu.

Tên chiến lược

Chiến lược giao dịch RSI-SRSI nhiều khung thời gian

Chiến lược logic

Chỉ số RSI Stochastic chỉ ra sự biến động của các giá trị RSI. Chỉ số RSI Stochastic dưới 5 là quá bán và chỉ số RSI Stochastic trên 50 là quá mua.

Chiến lược này cũng kết hợp xu hướng giá của tiền điện tử trong các khung thời gian cao hơn (ví dụ: hàng tuần). Chỉ khi RSI khung thời gian cao hơn vượt quá ngưỡng (ví dụ: 45), các tín hiệu dài được kích hoạt. Điều này lọc ra các tín hiệu bán quá mức không liên tục khi xu hướng tổng thể giảm.

Các tín hiệu mua và bán cần được xác nhận trong một số thời gian (ví dụ 8 thanh) trước khi một tín hiệu giao dịch thực tế được tạo ra để tránh các tín hiệu giả.

Ưu điểm

  • Phương pháp phân tích kỹ thuật cổ điển sử dụng RSI để xác định mức mua quá mức / bán quá mức
  • Bao gồm chỉ số RSI ngẫu nhiên để bắt được sự đảo ngược của chỉ số RSI
  • Áp dụng các kỹ thuật nhiều khung thời gian để lọc tín hiệu giả và cải thiện chất lượng

Rủi ro và giải pháp

  • RSI có xu hướng tạo ra tín hiệu sai
    • Kết hợp các chỉ số khác để lọc các tín hiệu giả
    • Áp dụng các kỹ thuật xác nhận xu hướng
  • Cài đặt ngưỡng không chính xác có thể tạo ra quá nhiều tín hiệu
    • Tối ưu hóa các tham số để tìm kết hợp tốt nhất
  • Các tín hiệu cần thời gian xác nhận
    • Thời gian xác nhận số dư - lọc các tín hiệu giả mà không bỏ lỡ cơ hội

Các lĩnh vực cải tiến

  • Kiểm tra nhiều kết hợp chỉ số hơn cho tín hiệu mạnh hơn
    • ví dụ: kết hợp chỉ số MACD
  • Sử dụng các phương pháp học máy để tìm các thông số tối ưu
    • ví dụ: thuật toán di truyền / thuật toán tiến hóa để tối ưu hóa tự động
  • Thêm các chiến lược dừng lỗ để kiểm soát rủi ro giao dịch duy nhất
    • Thiết lập stop loss khi giá vượt qua mức hỗ trợ

Kết luận

Chiến lược này chủ yếu dựa trên hai chỉ số kỹ thuật cổ điển, RSI và Stochastic RSI, để tạo ra các tín hiệu giao dịch. Ngoài ra, việc giới thiệu xác nhận xu hướng từ khung thời gian cao hơn giúp lọc các tín hiệu giả hiệu quả và cải thiện chất lượng tín hiệu. Cải thiện hiệu suất hơn nữa có thể đạt được bằng cách tối ưu hóa các thông số, thêm stop loss và các phương tiện khác.


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

//@version=5
strategy("RSI and Stochatic Strategy", overlay=true, use_bar_magnifier = false)


/////// Inputs ///////////////

// RSI and SRSI
rsiLength = input(14, title="RSI Length") 
stochLength = input(14, title="Stochastic Length")
kSmooth = input(3, title="K Smooth")
dSmooth = input(3, title="D Smooth")


//////// thresholds ///////////////
st_low = input(5, title="Low SRSI") // stochastic RSI low -- prepare to sell
st_hi = input(50, title="High SRSI") // stochastic RSI high -- prepare to buy
diff = input(5, title="difference") // minimum change in RSI
// inval_diff = input(12, title="difference") // invalidation difference: change in the oposite direction that invalidates rsi falling/rising
rsi_low = input(30, title="Low RSI") // RSI considered low
rsi_hi = input(60, title="High RSI") // RSI considered high
rsi_ht_hi = input(45, title="High higher time frame RSI") // RSI in higher time frame considered high


/// buy trigger duration 
tr_dur = input(8, title="Trigger duration")
low_dur = input(20, title="Monitoring last low")


///////////////// Higher time frame trend ///////////////////
// higher time frame resolution
res2 = input.timeframe("W", title="Higher time-frame")
// Input for the ticker symbol, default is an empty string
// For instance we could monitor BTC higher time frame trend
symbol = input("BTC_USDT:swap", "Input Ticker (leave empty for current)")

// Determine the symbol to use
inputSymbol = symbol == "" ? syminfo.tickerid : symbol
//////////////////////////////////////////////////////////

// Calculate RSI //
rsi = ta.rsi(close, rsiLength)

// Calculate Stochastic RSI //
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stochRsi = 100 * (rsi - rsiLowest) / (rsiHighest - rsiLowest)

// Apply smoothing
K = ta.sma(stochRsi, kSmooth)
D = ta.sma(K, dSmooth)

// Higher time Frame RSI
cl2 = request.security(inputSymbol, res2, close)
rsi2 = ta.rsi(cl2, 14)

// SRSI BUY/SELL signals 
sell_stoch = (ta.lowest(K, tr_dur) < st_low) or (ta.highest(rsi, tr_dur) < rsi_low)
buy_stoch = ((ta.lowest(K, tr_dur) > st_hi) or (ta.lowest(rsi, tr_dur) > rsi_hi)) and (rsi2 > rsi_ht_hi)

 // valitation / invalidation sell signal
ll = ta.barssince(not sell_stoch)+1
sell_validation = (ta.highest(rsi, ll)>rsi[ll]+diff and rsi < rsi[ll]) or (rsi < rsi[ll]-diff)

// valitation / invalidation buy signal
llb = ta.barssince(not buy_stoch)+1
buy_validation = (ta.lowest(rsi, llb)<rsi[llb]-diff and rsi > rsi[llb]) or (rsi > rsi_hi and rsi - rsi[tr_dur] > 0)

sell_signal = sell_stoch and sell_validation
buy_signal = buy_stoch and buy_validation 

// Define the start date for the strategy
startYear = input(2019, "Start Year")
startMonth = input(1, "Start Month")
startDay = input(1, "Start Day")

// Convert the start date to Unix time
startTime = timestamp(startYear, startMonth, startDay, 00, 00)

// Define the end date for the strategy
endYear = input(2030, "End Year")
endMonth = input(1, "End Month")
endDay = input(1, "End Day")

// Convert the end date to Unix time
endTime = timestamp(endYear, endMonth, endDay, 00, 00)


if true
    if buy_signal
        strategy.entry("buy", strategy.long, comment = "Buy")
    if sell_signal
        strategy.close("buy", "Sell")

Thêm nữa