
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 S&P 500 tương lai E-mini (ES). Nó sử dụng ATR 10 ngày làm tham chiếu và thiết lập đường dừng của nhiều đầu và đầu trống với 3 lần ATR làm phạm vi dừng. Chiến lược này đánh giá xu hướng bằng cách thay đổi hướng của đường ATR và tạo ra tín hiệu vào cửa tại điểm chuyển hướng. Sau khi vào cửa, nó sẽ điều chỉnh đường dừng trong thời gian thực để đường dừng theo dõi giá và 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, tính ATR 10 ngày và cho người dùng lựa chọn tính ATR bằng cách sử dụng phương thức SMA hoặc hàm ATR tích hợp. Sau khi tính ATR, hãy thêm 3 lần ATR lên dưới như là phạm vi. Hai phạm vi này là đường dừng lỗ.
Phương pháp đánh giá xu hướng là, khi giá vượt quá biên giới trên, thì là đầu nhiều; khi giá rơi xuống biên giới dưới, thì là đầu không. Khi giá quay trở lại phạm vi, thì xác nhận xu hướng đảo chiều.
Sau khi vào sân, đường dừng đa đầu được thiết lập để di chuyển xuống 1 điểm ở biên trên và đường dừng đầu rỗng được thiết lập để di chuyển lên 1 điểm ở biên dưới, để bảo vệ theo dõi.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng phổ biến hơn. Nó giải quyết vấn đề khó xác định phạm vi dừng lỗ, giảm rủi ro bằng cách điều chỉnh động ATR. Đồng thời theo dõi dừng lỗ để bảo vệ lợi nhuận.
/*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)