
Tổng quan
Chiến lược này kết hợp các chỉ số ATR (Average True Range) và SMA (Simple Moving Average) để thực hiện một hệ thống giao dịch theo dõi dừng động. Khi giá trên SMA, giá mở nhiều lệnh, đồng thời thiết lập dừng động dựa trên ATR, giá dừng sẽ tăng liên tục khi giá tăng.
Nguyên tắc chiến lược
- Tính toán SMA 50 ngày, khi giá đóng cửa lớn hơn SMA 50 ngày.
- Tính toán chỉ số ATR, ATR chu kỳ là 10, nhân với một giá trị quan trọng ((định nghĩa mặc định 3) để có được nLoss.
- Tính toán giá dừng động xATRTrailingStop với giá khởi đầu là 0。
- Khi cả giá đóng cửa và giá đóng cửa trước đó lớn hơn giá dừng lỗ trước đó, giá dừng lỗ mới là giá lớn hơn trong giá dừng lỗ trước đó và giá đóng cửa - nLoss.
- Khi cả giá đóng cửa và giá đóng cửa trước đó đều nhỏ hơn giá dừng lỗ trước đó, giá dừng lỗ mới là giá dừng lỗ trước đó và giá đóng cửa nhỏ hơn trong [giá đóng cửa + nLoss].
- Trong các trường hợp khác, giá dừng mới là ((giá đóng cửa - nLoss) hoặc ((giá đóng cửa + nLoss) .
- Khi giá đóng cửa giảm xuống giá dừng động.
- Điểm dừng được đánh dấu bằng các màu khác nhau, điểm dừng nhiều đầu là màu xanh lá cây, điểm dừng đầu trống là màu đỏ, và các trường hợp khác là màu xanh lam.
Phân tích lợi thế
- Cơ chế dừng động có thể bảo vệ lợi nhuận và giảm rủi ro rút tiền trong tình huống xu hướng. So với dừng cố định, dừng động linh hoạt hơn và có thể thích ứng với các điều kiện thị trường khác nhau.
- Chiều dài dừng lỗ dựa trên chỉ số ATR, ATR có thể phản ánh tốt kích thước biến động của thị trường, do đó, khoảng cách dừng lỗ sẽ tự động điều chỉnh theo biến động của thị trường trong thời gian gần đây, mở rộng không gian dừng lỗ khi biến động tăng và thu nhỏ không gian dừng lỗ khi biến động giảm.
- Sử dụng SMA làm cơ sở để đánh giá xu hướng, có thể nắm bắt được tình hình xu hướng tương đối rõ ràng. Nếu đặt nhiều lệnh trên SMA, bạn có thể can thiệp vào xu hướng ban đầu và kiếm được lợi nhuận lớn hơn.
- Cho phép người dùng thiết lập các tham số ATR chu kỳ và giá trị quan trọng, có thể linh hoạt điều chỉnh các tham số chính sách để phù hợp với các đặc điểm của các giống và chu kỳ khác nhau.
Phân tích rủi ro
- Trong các tình huống xu hướng không rõ ràng hoặc biến động, chiến lược này có thể xảy ra trong trường hợp thường xuyên mở lỗ, dẫn đến tăng chi phí giao dịch và giảm lợi nhuận.
- Chiến lược này chỉ có nhiều logic, không thể kiếm lợi nhuận trong xu hướng giảm, đối mặt với rủi ro của thị trường đơn phương. Bạn có thể xem xét thêm logic shorting, thực hiện giao dịch hai chiều.
- Điểm dừng lỗ dựa trên tính toán ATR, khi thị trường biến động mạnh, không gian dừng lỗ có thể quá lớn, dẫn đến tăng rủi ro. Bạn có thể cân nhắc thiết lập một mức dừng lỗ tối đa để kiểm soát tổn thất tối đa của một giao dịch.
- Lựa chọn tham số không đúng có thể dẫn đến thất bại của chiến lược. Ví dụ: chọn chu kỳ ATR quá nhỏ có thể dẫn đến việc dừng lỗ quá nhạy cảm, kích hoạt thường xuyên; quá lớn có thể không dừng lỗ kịp thời, làm tăng tổn thất.
Hướng tối ưu hóa
- Thêm logic shorting, trong xu hướng giảm cũng có thể kiếm được lợi nhuận, cải thiện khả năng thích ứng của chiến lược. Bạn có thể mở lệnh trống khi giá giảm xuống SMA, cũng sử dụng logic dừng lỗ động.
- Tiến hành quản lý vị trí trống nhiều, điều chỉnh kích thước vị trí tùy theo cường độ của xu hướng. Tăng vị trí khi xu hướng mạnh, tăng thu nhập; Giảm vị trí khi xu hướng yếu, kiểm soát rủi ro.
- Tối ưu hóa logic dừng lỗ, thiết lập một mức dừng lỗ tối đa để ngăn chặn tổn thất quá lớn trong tình huống cực đoan. Ngoài ra, bạn có thể xem xét thiết lập một điểm dừng, chủ động thanh toán vị thế khi đạt được thu nhập dự kiến, thay vì giữ mãi cho đến khi dừng lỗ.
- Tối ưu hóa các tham số, tìm kiếm các thiết lập tham số tối ưu bằng cách đi qua các tổ hợp tham số khác nhau. Các phương pháp tối ưu hóa thông minh như thuật toán di truyền có thể được sử dụng để tăng hiệu quả tối ưu hóa.
- Xem xét thêm các điều kiện lọc như khối lượng giao dịch, tỷ lệ biến động để đánh giá tốt hơn xu hướng và rủi ro, tăng độ tin cậy của tín hiệu.
Tóm tắt
Chiến lược này dựa trên các chỉ số ATR và SMA để thực hiện một hệ thống giao dịch theo dõi lỗ hổng động, có thể tự động điều chỉnh vị trí dừng lỗ trong tình huống xu hướng, đóng vai trò bảo vệ lợi nhuận và kiểm soát rủi ro. Logic của chiến lược rõ ràng, lợi thế rõ ràng, nhưng cũng có một số hạn chế và điểm rủi ro.
Mã nguồn chiến lược
/*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")