Chiến lược này là một chiến lược dừng theo dõi được áp dụng cho hợp đồng tương lai E-mini S&P500 (ES). Nó sử dụng ATR 10 ngày như một tham chiếu và đặt phạm vi dừng lỗ lên 3 lần ATR để xác định đường dừng dài và ngắn. Chiến lược đánh giá xu hướng theo sự thay đổi hướng của đường dừng ATR và tạo ra các tín hiệu nhập vào tại các điểm chuyển hướng của xu hướng. Một khi được nhập, nó sẽ điều chỉnh các đường dừng lỗ trong thời gian thực để theo dõi chuyển động giá, bảo vệ lợi nhuận.
Chiến lược này sử dụng hl2 làm nguồn giá. Đầu tiên nó tính toán ATR 10 ngày, và cho phép người dùng lựa chọn giữa sử dụng phương pháp SMA hoặc chức năng ATR tích hợp để tính toán ATR. Sau khi có được ATR, nó thêm 3 lần ATR lên và xuống để tạo ra phạm vi. Hai đường phạm vi là đường dừng lỗ.
Phương pháp đánh giá xu hướng là khi giá vượt quá ranh giới trên, nó dài; khi giá vượt qua ranh giới dưới, nó ngắn. Khi giá quay trở lại phạm vi, nó xác nhận sự đảo ngược xu hướng. Tại thời điểm này, nếu chuyển từ ngắn sang dài, nó sẽ tạo ra tín hiệu đầu vào dài; nếu chuyển từ dài sang ngắn, nó sẽ tạo ra tín hiệu đầu vào ngắn.
Sau khi nhập, đường dừng lỗ dài được đặt ở giới hạn trên trừ 1 dấu chấm, và đường dừng lỗ ngắn được đặt ở giới hạn dưới cộng với 1 dấu chấm, để bảo vệ lợi nhuận.
Nói chung, đây là một chiến lược theo xu hướng mạnh mẽ. Nó giải quyết vấn đề xác định phạm vi dừng lỗ và giảm rủi ro bằng cách điều chỉnh dừng lại một cách năng động dựa trên ATR. Đồng thời, các điểm dừng sau khóa lợi nhuận. Nhưng vẫn còn chỗ để tối ưu hóa các thông số như thời gian ATR, thuật toán dừng, v.v. Với việc thử nghiệm và điều chỉnh thêm, chiến lược này có thể trở thành một chiến lược theo xu hướng với độ bền cao.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true) // Given ATR study Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend // Entry logic based on trend change longCondition = trend == 1 and trend[1] == -1 shortCondition = trend == -1 and trend[1] == 1 if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Trailing stop loss logic // For long positions, trail 1 point below the up plot longStopPrice = up - 1 // For short positions, trail 1 point above the dn plot shortStopPrice = dn + 1 strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice) strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)