Chiến lược này là một hệ thống theo xu hướng kết hợp các Bollinger Band, số liệu biến động và quản lý rủi ro. Nó nắm bắt các cơ hội xu hướng bằng cách theo dõi sự đột phá giá vượt ra ngoài Bollinger Band trong khi điều chỉnh kích thước vị trí một cách năng động bằng cách sử dụng ATR để kiểm soát rủi ro chính xác. Chiến lược cũng kết hợp một cơ chế phát hiện thời gian hợp nhất để lọc hiệu quả các tín hiệu sai trong các thị trường dao động.
Chiến lược hoạt động dựa trên logic cốt lõi sau: 1. Sử dụng trung bình động 20 giai đoạn như dải giữa của Bollinger Bands, với dải trên và dưới ở 2 độ lệch chuẩn. 2. Xác định các giai đoạn củng cố thị trường bằng cách so sánh chiều rộng Bollinger Band hiện tại với đường trung bình động của nó. Trong thời gian không hợp nhất, đi vào các vị trí dài trên các bước đột phá dải trên và các vị trí ngắn trên các bước đột phá dải dưới. 4. Sử dụng ATR 14 giai đoạn để tính toán động mức dừng lỗ và thiết lập mức lợi nhuận dựa trên tỷ lệ 2: 1 rủi ro-lợi nhuận. 5. Tự động tính toán kích thước vị trí cho mỗi giao dịch dựa trên giới hạn rủi ro tài khoản 1% và giá trị ATR.
Chiến lược này nắm bắt xu hướng thông qua các đột phá Bollinger Bands trong khi kết hợp một hệ thống kiểm soát rủi ro toàn diện. Điểm mạnh của nó nằm trong khả năng thích nghi cao và rủi ro được kiểm soát, mặc dù phải chú ý đến các rủi ro đột phá sai và đảo ngược xu hướng. Chiến lược có chỗ để cải thiện hơn nữa thông qua việc thêm các chỉ số xác nhận xu hướng và tối ưu hóa các cơ chế điều chỉnh tham số. Nhìn chung, nó đại diện cho một chiến lược theo xu hướng hợp lý và thực tế.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-08 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Breakout Strategy", overlay=true) // Input parameters length = input(20, title="Bollinger Bands Length") stdDev = input(2.0, title="Standard Deviation") riskRewardRatio = input(2.0, title="Risk/Reward Ratio") atrLength = input(14, title="ATR Length") riskPercentage = input(1.0, title="Risk Percentage per Trade") // Calculate Bollinger Bands basis = ta.sma(close, length) dev = stdDev * ta.stdev(close, length) upperBand = basis + dev lowerBand = basis - dev // Calculate ATR for position sizing atr = ta.atr(atrLength) // Plot Bollinger Bands plot(basis, color=color.blue, title="Basis") plot(upperBand, color=color.red, title="Upper Band") plot(lowerBand, color=color.green, title="Lower Band") // Market Consolidation Detection isConsolidating = (upperBand - lowerBand) < ta.sma(upperBand - lowerBand, length) * 0.5 // Breakout Conditions longCondition = ta.crossover(close, upperBand) and not isConsolidating shortCondition = ta.crossunder(close, lowerBand) and not isConsolidating // Risk Management: Calculate position size equity = strategy.equity riskAmount = equity * (riskPercentage / 100) positionSize = riskAmount / (atr * riskRewardRatio) // Execute trades with risk management if (longCondition) strategy.entry("Long", strategy.long, qty=positionSize) strategy.exit("Take Profit", from_entry="Long", limit=close + atr * riskRewardRatio, stop=close - atr) if (shortCondition) strategy.entry("Short", strategy.short, qty=positionSize) strategy.exit("Take Profit", from_entry="Short", limit=close - atr * riskRewardRatio, stop=close + atr) // Alert conditions for breakouts alertcondition(longCondition, title="Long Breakout", message="Long breakout detected!") alertcondition(shortCondition, title="Short Breakout", message="Short breakout detected!")