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.
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.
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.
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.
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.
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)