Đây là một chiến lược giao dịch ngắn hạn sử dụng chỉ số ADX để lọc các tín hiệu đột phá. Nó đi ngắn khi giá vượt qua dải Bollinger phía trên và ADX đang giảm, và đi dài khi giá vượt qua dải Bollinger phía dưới và ADX đang tăng. Chiến lược cũng đặt dừng lỗ và lấy lợi nhuận tự động cho giao dịch tự động đầy đủ.
Cốt lõi của chiến lược này là sử dụng Bollinger Bands cho các tín hiệu đột phá. Các dải trên và dưới của Bollinger Bands đại diện cho hai sai lệch tiêu chuẩn của giá, vì vậy đột phá thường ngụ ý rằng giá đang đi vào một xu hướng mạnh. Ngoài ra, chỉ số ADX được giới thiệu ở đây như một bộ lọc để tránh đột phá sai.
Đặc biệt, chiến lược này tính toán Bollinger Bands bằng cách sử dụng 33 giai đoạn giá đóng. Dải giữa là một trung bình di chuyển đơn giản 33 giai đoạn, và các dải trên / dưới được đặt ở hai độ lệch chuẩn trên / dưới dải giữa. Chiến lược báo hiệu ngắn khi giá đóng dưới dải trên và ADX 8 giai đoạn dưới ADX 15 giai đoạn. Nó báo hiệu dài khi giá đóng trên dải dưới và ADX 8 giai đoạn trên ADX 15 giai đoạn. Các bước ra được đặt ở mức 800 điểm lợi nhuận và 400 điểm dừng lỗ.
Là một chiến lược phá vỡ kết hợp các bộ lọc xu hướng và động lực, nó có một số lợi thế:
Ngoài ra còn có một số rủi ro với chiến lược này:
Để giảm thiểu những rủi ro này, chúng ta có thể tinh chỉnh các thông số BB để thu hẹp các băng tần, điều chỉnh các khoảng thời gian ADX để tránh lọc quá mức và giảm stop loss để kiểm soát lỗ giao dịch duy nhất.
Có chỗ cho việc tối ưu hóa thêm:
Kết luận, đây là một chiến lược đột phá đơn giản và thực tế với bộ lọc. Xác định xu hướng bằng BB và lọc tín hiệu bằng ADX giúp tránh tiếng ồn trong thời gian giới hạn phạm vi và nắm bắt các cơ hội xu hướng ở một mức độ nào đó.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Hizbullah XAUUSD Sniper", overlay=true) Price = close Length = input(33) Mult = input(2) Basis = sma(Price, Length) StdDev = Mult * stdev(Price, Length) Upper = Basis + StdDev Lower = Basis - StdDev ADX_Length = input(4) TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) SmoothedTrueRange = sma(TrueRange, ADX_Length) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length) SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length) DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100 SmoothedADX1 = ema(DX, input(8)) SmoothedADX2 = ema(DX, input(15)) Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2 Take_Profit = input(800) Stop_Loss = input(400) strategy.entry("ShortEntry", true, when = Condition1) strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)