Chiến lược giao dịch theo xu hướng dựa trên kênh ATR và độ lệch chuẩn


Ngày tạo: 2024-01-05 16:34:27 sửa đổi lần cuối: 2024-01-05 16:34:27
sao chép: 0 Số nhấp chuột: 931
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch theo xu hướng dựa trên kênh ATR và độ lệch chuẩn

Tổng quan

Chiến lược này được gọi là chiến lược theo dõi xu hướng ATR, là một chiến lược giao dịch theo dõi xu hướng dựa trên mức độ biến động thực tế trung bình (ATR) và sử dụng kênh chênh lệch tiêu chuẩn để đánh giá thời gian ra thị trường. Chiến lược này áp dụng cho các sản phẩm tài chính có xu hướng rõ ràng như chỉ số cổ phiếu, ngoại hối, hàng hóa.

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

Chiến lược này sử dụng chỉ số ATR để thiết lập giá dừng chân. Chỉ số ATR phản ánh mức độ biến động của thị trường và có thể thiết lập khoảng cách dừng chân một cách động. Chiến lược tính toán giá trị ATR bằng cách nhập chu kỳ và nhân của ATR, sau đó nhân nhân với nhân là khoảng cách dừng chân.

ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)

若收盘价 > ATR线,ATR线上调至收盘价 - nLoss 
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss

Vì vậy, ATR có thể được điều chỉnh động theo biến động giá, để thực hiện theo dõi xu hướng.

Ngoài ATR, chiến lược còn sử dụng kênh chênh lệch chuẩn để xác định thời gian ra thị trường. Công thức tính toán của kênh chênh lệch chuẩn là:

中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差  

Khi giá phá vỡ đường trung bình từ dưới lên, hãy làm nhiều hơn; khi giá phá vỡ đường trung bình từ trên xuống, hãy làm trống.

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

Ưu điểm lớn nhất của chiến lược này là sử dụng chỉ số ATR như một công cụ dừng lỗ, có thể điều chỉnh động khoảng cách dừng lỗ theo mức độ biến động của thị trường, thực hiện theo dõi xu hướng dừng lỗ và kiểm soát rủi ro hiệu quả.

Ngoài ra, kết hợp thời gian đưa ra thị trường với phân tích phân tích chuẩn, bạn có thể tránh việc mở cửa thường xuyên do biến động giá nhỏ.

Rủi ro và giải pháp

Rủi ro chính của chiến lược này là không thể kiểm soát rủi ro một cách hiệu quả khi khoảng cách dừng quá dài; khoảng cách dừng sau một giờ dễ bị phá vỡ bởi tiếng ồn thị trường. Để đối phó với rủi ro này, bạn có thể điều chỉnh chu kỳ ATR và nhân ATR để tìm kiếm sự kết hợp tham số tốt nhất.

Một rủi ro khác là các tham số kênh sai chuẩn được thiết lập không đúng cách, có thể dẫn đến tần suất mở kho quá cao hoặc quá thấp. Các tham số tối ưu có thể được tìm thấy bằng cách tối ưu hóa tham số.

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Chu kỳ ATR và tối ưu hóa số nhân. Điều chỉnh hai tham số này có thể đạt được hiệu quả dừng lỗ tốt hơn.

  2. Tối ưu hóa các tham số đường thông qua sự khác biệt tiêu chuẩn. Tối ưu hóa các tham số đường thông qua, có được hiệu quả ra thị trường tốt hơn.

  3. Thêm các bộ lọc cho các chỉ số khác. Bạn có thể thêm các chỉ số như đường trung bình di chuyển, hình dạng đường K, hỗ trợ định hướng xu hướng, tăng tỷ lệ lợi nhuận.

  4. Tối ưu hóa logic mở kho và bình yên. Bạn có thể đặt giá chạm vào kênh chênh lệch tiêu chuẩn và mở kho chỉ sau khi xác nhận hình dạng K một lần nữa.

Tóm tắt

Chiến lược này dựa trên chỉ số ATR để thực hiện theo dõi xu hướng dừng lỗ và sử dụng kênh chênh lệch chuẩn để hỗ trợ đánh giá thời gian đưa ra thị trường. Ưu điểm của chiến lược là hiệu quả kiểm soát rủi ro dừng lỗ tốt, phù hợp với giao dịch xu hướng.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
strategy(title="Average True Range Strategy", overlay = true)
nATRPeriod = input(11) //Hur många perioder ATR är på
nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
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 = 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))) 

stdev3 = 14*stdev(xATR, nATRPeriod)
band1 = xATRTrailingStop+stdev3 //Översta stdev bandet
band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet


// Datum och tid
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2013, title = "From Year", minval = 2013)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start 
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest slut
startTimeOk()  => true
initial_capital = 100000

take = close > xATRTrailingStop

if( startTimeOk() ) and (pos == 1)
//if (pos == 1) 
    strategy.entry("Long", strategy.long, comment = "KOP")
    strategy.exit("Long", when = take)
   
if( startTimeOk() ) and (pos == -1)
//if (pos == -1)
    strategy.entry("Short", strategy.short, comment = "SALJ")
   
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj
plot(band1, color=red)
plot(band2, color=blue)