Chiến lược dừng theo dõi ATR dựa trên chỉ số UT Bot

Tác giả:ChaoZhang, Ngày: 2024-03-11 11:17:33
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số UT Bot được phát triển bởi QuantNomad và kết hợp ý tưởng về việc dừng lỗ. Mã ban đầu được viết bởi @Yo_adriiiiaan và được sửa đổi bởi @HPotter. Chiến lược sẽ được sử dụng kết hợp với khái niệm tiền thông minh của LuxAlgo. Hiện tại, chiến lược đang trong giai đoạn thử nghiệm.

Nguyên tắc chiến lược

Các nguyên tắc chính của chiến lược này là như sau:

  1. Khi giá đóng cửa cao hơn trung bình di chuyển đơn giản 50 giai đoạn, giao dịch dài được nhập.
  2. Đối với các vị trí dài, giá dừng lỗ sau được thiết lập. Giá dừng lỗ sau là 80% (1-20%) của giá đóng hiện tại. Giá dừng lỗ sau di chuyển lên với giá tăng nhưng không di chuyển xuống, do đó bảo vệ lợi nhuận.
  3. Đối với các vị trí ngắn, giá dừng lỗ sau cũng được thiết lập. Giá dừng lỗ sau là 120% (1+20%) của giá đóng hiện tại. Giá dừng lỗ sau di chuyển xuống với giá giảm nhưng không di chuyển lên.
  4. ATR (Average True Range) được sử dụng như một tham chiếu cho giá dừng theo dõi. Phương pháp tính toán cho giá dừng theo dõi ATR là: khi di chuyển lên, lấy giá lớn hơn của giá dừng theo dõi ATR trước đó và (giá đóng hiện tại - ATR * Giá trị chính); khi di chuyển xuống, lấy giá nhỏ hơn của giá dừng theo dõi ATR trước đó và (giá đóng hiện tại + ATR * Giá trị chính). Giá trị chính là một tham số được người dùng đặt để điều chỉnh độ nhạy của điểm dừng theo dõi.
  5. Dựa trên sự đột phá của giá ATR trailing stop, hướng vị trí hiện tại được xác định. Khi giá vượt qua giá ATR trailing stop, một vị trí dài được giữ; khi giá vượt qua dưới giá ATR trailing stop, một vị trí ngắn được giữ; trong các trường hợp khác, tình trạng vị trí hiện tại vẫn không thay đổi.

Phân tích lợi thế

  1. Việc thiết lập trailing stop có thể bảo vệ lợi nhuận một cách hiệu quả, cho phép chiến lược đạt được nhiều lợi nhuận hơn trong các thị trường xu hướng.
  2. Việc thiết lập stop loss riêng biệt cho các vị trí dài và ngắn có thể thích nghi với các điều kiện thị trường khác nhau.
  3. Sử dụng ATR làm tham chiếu cho mức dừng lỗ cho phép điều chỉnh năng động vị trí dừng lỗ, làm cho nó linh hoạt và hiệu quả hơn.
  4. Các thông số giá trị chính được cung cấp cho tối ưu hóa người dùng, có thể được điều chỉnh theo các giống và chu kỳ khác nhau để cải thiện khả năng thích nghi.

Phân tích rủi ro

  1. Trong thị trường bất ổn, việc dừng lại thường xuyên có thể dẫn đến giao dịch quá mức, tăng chi phí hoa hồng và giảm lợi nhuận.
  2. Phương pháp dừng kéo dài theo tỷ lệ phần trăm cố định tương đối đơn giản và có thể không thể đối phó tốt với biến động giá trong một số điều kiện thị trường.
  3. Chiến lược chỉ xem xét các điểm dừng và không đặt mục tiêu lợi nhuận cuối cùng, có thể bỏ lỡ một số cơ hội lợi nhuận.
  4. Sự lựa chọn các tham số có tác động đáng kể đến hiệu suất chiến lược, và các tham số không phù hợp có thể mang lại rủi ro rút vốn lớn hơn.

Hướng tối ưu hóa

  1. Các chỉ số hoặc điều kiện khác, chẳng hạn như khối lượng giao dịch và biến động, có thể được xem xét để tối ưu hóa các điều kiện nhập cảnh và cải thiện độ tin cậy tín hiệu.
  2. Đối với phương pháp tính toán dừng kéo theo, có thể khám phá các phương pháp phức tạp và hiệu quả hơn, chẳng hạn như sử dụng lỗ dừng parabolic hoặc lỗ dừng tỷ lệ phần trăm động.
  3. Một cơ chế mục tiêu lợi nhuận sau có thể được thêm vào, ví dụ, thiết lập các mục tiêu lợi nhuận năng động dựa trên ATR hoặc tỷ lệ phần trăm để khóa lợi nhuận tốt hơn.
  4. Tối ưu hóa tham số có thể được thực hiện cho các giống và chu kỳ khác nhau để tìm kết hợp tham số phù hợp nhất. Các tham số cũng có thể được điều chỉnh năng động theo những thay đổi trong điều kiện thị trường.

Tóm lại

Dựa trên chỉ số UT Bot, chiến lược này kết hợp logic dừng lại sau, có thể bảo vệ lợi nhuận trong thị trường xu hướng. Đồng thời, chiến lược thiết lập dừng lỗ riêng biệt cho các vị trí dài và ngắn, làm cho nó rất thích nghi. Sử dụng ATR như một tham chiếu cho việc dừng lại sau cho phép điều chỉnh năng động vị trí dừng lỗ, cải thiện tính linh hoạt. Tuy nhiên, chiến lược này có thể phải đối mặt với rủi ro chi phí giao dịch cao do dừng lại thường xuyên trong các thị trường hỗn loạn, và nó thiếu việc thiết lập mục tiêu lợi nhuận sau, có thể bỏ lỡ cơ hội lợi nhuận. Ngoài ra, sự lựa chọn các tham số có tác động đáng kể đến hiệu suất chiến lược.

Trong tương lai, chiến lược có thể được cải thiện bằng cách tối ưu hóa các điều kiện nhập cảnh, khám phá các phương pháp dừng lại phức tạp hơn, thêm cơ chế mục tiêu lợi nhuận kéo dài và tối ưu hóa các tham số cho các giống và chu kỳ khác nhau, để có được lợi nhuận ổn định hơn. Nhìn chung, ý tưởng chiến lược đơn giản và thẳng thắn, dễ hiểu và thực hiện, nhưng có không gian tối ưu hóa hơn và nó đáng để tiếp tục khám phá và cải thiện.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos = 0  
pos :=   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Thêm nữa