Chiến lược kênh sóng và dừng lỗ


Ngày tạo: 2023-11-23 15:49:12 sửa đổi lần cuối: 2023-11-23 15:49:12
sao chép: 1 Số nhấp chuột: 774
1
tập trung vào
1621
Người theo dõi

Chiến lược kênh sóng và dừng lỗ

Tổng quan

Chiến lược Bollinger Bands là một chiến lược cổ điển sử dụng các dải biến động của đường Bollinger để theo dõi xu hướng và vượt quá tín hiệu bán tháo. Phiên bản này dựa trên chiến lược ban đầu đã thêm cơ chế dừng lỗ để kiểm soát rủi ro.

Chiến lược đánh giá tình trạng quá mua và quá bán của thị trường thông qua các đường ray trên và dưới của Brin, theo dõi xu hướng bằng cách theo dõi Brin. Khu vực giữa đường ray trên và dưới của Brin phản ánh phạm vi biến động của thị trường hiện tại.

Nguyên tắc

Boll band là một chỉ số kỹ thuật phản ánh mức độ biến động và độ dao động của thị trường. Khi giá chạm gần đường đi xuống của Boll band, nó cho thấy thị trường đang ở trạng thái quá bán, tại thời điểm này, các lỗ hổng liên tiếp có nhiều khả năng được lấp đầy, nên xem xét việc thiết lập một vị trí giao dịch đa dạng.

Chiến lược này kết hợp với tín hiệu mua bán quá mức của Binance để tạo ra các vị trí theo dõi xu hướng và thêm các cơ chế dừng lỗ để kiểm soát rủi ro.

Khi giá lên và đi qua vòng Brin xuống đường, thị trường sẽ đi qua vùng bán tháo và vào vùng hợp lý. Khi giá xuống và đi qua vòng Brin xuống đường, thị trường sẽ đi qua vùng mua tháo và vào vùng bán tháo.

Sau khi xây dựng vị trí, thiết lập mức dừng cố định để kiểm soát rủi ro. Khi lỗ vượt quá mức dừng đặt, dừng rút khỏi vị trí hiện tại để tránh thua lỗ quá lớn.

Ưu điểm

  1. Chiến lược này kết hợp với chỉ số Bollinger Bands để đánh giá các khu vực quá mua quá bán, bằng cách đánh giá giá cả giao nhau với đường ray lên xuống để đạt được giá thấp và giá cao.

  2. Sử dụng tính năng biến động của Brin để theo dõi xu hướng giao dịch

  3. Tăng cơ chế dừng lỗ để kiểm soát hiệu quả tổn thất tối đa của một giao dịch

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

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

  1. Việc đặt các tham số của Brin sẽ ảnh hưởng đến chất lượng tín hiệu giao dịch. Độ dài đường trung tâm n và số lần chênh lệch chuẩn k cần được thiết lập hợp lý cho các thị trường khác nhau, nếu không sẽ ảnh hưởng đến độ chính xác của tín hiệu giao dịch.

  2. Cài đặt dừng lỗ quá lớn quá nhỏ sẽ ảnh hưởng đến sự ổn định của thu nhập. Cài đặt mức độ dừng lỗ sẽ làm tăng rủi ro tổn thất đơn lẻ, quá nhỏ sẽ làm tăng xác suất dừng lỗ được kích hoạt. Cần thiết lập tỷ lệ dừng lỗ hợp lý theo các giống khác nhau.

  3. Có thể xem xét lọc tín hiệu kết hợp với các chỉ số khác để tăng độ chính xác tín hiệu giao dịch.

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

Tóm tắt

Chiến lược này kết hợp với việc xác định vị trí bán tháo bán tháo của Brin và tăng mức dừng để kiểm soát rủi ro, là một chiến lược theo dõi xu hướng phổ biến. Bằng cách thiết lập tham số tối ưu hóa, kết hợp với tín hiệu giao dịch chính xác hơn và thiết lập mức dừng, có thể đạt được lợi nhuận ổn định.

Mã nguồn chiến lượ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)