Xu hướng Bollinger Band Breakout theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-22 14:31:17
Tags:

Tổng quan

Đây là một chiến lược theo xu hướng dựa trên chỉ số Bollinger Bands. Nó sử dụng sự đột phá của các dải Bollinger Bands trên và dưới để xác định hướng xu hướng và mở các vị trí tương ứng. Khi giá bắt đầu giảm trở lại, nó sử dụng lệnh dừng lỗ theo sau với khoảng cách năng động để thoát khỏi các vị trí và nhận ra lợi nhuận.

Chiến lược logic

Chiến lược này sử dụng Bollinger Bands để xác định hướng xu hướng. Bollinger Bands được xây dựng bằng cách tính lệch chuẩn của giá để tạo thành các dải trên và dưới. Khi giá vượt qua dải trên, nó chỉ ra sự khởi đầu xu hướng tăng. Khi giá vượt qua dải dưới, nó chỉ ra sự khởi đầu xu hướng giảm.

Logic giao dịch cụ thể là:

  1. Tính toán các dải giữa, trên và dưới của Bollinger Bands.

  2. Khi giá vượt qua dải trên, đi dài. Khi giá vượt qua dải dưới, đi ngắn.

  3. Sử dụng lệnh dừng lỗ để kiểm soát rủi ro và thoát ra khi giá bắt đầu giảm.

  4. Quay lại xu hướng khi giá phá vỡ các dải lại.

Sử dụng Bollinger Bands để xác định xu hướng và kết hợp với một lệnh dừng lỗ động có thể kiểm soát rủi ro một cách hiệu quả.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Sử dụng Bollinger Bands để xác định xu hướng, đơn giản và hiệu quả.

  2. Sự kết hợp của việc xâm nhập đột phá và dừng lỗ theo dõi năng động cân bằng bắt xu hướng và kiểm soát rủi ro.

  3. Cấu trúc mã sạch và ngắn gọn, dễ hiểu và sửa đổi.

  4. Một số tham số, dễ tối ưu hóa.

  5. Áp dụng cho các sản phẩm khác nhau, linh hoạt.

  6. Kết quả backtest tốt, với tiềm năng lợi nhuận lớn.

Phân tích rủi ro

Những rủi ro chính là:

  1. Bollinger Bands chỉ dựa vào thống kê, rủi ro của đường cong phù hợp.

  2. Khó phân biệt sự mở rộng phạm vi và xu hướng thực sự, có thể gây ra những đánh giá sai lầm.

  3. Các điểm dừng mất mát quá chặt, nguy cơ bị dừng bởi các dao động bình thường.

  4. Không tính đến chi phí giao dịch.

  5. Thời gian kiểm tra hậu quả hạn chế, nguy cơ quá tải.

Các giải pháp là:

  1. Tối ưu hóa các tham số hoặc thêm các chỉ số khác để xác minh tín hiệu.

  2. Cải thiện nhận dạng dao động và kênh.

  3. Điều chỉnh động stop loss dựa trên ATR vv.

  4. Thêm hoa hồng, chi phí trượt.

  5. Mở rộng thời gian kiểm tra, xác minh đa thị trường.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa bằng cách:

  1. Kiểm tra các hiệu ứng kết hợp của các chỉ số khác nhau.

  2. Cải thiện xác định dao động xu hướng.

  3. giới thiệu máy học để tối ưu hóa tham số động.

  4. Tối ưu hóa chiến lược dừng lỗ dựa trên kết quả backtest.

  5. Đánh giá và tính thêm chi phí giao dịch.

  6. Tối ưu hóa không gian tham số cho các thiết lập tối ưu.

  7. Thêm quản lý tiền để kiểm soát rủi ro vị trí.

Kết luận

Chiến lược này xác định hướng xu hướng với Bollinger Bands và kiểm soát rủi ro bằng cách dừng lỗ. Lý thuyết tổng thể rất đơn giản và rõ ràng. Nó có khả năng bắt xu hướng tốt, nhưng có thể được cải thiện bằng cách giới thiệu nhiều chỉ số kỹ thuật hơn, tối ưu hóa các tham số, thêm chi phí vv để làm cho nó mạnh mẽ hơn. Nhìn chung, chiến lược này cung cấp một cách tiếp cận dựa trên xu hướng Bollinger Bands đơn giản và thực tế.


/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true)

// Inputs //

sma = input(20,  minval=1)
mult   = input(1.2, minval=0.001, maxval=50)
src = input(close)

// alert msg  //

message_long_entry  = input("long entry")
message_short_entry = input("short entry")

// Calculations //

basis = sma(close, sma)
dev   = mult * stdev(close, sma)

upper = basis + dev
lower = basis - dev

// Backtest //
fromyear = input(2019, defval = 2019, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(1, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

leverage = input(1, "Leverage")

term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

// PLOT //

plot(basis, color = color.gray,  linewidth = 2)
lu = plot(upper, color = color.green, linewidth = 2)
ll = plot(lower, color = color.red,   linewidth = 2)

fill(lu, ll, color = color.gray)

// Signals //

long  = crossover(close, upper)
short = crossunder(close, lower)

// Strategy entry //
strategy.initial_capital = 50000
if (long and term)
    strategy.entry("long",  strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry)
    
if (short and term)
    strategy.entry("short",  strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry)

// strategy exit //

strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)
strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)





Thêm nữa