Chiến lược ngăn chặn kéo dài dựa trên ATR cho ES

Tác giả:ChaoZhang, Ngày: 2024-01-12 14:52:23
Tags:

img

Tổng quan

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 logic

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.

Ưu điểm

  1. Sử dụng ATR có thể tự động thích nghi với những thay đổi về biến động thị trường và giảm xác suất dừng lỗ được kích hoạt.
  2. Phương pháp theo dõi xu hướng là đơn giản và hiệu quả để tránh rủi ro theo đuổi đỉnh và đáy.
  3. Việc dừng lại sẽ giữ lợi nhuận và tránh đưa lại các giao dịch có lợi nhuận.

Phân tích rủi ro

  1. Cài đặt tham số ATR không chính xác có thể làm cho phạm vi stop loss quá lớn hoặc quá nhỏ.
  2. Những thay đổi mạnh mẽ về biến động của chứng khoán cơ bản có thể gây ra sự kích hoạt dừng lỗ bất thường.
  3. BÁI dừng lại có thể quá bảo thủ để theo dõi xu hướng.

Hướng dẫn tối ưu hóa

  1. Xem xét tối ưu hóa các thông số ATR kết hợp với các số liệu biến động.
  2. Kiểm tra các thuật toán dừng lại khác nhau như tỷ lệ dừng lại, v.v.
  3. Bộ lọc tín hiệu nhập cảnh kết hợp với chỉ số xu hướng để tránh tín hiệu xu hướng sai.

Kết luậ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)


Thêm nữa