Chiến lược này là một phiên bản cải tiến của hệ thống theo xu hướng Bollinger Bands truyền thống. Nó theo dõi hành động giá trong ba lần liên tiếp chạm vào Bollinger Bands để xác nhận độ tin cậy của xu hướng, dẫn đến tỷ lệ thắng cao hơn. Chiến lược sử dụng trung bình động 20 giai đoạn như dải giữa và 2 độ lệch tiêu chuẩn cho dải trên và dưới. Thông qua phân tích chi tiết về mối quan hệ giá với ranh giới dải, nó đạt được một hệ thống giao dịch có lợi thế độc đáo.
Hệ thống này tạo ra một tín hiệu dài khi giá phá vỡ dưới dải dưới ba lần liên tiếp, và một tín hiệu ngắn khi giá phá vỡ trên dải trên ba lần liên tiếp. Cơ chế này lọc hiệu quả các đột phá sai, cải thiện độ tin cậy giao dịch. Chiến lược sử dụng dải giữa (trung bình động 20 giai đoạn) làm tín hiệu thoát, hoàn thành giao dịch khi giá quay trở lại dải giữa.
Chiến lược này cải thiện so với các hệ thống giao dịch Bollinger Bands truyền thống bằng cách thực hiện một cách tiếp cận theo xu hướng rất đáng tin cậy. Cơ chế xác nhận ba lần chạm độc đáo của nó làm tăng hiệu quả tỷ lệ thắng, trong khi cơ chế thoát dựa trên đường trung bình chuyển động cung cấp một giải pháp kiếm lợi nhuận hợp lý. Mặc dù có rủi ro vốn có, các hướng tối ưu hóa được đề xuất có thể tăng thêm sự ổn định và lợi nhuận của chiến lược.
/*backtest start: 2024-11-10 00:00:00 end: 2024-12-09 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("Bollinger Bands Strategy - 3 Crossings", overlay=true) // Input Parameters length = input.int(20, title="Bollinger Bands Length", minval=1) src = input(close, title="Source") mult = input.float(2.0, title="Multiplier", step=0.1) // Calculate Bollinger Bands basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Plot Bollinger Bands plotBasis = plot(basis, color=color.blue, title="Basis") plotUpper = plot(upper, color=color.red, title="Upper Band") plotLower = plot(lower, color=color.green, title="Lower Band") fill(plot1=plotUpper, plot2=plotLower, color=color.new(color.blue, 90), title="Band Fill") // Counter Variables var int longCrossCount = 0 var int shortCrossCount = 0 // Detect Crossings longCondition = close < lower // Price closes below the lower band shortCondition = close > upper // Price closes above the upper band if longCondition longCrossCount += 1 // Increment the counter for long shortCrossCount := 0 // Reset the short counter if shortCondition shortCrossCount += 1 // Increment the counter for short longCrossCount := 0 // Reset the long counter if not longCondition and not shortCondition longCrossCount := 0 // Reset if no crossing shortCrossCount := 0 // Entry and Exit Rules if longCrossCount >= 3 and strategy.position_size <= 0 strategy.entry("Long", strategy.long) longCrossCount := 0 // Reset the counter after entering if shortCrossCount >= 3 and strategy.position_size >= 0 strategy.entry("Short", strategy.short) shortCrossCount := 0 // Reset the counter after entering // Exit Condition (When Price Returns to the Middle Band) exitCondition = ta.crossover(src, basis) or ta.crossunder(src, basis) if exitCondition and strategy.position_size > 0 strategy.close("Long") if exitCondition and strategy.position_size < 0 strategy.close("Short")