Chiến lược giao dịch chỉ số dựa trên Bollinger Bands

Tác giả:ChaoZhang, Ngày: 2023-12-08 16:52:24
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Quant Trading Strategy Based on Bollinger Bands. Đây là một chiến lược giao dịch chỉ số và cổ phiếu dựa trên kênh Bollinger Bands được cải thiện. Bằng cách điều chỉnh các thông số Bollinger Bands, nó nhận ra tối ưu hóa cho cả hai vị trí dài và ngắn để kiếm lợi nhuận trong cả thị trường xu hướng tăng và giảm.

Logic giao dịch

Các đường dây giữa là trung bình động của giá đóng cửa trong n ngày. Các đường dây trên và dưới là độ lệch trên và dưới đường dây giữa. Khi giá tiếp cận với dải trên, nó cho thấy thị trường có thể quá nóng và có thể có cơ hội ngắn. Khi giá tiếp cận với dải dưới, nó cho thấy thị trường có thể bị đánh giá thấp và có thể có cơ hội dài.

Chiến lược này sử dụng hai Bollinger Bands. Bollinger Band 1 phù hợp với giao dịch dài và Bollinger Band 2 phù hợp với giao dịch ngắn. Các thông số của Bollinger Band 1 được tối ưu hóa với chiều dài 25 và độ lệch 2,9 lần. Các thông số của Bollinger Band 2 được tối ưu hóa với chiều dài 36 và độ lệch 3,2 lần. Khi giá đóng vượt trên dải dưới của Bollinger Band 1, nó sẽ tạo ra tín hiệu dài. Khi giá đóng vượt dưới dải trên của Bollinger Band 2, nó sẽ tạo ra tín hiệu ngắn.

Phân tích lợi thế

So với các chiến lược Bollinger Bands truyền thống, chiến lược này có những lợi thế sau:

  1. Nó thực hiện giao dịch hai hướng cho cả hai bên dài và ngắn, có thể nắm bắt các cơ hội giao dịch ở các giai đoạn thị trường khác nhau.

  2. Các thông số được tối ưu hóa. Hai bộ các thông số Bollinger Bands được thử nghiệm kỹ lưỡng để tạo ra các tín hiệu giao dịch hiệu quả.

  3. Rủi ro có thể kiểm soát được. Phương pháp dừng lỗ di chuyển có thể kiểm soát hiệu quả rủi ro của một bên.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro tiềm ẩn cho chiến lược này:

  1. Rủi ro không hợp lệ của Bollinger Bands. Bollinger Bands có thể không hợp lệ trong thời gian biến động thị trường cực kỳ.

  2. Chúng ta có thể mở rộng đúng mức stop loss hoặc stop out kịp thời để tránh rủi ro này.

  3. Rủi ro tần suất giao dịch cao: Các thông số quá nhạy cảm có thể dẫn đến giao dịch thường xuyên và tăng chi phí giao dịch.

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

Vẫn còn chỗ để tối ưu hóa thêm chiến lược này:

  1. Kết hợp các chỉ số khác để lọc tín hiệu và tránh giao dịch sai khi Bollinger Bands thất bại.

  2. Điều chỉnh động các tham số để phù hợp với các đặc điểm thị trường của các giai đoạn khác nhau.

  3. Tối ưu hóa các phương pháp dừng lỗ bằng cách sử dụng dừng lỗ sau hoặc dừng lỗ chuyển động theo cấp số nhân để kiểm soát rủi ro hiệu quả.

  4. Kết hợp các thuật toán máy học để tự động tối ưu hóa các thông số.

Tóm lại

Tóm lại, chiến lược này tổng thể tối ưu hóa giao dịch hai hướng cho cả hai bên dài và ngắn dựa trên kênh và tối ưu hóa tham số Bollinger Bands kép. So với các chiến lược Bollinger Bands truyền thống, nó có những lợi thế của giao dịch hai hướng và kiểm soát rủi ro. Nó phù hợp để nắm bắt cơ hội trong các giai đoạn thị trường khác nhau và có giá trị thực tế nhất định. Nhưng rủi ro như thất bại của Bollinger Bands và dừng lỗ vẫn tồn tại. Nên tối ưu hóa và xác minh thêm trước khi sản xuất.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 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/
// © exlux99

//@version=4
strategy("BB NDX strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick = true, commission_type = strategy.commission.percent, commission_value = 0.01)

source = close
length = input(25, minval=1, title="Length BB long")
mult = input(2.9, minval=0.001, maxval=50, step=0.1, title="MULT BB long")

length2 = input(36, minval=1, title="Length BB short")
mult2 = input(3.2, minval=0.001, maxval=50, step=0.1, title="MULT BB short")


basis = sma(source, length)
dev = mult * stdev(source, length)
dev2 = mult2 * stdev(source, length2)

upper = basis + dev2
lower = basis - dev

buyEntry = crossover(source, lower)
sellEntry = crossunder(source, upper)

longEntry=input(true)
shortEntry=input(true)

g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1.0, step = 0.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)


tplong=input(0.065, step=0.005, title="Take profit % for long")
sllong=input(0.04, step=0.005, title="Stop loss % for long")
tpshort=input(0.025, step=0.005, title="Take profit % for short")
slshort=input(0.04, step=0.005, title="Stop loss % for short")

if(longEntry)
    strategy.entry("long",1,c,when=buyEntry)
    strategy.exit("short_tp/sl", "long", profit=close * tplong / syminfo.mintick, loss=close * sllong / syminfo.mintick, comment='LONG EXIT',  alert_message = 'closeshort')
    strategy.close("long",when=sellEntry)
if(shortEntry)
    strategy.entry("short",0,c,when=sellEntry)
    strategy.exit("short_tp/sl", "short", profit=close * tpshort / syminfo.mintick, loss=close * slshort / syminfo.mintick, comment='SHORT EXIT',  alert_message = 'closeshort')
    strategy.close("short",when=buyEntry)




Thêm nữa