Chiến lược giao cắt đường trung bình động CCI với chỉ báo RSI của Bollinger Bands


Ngày tạo: 2023-12-20 16:24:49 sửa đổi lần cuối: 2023-12-20 16:24:49
sao chép: 0 Số nhấp chuột: 1107
1
tập trung vào
1621
Người theo dõi

Chiến lược giao cắt đường trung bình động CCI với chỉ báo RSI của Bollinger Bands

Tổng quan

Chiến lược này kết hợp với việc sử dụng ba chỉ số Brin Band, chỉ số tương đối mạnh (RSI) và chỉ số đường hàng hóa (CCI) để tìm kiếm tín hiệu giao thoa, phát ra tín hiệu mua và bán. Chiến lược này nhằm phát hiện hiện tượng mua quá mức và bán quá mức của thị trường, tham gia vào điểm đảo ngược để có được lợi nhuận đầu tư tốt hơn.

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

Vành đai Brin

Các vùng Brin bao gồm đường trung, đường trên và đường dưới. Đường trung thường sử dụng đường trung bình di chuyển 20 ngày. Đường trên và đường dưới là hai điểm chênh lệch tiêu chuẩn trên và dưới đường trung.

Chỉ số RSI

Chỉ số RSI phản ánh sự thay đổi tốc độ tăng và giảm của giá đóng cửa trong một khoảng thời gian, được sử dụng để đo tỷ lệ sức mạnh của giá mua và giá bán. Các giá trị RSI ở 0 đến 30 là vùng bán tháo, ở 70 đến 100 là vùng mua tháo. Khi RSI giảm từ vùng mua tháo, nó có thể được sử dụng như một tín hiệu bán, khi RSI tăng từ vùng mua tháo, nó có thể được sử dụng như một tín hiệu mua.

Chỉ số CCI

Chỉ số CCI được sử dụng để đo mức độ giá cổ phiếu lệch khỏi giá trung bình của nó. Trong đó, + 100 đại diện cho giá cao hơn rất nhiều so với giá trung bình, là mua quá mức; -100 đại diện cho giá thấp hơn rất nhiều so với giá trung bình, là bán quá mức.

Chiến lược tín hiệu chéo

Phương pháp này sử dụng Brin để đánh giá giá cả có quá mua hay bán trong thời gian ngắn, sử dụng chỉ số RSI để đánh giá cân bằng sức mạnh mua bán, sử dụng chỉ số CCI để đánh giá mức độ lệch giá. Brin, RSI và chỉ số CCI đồng thời đưa ra tín hiệu mua / bán, phát hành lệnh giao dịch.

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

  1. Kết hợp nhiều chỉ số phán đoán, giảm tín hiệu giả, tăng độ chính xác tín hiệu
  2. Khám phá các điểm thay đổi của thị trường và nắm bắt các xu hướng đảo ngược
  3. Các tham số có thể được điều chỉnh tùy chỉnh để phù hợp với môi trường thị trường khác nhau
  4. Sử dụng bộ lọc CCI đồng nhất, giảm tiếng ồn, tăng tính ổn định

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

  1. Các chỉ số Bollinger Bands, RSI và CCI có thể tạo ra tín hiệu sai, gây tổn thất giao dịch. Các tham số có thể được nới lỏng thích hợp, hoặc thêm các chỉ số khác để xác minh.
  2. Chỉ số CCI không phù hợp với hành vi cong, có thể thay thế bằng chỉ số đường trung bình hoặc dao động.
  3. Chỉ thị giao dịch chỉ dừng lỗ, không có dừng. Có thể thêm dừng di động để khóa một phần lợi nhuận.

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

  1. Thử nghiệm nhiều hơn để tìm ra các tham số tốt nhất;
  2. Thêm các thuật toán học máy để tối ưu hóa các tham số trong thời gian thực;
  3. Thêm chiến lược ngăn chặn, đặt mục tiêu lợi nhuận;
  4. Kết hợp với các chỉ số khác, như MACD, KD và các chỉ số khác để đánh giá độ tin cậy của tín hiệu.

Tóm tắt

Chiến lược này tổng hợp xem xét tình hình thị trường ngắn hạn, trung hạn và dài hạn, thông qua tín hiệu chéo của ba chỉ số Brin, RSI và CCI, để đánh giá thời gian thị trường đảo ngược, thuộc chiến lược theo dõi đảo ngược mạnh mẽ hơn. Có thể được tối ưu hóa hơn nữa bằng cách điều chỉnh tham số, phương thức dừng, v.v.

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