Chiến lược định lượng: Bollinger Bands RSI CCI Crossover Strategy

Tác giả:ChaoZhang, Ngày: 2023-12-20 16:24:49
Tags:

img

Tổng quan

Chiến lược này kết hợp các dải Bollinger, chỉ số sức mạnh tương đối (RSI) và chỉ số kênh hàng hóa (CCI) để tìm tín hiệu chéo và tạo ra tín hiệu mua và bán.

Chiến lược logic

Bollinger Bands

Bollinger Bands bao gồm một dải giữa, một dải trên và một dải dưới. Dải giữa thường là một đường trung bình động 20 ngày. Dải trên là hai độ lệch chuẩn trên dải giữa. Dải dưới là hai độ lệch chuẩn dưới. Giá gần dải dưới có thể chỉ ra tình trạng bán quá mức. Giá gần dải trên có thể chỉ ra tình trạng mua quá mức.

RSI

Chỉ số RSI đo tốc độ chuyển động giá theo hướng lên và xuống. Nó cho thấy mua quá mức trên 70 và bán quá mức dưới 30. Khi chỉ số RSI giảm từ trên 70, nó có thể là một tín hiệu bán. Khi chỉ số RSI tăng từ dưới 30, nó có thể là một tín hiệu mua.

CCI

Chỉ số CCI đo mức giá đã di chuyển xa so với giá trung bình. Các bài đọc trên +100 ngụ ý một điều kiện mua quá mức. Các bài đọc dưới -100 ngụ ý một điều kiện bán quá mức. CCI phản ánh mức giá cực đoan.

Các tín hiệu chéo

Chiến lược này sử dụng Bollinger Bands để đánh giá mức mua quá mức / bán quá mức ngắn hạn, RSI để đo đạc đà tăng / giảm và CCI để xác định mức giá cực đoan.

Ưu điểm

  1. Kết hợp nhiều chỉ số cải thiện độ chính xác tín hiệu và giảm tín hiệu sai
  2. Nhận các cơ hội đảo ngược tại các điểm chuyển hướng
  3. Các tham số có thể tùy chỉnh thích nghi với các điều kiện thị trường khác nhau
  4. Bộ lọc CCI mịn giảm tiếng ồn và cải thiện độ ổn định

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

  1. Cả ba chỉ số đều có thể tạo ra tín hiệu xấu dẫn đến mất mát. Các tham số có thể được nới lỏng hoặc thêm các bộ lọc khác.
  2. CCI đấu tranh với thị trường hỗn loạn. có thể thay thế bằng đường trung bình động hoặc các chỉ số biến động.
  3. Chỉ dừng lỗ ở chỗ mà không lấy lợi nhuận.

Cơ hội tối ưu hóa

  1. Kiểm tra nhiều kết hợp tham số hơn để tìm thiết lập tối ưu
  2. Giới thiệu máy học để tự động điều chỉnh các thông số
  3. Chiến lược tăng lợi nhuận với mục tiêu lợi nhuận
  4. Kết hợp nhiều chỉ số như MACD, KD để xác nhận tín hiệu

Kết luận

Chiến lược này phân tích các điều kiện thị trường tổng thể bằng cách sử dụng các chỉ số Bollinger Bands, RSI và CCI. Nó xác định các điểm uốn cong thông qua các tín hiệu chéo để đảo ngược thị trường giao dịch. Với các tối ưu hóa hơn nữa như điều chỉnh tham số, cơ chế lấy lợi nhuận vv, nó có thể là một chiến lược chống xu hướng mạnh mẽ cho các môi trường thị trường khác nhau.


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

//@version=5
strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

//RSI
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

rsiPlot = plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

//cci
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


longCBB= close < lower
shortCBB = close>upper
longBRSI = rsi < 33
shortBRSI = rsi > 70
longcci = cci < -215
shortcci = cci > 250

strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci)
strategy.exit("Exit ", profit = 600)
strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci)
strategy.exit("Exit ", profit = 600)

Thêm nữa