Chiến lược giao dịch cặp MCL-YG Bollinger Band Breakout

Tác giả:ChaoZhang, Ngày: 2023-11-14
Tags:

img

Tổng quan

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

Chiến lược logic

Đầ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.

Ưu điểm

  1. Giao dịch đột phá dựa trên Bollinger Bands có thể lọc hiệu quả tiếng ồn thị trường và xác định xu hướng
  2. Giao dịch cặp trên các tài sản tương quan có thể đạt được lợi nhuận alpha từ chênh lệch giá
  3. Định kích thước vị trí động giúp kiểm soát rủi ro cho các giao dịch cá nhân
  4. Định nghĩa bước vào và bước ra ngược tiêu chuẩn làm cho logic chiến lược đơn giản và rõ ràng

Rủi ro

  1. Điều chỉnh tham số Bollinger Bands kém có thể dẫn đến quá nhiều tín hiệu hoặc tín hiệu không rõ ràng
  2. Sự tương quan giảm giữa các tài sản có thể làm giảm lợi nhuận từ giao dịch cặp
  3. Những người phá vỡ có thể bị lừa bởi các tín hiệu sai trong các thị trường bất ổn, gây ra tổn thất
  4. Không có lỗ dừng có thể dẫn đến tổn thất lớn hơn cho các giao dịch đơn lẻ

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.

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

  1. Tối ưu hóa các thông số Bollinger Bands để tìm kết hợp tốt nhất
  2. Kiểm tra nhiều cặp tài sản tương quan và chọn sự kết hợp tốt nhất
  3. Thêm logic dừng lỗ để giới hạn lỗ cho các giao dịch đơn
  4. Thêm thêm bộ lọc để tránh tín hiệu thoát sai
  5. Bao gồm các yếu tố khác như xác nhận khối lượng để cải thiện thời gian nhập cảnh

Tóm lại

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)



Thêm nữa