RSI và Bollinger Bands Chiến lược giao dịch định lượng

Tác giả:ChaoZhang, Ngày: 2024-01-08 10:16:22
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số sức mạnh tương đối (RSI) và Bollinger Bands để xác định các cơ hội giao dịch, thuộc về các chiến lược đảo ngược trung bình trong giao dịch định lượng. Nó mua khi RSI dưới ngưỡng và đóng vị trí khi giá vượt qua dải giữa của Bollinger Bands. Không có cơ hội bán ngắn.

Chiến lược logic

  1. Sử dụng chỉ số RSI để đánh giá liệu thị trường có bị quá bán không. RSI dưới 30 được coi là tín hiệu quá bán.

  2. Sử dụng Bollinger Bands để xác định xem giá có bắt đầu bật lên không. Khi giá bật từ dải dưới và phá vỡ trên dải giữa, hướng dài kết thúc.

  3. Kết hợp tín hiệu bán quá mức RSI và tín hiệu Bollinger Bands để thiết lập các điểm mua. Mua khi cả hai tín hiệu kích hoạt và đóng vị trí khi giá vượt qua dải giữa để kiếm lợi nhuận.

Phân tích lợi thế

  1. Chiến lược kết hợp chỉ số RSI đảo ngược trung bình và chỉ số kênh Bollinger Bands để định vị các điểm nhập chính xác hơn.

  2. Chỉ số RSI có thể lọc ra nhiều breakout giả và giảm các giao dịch không cần thiết.

  3. Các Bollinger Bands hoạt động như một điểm dừng lỗ để kiểm soát rủi ro của mỗi giao dịch.

Phân tích rủi ro

  1. Chỉ số RSI có thể cung cấp tín hiệu sai, dẫn đến việc bỏ lỡ cơ hội mua.

  2. Các thiết lập tham số không chính xác của Bollinger Bands có thể dẫn đến việc dừng lỗ quá lỏng lẻo hoặc nghiêm ngặt.

  3. Chọn các công cụ giao dịch không phù hợp, chẳng hạn như giao dịch cổ phiếu vốn hóa nhỏ với rủi ro thanh khoản cao hơn.

Hướng tối ưu hóa

  1. Kiểm tra các kết hợp tham số khác nhau như thời gian RSI, thời gian Bollinger và nhân để tìm các tham số tối ưu.

  2. Kết hợp các chỉ số khác như KD, MACD để thiết lập các điều kiện mua chặt chẽ hơn để lọc tín hiệu.

  3. Đặt stop loss dựa trên biến động cho các công cụ giao dịch khác nhau, chẳng hạn như sử dụng stop loss biến động.

Kết luận

Chiến lược này sử dụng logic mua ở mức thấp nhất của chỉ số RSI và bán ở mức cao nhất của Bollinger, thuộc về các chiến lược đảo ngược trung bình. So với việc sử dụng các chỉ số duy nhất như chỉ số RSI hoặc Bollinger Bands, chiến lược này có thể định vị các điểm vào và ra chính xác hơn, do đó đạt được kết quả tốt hơn. Các bước tiếp theo có thể được cải thiện thông qua tối ưu hóa tham số, lọc tín hiệu, chiến lược dừng lỗ vv.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's BB + RSI Strategy v1.0", shorttitle = "BB+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiuse = input(true, defval = true, title = "Use RSI")
bbuse = input(true, defval = true, title = "Use BB")
showbb = input(true, defval = true, title = "Show BB Overlay")
bbperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "BB period")
bbsource = input(ohlc4, title = "BB source")
bbmult = input(2, defval = 2, minval = 1, maxval = 100, title = "BB Mult")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 1000, title = "RSI period")
rsisource = input(close, title = "RSI source")
rsilimit = input(30, defval = 30, minval = 1, maxval = 49, title = "RSI Limit")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//RSI
rsi = rsi(rsisource, rsiperiod)

//BB
basis = sma(bbsource, bbperiod)
dev = bbmult * stdev(bbsource, bbperiod)
upper = basis + dev
lower = basis - dev

//Overlay
col = showbb ? blue : na
plot(upper, color = col)
plot(basis, color = col)
plot(lower, color = col)

//Signals
up = (rsi < rsilimit or rsiuse == false) and (low < lower or bbuse == false)
cl = close > open

//Trading
lot = 0.0 
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, lot)
if cl
    strategy.entry("Close", strategy.short, 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa