Chiến lược này sử dụng Bollinger Band breakout để tạo ra tín hiệu giao dịch và thực hiện giao dịch cặp giữa hai tài sản tương quan tích cực MCL và YG. Nó đi dài MCL và ngắn YG khi giá MCL chạm vào dải trên, và đi ngắn MCL và dài YG khi giá MCL chạm vào dải dưới, để giao dịch dọc theo xu hướng giá.
Đầu tiên, chiến lược tính toán đường SMA và StdDev dựa trên giá đóng trong một khoảng thời gian nhất định. Sau đó nó thêm một sự thay đổi trên và dưới SMA để tạo thành các dải trên và dưới của Bollinger Bands. Một tín hiệu mua được tạo ra khi giá chạm vào dải trên và một tín hiệu bán khi giá chạm vào dải dưới.
Chiến lược này sử dụng logic giao dịch đột phá của Bollinger Bands - đi dài khi giá phá vỡ trên dải trên và đi ngắn khi giá phá vỡ dưới dải dưới. Bollinger Bands điều chỉnh chiều rộng của các dải dựa trên biến động của thị trường, giúp lọc tiếng ồn thị trường trong thời gian dao động. Không giống như các dải kênh cố định, Bollinger Bands mở rộng trong thời gian biến động cao và hẹp trong thời gian biến động thấp. Điều này cho phép nó lọc một số tiếng ồn khi biến động cao và nắm bắt các đột phá nhỏ hơn khi biến động thấp.
Nó thực hiện giao dịch cặp giữa hai tài sản tương quan tích cực MCL và YG. Khi MCL vượt qua dải trên, nó cho thấy MCL đang trong xu hướng tăng. Chiến lược đi dài MCL và ngắn YG - mua tài sản mạnh hơn và bán tài sản yếu hơn, để hưởng lợi từ sự khác biệt về giá của chúng.
Các rủi ro có thể được giảm bằng cách tối ưu hóa các tham số, chọn tài sản có mối tương quan và thanh khoản mạnh hơn, thiết lập dừng lỗ thích hợp v.v.
Nhìn chung, chiến lược đơn giản và thẳng thắn, nắm bắt xu hướng với Bollinger Bands và đạt được alpha từ giao dịch cặp. Nhưng có chỗ để cải thiện trong điều chỉnh tham số, dừng lỗ và lựa chọn cặp. Kiểm tra thêm các tham số, phương tiện giao dịch, bộ lọc xu hướng vv có thể cải thiện hiệu suất chiến lược.
/*backtest start: 2022-11-07 00:00:00 end: 2023-11-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © shark792 //@version=5 // 1. Define strategy settings strategy(title="MCL-YG Pair Trading Strategy", overlay=true, pyramiding=0, initial_capital=10000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) smaLength = input.int(title="SMA Length", defval=20) stdLength = input.int(title="StdDev Length", defval=20) ubOffset = input.float(title="Upper Band Offset", defval=1, step=0.5) lbOffset = input.float(title="Lower Band Offset", defval=1, step=0.5) usePosSize = input.bool(title="Use Position Sizing?", defval=true) riskPerc = input.float(title="Risk %", defval=0.5, step=0.25) // 2. Calculate strategy values smaValue = ta.sma(close, smaLength) stdDev = ta.stdev(close, stdLength) upperBand = smaValue + (stdDev * ubOffset) lowerBand = smaValue - (stdDev * lbOffset) riskEquity = (riskPerc / 100) * strategy.equity atrCurrency = (ta.atr(20) * syminfo.pointvalue) posSize = usePosSize ? math.floor(riskEquity / atrCurrency) : 1 // 3. Output strategy data plot(series=smaValue, title="SMA", color=color.teal) plot(series=upperBand, title="UB", color=color.green, linewidth=2) plot(series=lowerBand, title="LB", color=color.red, linewidth=2) // 4. Determine long trading conditions enterLong = ta.crossover(close, upperBand) exitLong = ta.crossunder(close, smaValue) // 5. Code short trading conditions enterShort = ta.crossunder(close, lowerBand) exitShort = ta.crossover(close, smaValue) // 6. Submit entry orders if enterLong strategy.entry(id="EL", direction=strategy.long, qty=posSize) if enterShort strategy.entry(id="ES", direction=strategy.short, qty=posSize) // 7. Submit exit orders strategy.close(id="EL", when=exitLong) strategy.close(id="ES", when=exitShort)