
Chiến lược này dựa trên thiết kế chỉ số ATR của cơ chế theo dõi động, có thể điều chỉnh vị trí dừng lỗ trong thời gian thực, đồng thời đảm bảo dừng lỗ, để kiếm được lợi nhuận lớn hơn.
Chiến lược sử dụng ATR nhanh chu kỳ 5 và ATR chậm chu kỳ 10 để xây dựng hai lớp động theo dõi dừng. Khi giá chạy theo hướng thuận lợi, lớp nhanh sẽ khởi động lần đầu tiên theo dõi, thắt chặt vị trí dừng; Khi giá điều chỉnh ngắn hạn, vị trí dừng của lớp chậm có thể tránh dừng quá sớm.
Cụ thể, khoảng cách dừng của tầng nhanh là 0,5 lần 5 chu kỳ ATR, và khoảng cách dừng của tầng chậm là 3 lần 10 chu kỳ ATR. Khi tầng nhanh đi lên, nó tạo ra tín hiệu mua; Khi tầng nhanh đi xuống, nó tạo ra tín hiệu bán. Đường dừng cũng được cập nhật trong thời gian thực và được vẽ dưới đường cong giá.
Ưu điểm lớn nhất của chiến lược này là có thể điều chỉnh động vị trí dừng lỗ, trong trường hợp đảm bảo dừng lỗ, tối đa hóa lợi nhuận. So với khoảng cách dừng cố định, đường dừng ATR động có thể điều chỉnh theo mức độ biến động của thị trường, giảm khả năng kích hoạt dừng lỗ.
Ngoài ra, thiết kế ATR hai lớp có thể cân bằng sự nhạy cảm của dừng. Lớp nhanh phản ứng nhanh, lớp chậm có thể lọc tiếng ồn ngắn hạn, tránh dừng quá sớm.
Rủi ro chính của chiến lược này nằm ở việc thiết lập khoảng cách dừng là hợp lý hay không. Nếu ATR được thiết lập quá lớn, mức dừng sẽ không theo kịp giá. Nếu ATR quá nhỏ, nó dễ bị gián đoạn bởi tiếng ồn ngắn hạn. Vì vậy, cần điều chỉnh tham số theo đặc điểm của các giống khác nhau.
Ngoài ra, trong điều kiện điều chỉnh, giá trị ATR nhỏ hơn, gần đường dừng và dễ bị dừng thường xuyên. Vì vậy, chiến lược này phù hợp hơn với các giống có độ biến động nhất định.
Bạn có thể thử các kết hợp tham số khác nhau của chu kỳ ATR để tìm kiếm sự cân bằng tốt nhất. Ngoài ra, bạn có thể xem xét sử dụng các chỉ số khác, chẳng hạn như chỉ số xu hướng để đánh giá giai đoạn thị trường, để thay đổi kích thước của ATR.
Khả năng thay thế chỉ số ATR cũng có thể được nghiên cứu. Thay đổi ATR thành các chỉ số như DKVOL, HRANGE hoặc ATR phần trăm có thể có hiệu quả dừng lỗ tốt hơn.
Chiến lược này được thiết kế dựa trên chỉ số ATR và có cơ chế theo dõi động thái hai tầng, có thể đạt được lợi nhuận lớn hơn và có thể tránh được lỗ hổng quá mức. Nó phù hợp với người dùng có yêu cầu dừng cao. Chiến lược này có thể điều chỉnh các tham số một cách linh hoạt theo đặc điểm của thị trường và giống để đạt được hiệu quả dừng tối ưu.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true)
/////////notes////////////////////////////////////////
// This is based on the ATR trailing stop indicator //
// width addition of two levels of stops and //
// different interpretation. //
// This is a fast-reacting system and is better //
// suited for higher volatility markets //
//////////////////////////////////////////////////////
SC = input(close, "Source", input.source)
// Fast Trail //
AP1 = input(5, "Fast ATR period", input.integer) // ATR Period
AF1 = input(0.5, "Fast ATR multiplier", input.float) // ATR Factor
SL1 = AF1 * atr(AP1) // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)))
// Slow Trail //
AP2 = input(10, "Slow ATR period", input.integer) // ATR Period
AF2 = input(3, "Slow ATR multiplier", input.float) // ATR Factor
SL2 = AF2 * atr(AP2) // Stop Loss
Trail2 = 0.0
Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2)))
// Bar color for trade signal //
Green = Trail1 > Trail2 and close > Trail2 and low > Trail2
Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2
Red = Trail2 > Trail1 and close < Trail2 and high < Trail2
Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2
// Signals //
Bull = barssince(Green) < barssince(Red)
Buy = crossover(Trail1, Trail2)
Sell = crossunder(Trail1, Trail2)
TS1 = plot(Trail1, "Fast Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2, display=display.none)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 90))
plotcolor = input(true, "Paint color on chart", input.bool)
bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na)
barcolor(bcl)
if Buy
strategy.entry("Buy", strategy.long, comment="Buy")
if Sell
strategy.close("Buy")