Chiến lược theo dõi xu hướng ATR


Ngày tạo: 2023-09-21 15:13:47 sửa đổi lần cuối: 2023-09-21 15:13:47
sao chép: 0 Số nhấp chuột: 770
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này sử dụng độ dài sóng thực trung bình (ATR) để nắm bắt xu hướng giá và đặt điểm dừng để theo dõi xu hướng.

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

  1. Tính toán ATR

  2. Định mức dừng lỗ dựa trên giá trị ATR

  3. Khi giá phá vỡ ngưỡng dừng lỗ, hãy thực hiện thêm lệnh nhượng quyền.

  4. Khóa lợi nhuận bằng cách điều chỉnh động mức dừng lỗ.

Lợi thế chiến lược

  • Sử dụng ATR tự động điều chỉnh dừng lỗ, không cần can thiệp của con người
  • Chiến lược đơn giản, trực quan và dễ thực hiện
  • Có thể tránh được và ngăn chặn sự hư hại kịp thời
  • Có thể sử dụng xu hướng để chạy lợi nhuận
  • Có thể điều chỉnh tần số giao dịch bằng cách điều chỉnh tham số ATR

Rủi ro chiến lược

  • Thiết lập ATR không đúng có thể dẫn đến quá Loose hoặc Tight
  • Không thể xác định hiệu quả kết thúc xu hướng
  • Có một khoảng thời gian chậm trễ
  • Một phần lợi nhuận có thể do đảo ngược tổn thất

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

  • Tối ưu hóa tham số chu kỳ ATR
  • Kiểm tra các ATR khác nhau như khoảng cách dừng
  • Kết hợp với các chỉ số khác để xác định xu hướng đảo ngược
  • Cố gắng tối ưu hóa tham số học máy
  • Cân nhắc thêm chiến lược chống ngứa

Tóm tắt

Chiến lược này sử dụng ATR để nắm bắt xu hướng một cách hiệu quả và điều chỉnh động để dừng lỗ để thực hiện khóa lợi nhuận. Thiết lập tham số tối ưu hóa có thể giúp cải thiện hiệu suất của chiến lược. Tuy nhiên, vấn đề ATR bị tụt hậu không thể hoàn toàn tránh được.

Mã nguồn chiến lược
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy(title="ATR Strategy", overlay = true,  commission_type=strategy.commission.percent,commission_value=0.075)
//credits to HPotter for the orginal code
nATRPeriod = input(5)
nATRMultip = input(3.5)
xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
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))) 
color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy? color.green:color.red)