Chiến lược Bollinger Bands Stop Loss

Tác giả:ChaoZhang, Ngày: 2023-11-23 15:49:12
Tags:

img

Tổng quan

Chiến lược Bollinger Bands là một chiến lược cổ điển sử dụng Bollinger Bands để theo dõi xu hướng và tín hiệu mua quá mức / bán quá mức.

Chiến lược này đánh giá các điều kiện mua quá mức / bán quá mức thông qua các chéo vàng / chết của Bollinger Bands trên / dưới để thiết lập các vị trí. Khu vực giữa các dải phản ánh phạm vi biến động thị trường hiện tại. Dải bao gồm dải trung bình, trên và dưới, trong đó dải giữa là trung bình di chuyển đơn giản N ngày và dải trên / dưới là dải trung bình +/- K độ lệch chuẩn.

Nguyên tắc

Bollinger Bands phản ánh sự biến động của thị trường và phạm vi dao động. Khớp với dải thấp hơn có nghĩa là tình trạng quá bán - khoảng trống có khả năng lấp đầy cao hơn. Do đó, các vị trí dài nên được xem xét dựa trên nguyên tắc đảo ngược trung bình. Tương tự như vậy, chạm vào dải trên đại diện cho các điều kiện mua quá mức tiềm ẩn và đảo ngược giá có khả năng, vì vậy các vị trí ngắn có thể được thiết lập để kiếm lợi nhuận từ các động thái giảm.

Chiến lược này kết hợp các tín hiệu mua quá mức / bán quá mức từ Bollinger Bands cho các mục theo dõi xu hướng.

Khi giá vượt trên dải dưới, thị trường thoát khỏi khu vực bán quá mức vào phạm vi hợp lý. Các vị trí dài có thể được mở. Khi giá vượt dưới dải trên, thị trường trở nên mua quá mức. Sau đó có thể mở bán ngắn.

Sau khi các lệnh được thực hiện, mức dừng lỗ phần trăm cố định được thiết lập để quản lý rủi ro. Khi lỗ vượt quá tỷ lệ dừng lỗ, các vị trí hiện tại được dừng để hạn chế lỗ tiếp theo.

Ưu điểm

  1. Xác định mức mua quá mức / bán quá mức bằng các dải Bollinger cho các thiết lập mua thấp-bán cao xét theo các đường chéo dải.

  2. Khám phá xu hướng thông qua tài sản biến động của Bollinger Bands.

  3. Cơ chế dừng lỗ có hiệu quả hạn chế lỗ tối đa cho mỗi giao dịch.

  4. Kết hợp theo dõi xu hướng và dừng lỗ dẫn đến lợi nhuận ổn định.

Rủi ro và tối ưu hóa

  1. Cài đặt tham số ảnh hưởng đến chất lượng tín hiệu. chiều dài băng tần trung N và nhân độ lệch chuẩn K nên được đặt hợp lý cho các thị trường khác nhau, nếu không độ chính xác sẽ bị ảnh hưởng.

  2. Stop loss quá lớn hoặc quá nhỏ làm tổn hại đến sự ổn định lợi nhuận. Tỷ lệ phần trăm quá lớn có nguy cơ tổn thất nặng hơn cho mỗi giao dịch, trong khi tỷ lệ phần trăm quá nhỏ có nguy cơ kích hoạt stop loss sớm. Tỷ lệ phần trăm hợp lý nên được thiết lập dựa trên các sản phẩm khác nhau.

  3. Các bộ lọc bổ sung với các chỉ số khác có thể cải thiện độ chính xác tín hiệu.

  4. Các thiết lập thời gian nắm giữ khác nhau có thể được thử nghiệm, chẳng hạn như kết hợp các dải thời gian theo giờ hoặc ngắn hơn để tăng tần suất giao dịch và cải thiện hiệu quả sử dụng vốn.

Kết luận

Đây là một chiến lược theo dõi xu hướng phổ biến. Thông qua tối ưu hóa các thông số, tích hợp các tín hiệu chính xác hơn và mức dừng lỗ, lợi nhuận ổn định có thể đạt được.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000)
source = input(close, "Source")
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50, step=0.001)
stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1)

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

var float lastTradePrice = na
var float stopLossLow = na
var float stopLossHigh = na
var bool currentIsLong = na

var bool nextExpectedIsLong = true

var bool existedLong = false
var bool existedShort = false

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

if (buyEntry and nextExpectedIsLong == true)
	strategy.entry("BBandLE", strategy.long, comment="BBandLE")
	nextExpectedIsLong := false
	if(nz(strategy.position_size[1], 0) < 0) // new position detected
	    lastTradePrice := close
	    stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
	    stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandLE")

if (sellEntry and nextExpectedIsLong == false)
	strategy.entry("BBandSE", strategy.short, comment="BBandSE")
	nextExpectedIsLong := true
	if(nz(strategy.position_size[1], 0) > 0) // new position detected
        lastTradePrice := close
        stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
        stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandSE")

strategy.close("BBandLE", close < stopLossLow)
strategy.close("BBandSE", close > stopLossHigh)

// if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh)
//     strategy.entry("BBandLE", strategy.long, comment="BBandLE")
// 	lastTradePrice := close
// 	stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
// 	stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
// if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow)
//     strategy.exit("BBandSE", strategy.short, comment="BBandSE")
//     lastTradePrice := close
//     stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
//     stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))

plot(source, "close", color.blue)
plot(lower, "lower", color.red)
plot(upper, "upper", color.red)
plot(stopLossLow, "StopLossLow", color.black)
plot(stopLossHigh, "StopLossHigh", color.black)
plot(lastTradePrice, "lastTradePrice", color.green)
plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green)
plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)




Thêm nữa