Chiến lược giao dịch dựa trên RSI và Stochastic RSI


Ngày tạo: 2024-02-18 16:13:50 sửa đổi lần cuối: 2024-02-18 16:13:50
sao chép: 1 Số nhấp chuột: 711
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch dựa trên RSI và Stochastic RSI

Tổng quan

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

Tên chiến lược

Chiến lược giao dịch đa khung thời gian RSI-SRSI

Nguyên tắc chiến lược

Phương pháp này đánh giá hiện tượng bán tháo khi RSI thấp hơn 30 là tín hiệu bán tháo và cao hơn 70 là tín hiệu mua tháo. Chỉ số Stochastic RSI nhìn vào sự biến động của chỉ số RSI. Stochastic RSI thấp hơn 5 là tín hiệu bán tháo và cao hơn 50 là tín hiệu mua tháo.

Chiến lược này đồng thời kết hợp với sự chuyển động của giá tiền điện tử trong khung thời gian cao hơn (ví dụ như đường cong). Chỉ khi RSI của khung thời gian cao hơn (ví dụ như 45), tín hiệu mua sẽ được tạo ra. Điều này có thể lọc các tín hiệu bán tháo không liên tục xuất hiện khi toàn bộ đang trong xu hướng giảm.

Các tín hiệu mua và bán sau khi được kích hoạt, cần phải được xác nhận qua một chu kỳ nhất định (ví dụ như 8 dây K) để tránh tạo ra tín hiệu gây hiểu nhầm.

Lợi thế chiến lược

  • Phương pháp phân tích kỹ thuật cổ điển sử dụng chỉ số RSI để đánh giá quá mua quá bán
  • Kết hợp với Stochastic RSI chỉ số để nhận diện tín hiệu đảo ngược của RSI
  • Ứng dụng kỹ thuật lọc đa khung thời gian để làm tăng chất lượng tín hiệu

Rủi ro chiến lược và giải pháp

  • Chỉ số RSI dễ 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 sai lệch
    • Ứng dụng công nghệ xác nhận xu hướng
  • Thiết lập tham số ngưỡng không đúng có thể tạo ra quá nhiều tín hiệu giao dịch
    • Tối ưu hóa các tham số để tìm tham số tốt nhất
  • Các tín hiệu mua và bán cần phải được xác nhận một thời gian nhất định.
    • Tìm chu kỳ xác nhận cân bằng, lọc tín hiệu sai lệch và không bỏ lỡ cơ hội

Hướng tối ưu hóa chiến lược

  • Kiểm tra nhiều kết hợp hơn để tìm kiếm tín hiệu mạnh hơn
    • Ví dụ như đưa MACD vào chiến lược
  • Cố gắng học máy để tìm tham số tối ưu
    • Sử dụng thuật toán di truyền / tiến hóa để tự động tối ưu hóa
  • Tăng chiến lược dừng lỗ để kiểm soát rủi ro giao dịch đơn lẻ
    • Hạn chế khi giá giảm xuống mức hỗ trợ

Tóm tắt

Chiến lược này dựa chủ yếu vào RSI và Stochastic RSI, hai chỉ số giao dịch cổ điển để tạo ra tín hiệu giao dịch. Đồng thời, giới thiệu khung thời gian cao hơn để xác nhận xu hướng, có thể lọc hiệu quả tín hiệu sai lệch, cải thiện chất lượng tín hiệu.

Mã nguồn chiến lượ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")