Chiến lược này là một chiến lược giao dịch đột phá hai theo dõi dựa trên Bollinger Bands. Nó sử dụng các đường ray trên và dưới của Bollinger Bands làm tín hiệu mua và bán và thiết lập điểm dừng lỗ để kiểm soát rủi ro.
Chiến lược này sử dụng các đường ray trên và dưới của Bollinger Bands. Bollinger Bands bao gồm một đường trung bình động và hai kênh lệch chuẩn tương ứng với nó. Một tín hiệu bán được tạo ra khi giá chạm hoặc phá vỡ đường ray trên của Bollinger Bands; Một tín hiệu mua được tạo ra khi giá chạm hoặc phá vỡ đường ray dưới của Bollinger Bands. Ngoài ra, chiến lược cũng thiết lập điểm dừng lỗ. Khi giá thấp hơn một tỷ lệ phần trăm nhất định của đường trung bình động, một lỗ dừng sẽ được xác định.
Đặc biệt, chiến lược tính toán đường trung bình động và hai lần độ lệch chuẩn của chu kỳ được chỉ định (chẳng hạn như 20 ngày) để vẽ Bollinger Bands. Đường sắt trên là đường trung bình động cộng với hai lần độ lệch chuẩn, và đường sắt dưới là đường trung bình động trừ hai lần độ lệch chuẩn. Khi giá đóng lớn hơn hoặc bằng đường sắt trên, một tín hiệu bán được phát hành; khi giá đóng nhỏ hơn hoặc bằng đường sắt dưới, một tín hiệu mua được phát hành. Ngoài ra, nếu giá thấp hơn một tỷ lệ phần trăm nhất định (chẳng hạn như 1%) của đường trung bình động, một tín hiệu dừng lỗ được phát hành.
Chiến lược này sử dụng các đặc điểm của Bollinger Bands để phát hành tín hiệu giao dịch khi biến động giá bất thường xảy ra, do đó nắm bắt các cơ hội đảo ngược giá.
So với các chiến lược đột phá hai đường đơn giản, chiến lược này thêm một cơ chế dừng lỗ. Điều này có thể kiểm soát hiệu quả tổn thất gây ra bởi các tín hiệu sai cá nhân. Việc thiết lập điểm dừng lỗ cũng tương đối hợp lý, gần với đường trung bình động, tránh stop loss quá nhiều gây ra quá nhiều lỗ.
Rủi ro lớn nhất của chiến lược này là Bollinger Bands không thể đảm bảo tính hợp lệ của tín hiệu giao dịch. Khi các tình huống đặc biệt xảy ra trên thị trường, giá có thể dao động mạnh và bất thường, trong trường hợp đó các tín hiệu giao dịch do Bollinger Bands phát hành có thể sai. Điều này có thể gây ra tổn thất đáng kể.
Ngoài ra, việc thiết lập điểm dừng lỗ cũng có thể quá mạnh hoặc bảo thủ, điều này sẽ ảnh hưởng đến lợi nhuận cuối cùng. Nếu phạm vi dừng lỗ quá lớn, các tín hiệu hợp lệ có thể thường xuyên dừng lỗ; nếu phạm vi dừng lỗ quá nhỏ, nó không thể kiểm soát hiệu quả lỗ.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Kiểm tra các kết hợp tham số khác nhau, chẳng hạn như các giá trị khác nhau của chu kỳ trung bình động, nhân độ lệch chuẩn, tỷ lệ giảm lỗ dừng, v.v., để tìm các tham số tối ưu;
Tăng các chỉ số khác để đánh giá và hình thành nhiều điều kiện lọc để tránh tín hiệu sai;
Tối ưu hóa các chiến lược dừng lỗ, chẳng hạn như sử dụng dừng lỗ di chuyển, dừng lỗ hàng loạt thay vì dừng lỗ đơn giản;
Xác nhận tín hiệu giao dịch bằng cách kết hợp các Bollinger Bands của các chu kỳ thời gian khác nhau để tránh bị mắc kẹt.
Nhìn chung, chiến lược này là sự kết hợp thực tế giữa theo dõi xu hướng và các chiến lược đột phá hai đường. Nó có thể nắm bắt các cơ hội đảo ngược khi biến động giá tăng lên, và thiết lập dừng lỗ để kiểm soát rủi ro. Bằng cách tối ưu hóa tham số, tăng lọc tín hiệu, tối ưu hóa chiến lược dừng lỗ, v.v., sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Strategy by Royce Mars", overlay=true) length = input.int(20, minval=1) maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev") stopLossPercent = input.float(1.0, title="Stop Loss Percent", minval=0.1, maxval=10, step=0.1) ma(source, length, _type) => switch _type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Buy and Sell Conditions buyCondition = close <= lower sellCondition = close >= upper // Stop Loss Condition stopLossCondition = close < basis * (1 - stopLossPercent / 100) // Strategy Execution strategy.entry("Buy", strategy.long, when=buyCondition) strategy.close("Buy", when=sellCondition or stopLossCondition) strategy.entry("Sell", strategy.short, when=sellCondition) strategy.close("Sell", when=buyCondition) // Plotting on the Chart plotshape(buyCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(sellCondition or stopLossCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar) // Plotting the Bollinger Bands plot(basis, "Basis", color=color.orange) p1 = plot(upper, "Upper Band", color=color.blue) p2 = plot(lower, "Lower Band", color=color.blue) fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))