Chiến lược giao dịch Bollinger Band đa bộ lọc

Tác giả:ChaoZhang, Ngày: 2024-01-17 15:12:57
Tags:

img

Tổng quan

Chiến lược giao dịch Bollinger Band đa bộ lọc là một chiến lược giao dịch định lượng kết hợp chỉ số Bollinger Band, chỉ số trung bình động, chỉ số RSI và các tính năng đồ họa đường K để sàng lọc nhiều điều kiện để tạo ra các tín hiệu giao dịch khi các điều kiện được đáp ứng.

Nguyên tắc chiến lược

Tính toán chỉ số

Chiến lược này chủ yếu sử dụng ba chỉ số: Bollinger Bands, moving average và RSI. Trong số đó, đường ray giữa của Bollinger Bands là đường trung bình di chuyển đơn giản của giá n ngày, và đường ray trên và dưới là đường ray giữa +2 độ lệch chuẩn và đường ray giữa -2 độ lệch chuẩn tương ứng. Chỉ số RSI là một giá trị từ 0 đến 100 được tính dựa trên phạm vi tăng / giảm trong một khoảng thời gian nhất định.

Các tín hiệu giao dịch

Chiến lược tạo ra tín hiệu giao dịch thông qua ba điều kiện chính sau:

(1) Bollinger Lower-band breakout & K-line body contradiction Khi giá đóng phá vỡ lower-band lên và màu sắc của K-line body mâu thuẫn với hướng xu hướng hiện tại, đi dài.

(2) Bollinger breakout upper-band & K-line body contradiction. Khi giá đóng phá vỡ băng trên xuống và màu sắc của K-line body mâu thuẫn với hướng xu hướng hiện tại, đi ngắn.

Nếu hướng vị trí phù hợp với sự đảo ngược màu sắc cơ thể K-line, đóng vị trí.

Ngoài ra, chiến lược cũng thiết lập các bộ lọc trung bình động, bộ lọc thân K-line, bộ lọc RSI và các điều kiện phụ khác để kiểm soát nghiêm ngặt việc nhập cảnh.

Phân tích lợi thế

  • Kiểm soát nhiều điều kiện nghiêm ngặt có thể làm giảm nguy cơ phát triển sai
  • Phương pháp theo dõi xu hướng làm giảm tần suất giao dịch
  • Chỉ số RSI giúp tránh bẫy đảo ngược

Phân tích rủi ro

  • Cài đặt tham số Bollinger không chính xác có thể dẫn đến ít tín hiệu
  • Các vụ đào thoát thất bại có thể gây ra tổn thất lớn hơn.
  • Tần suất giao dịch thấp hơn có thể bỏ lỡ một số cơ hội giao dịch

Rủi ro có thể được giảm bằng cách điều chỉnh các thông số Bollinger và kiểm soát nghiêm ngặt dừng.

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

  • Kiểm tra hiệu suất chiến lược dưới các thông số khác nhau để tìm các thông số tối ưu
  • Thêm thuật toán học máy để tự động tối ưu hóa các tham số
  • Thêm nhiều yếu tố và bộ lọc để cải thiện sự ổn định của chiến lược

Tóm lại

Nhìn chung, chiến lược này là một chiến lược theo xu hướng trung hạn và dài hạn điển hình. Bằng cách sàng lọc nhiều điều kiện và kiểm soát chặt chẽ thời gian vào và ra với cách tiếp cận giao dịch xu hướng, nó có thể giảm giao dịch không cần thiết và nắm bắt xu hướng thị trường trung hạn và dài hạn.


/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true )

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

usebf = input(true, defval = true, title = "Use body-filter")
usecf = input(true, defval = true, title = "Use color-filter")
userf = input(true, defval = true, title = "Use RSI-filter")

fromyear = input(1900, defval = 1900, 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(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebf == false

//Color filter
bar = close > open ? 1 : close < open ? -1 : 0 
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//RSI Filter
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
ursi = rsi > 70 or userf == false
drsi = rsi < 30 or userf == false

//Signals
up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0)
dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if  exit
    strategy.close_all()

Thêm nữa