Xu hướng ATR theo chiến lược dựa trên kênh lệch chuẩn

Tác giả:ChaoZhang, Ngày: 2024-01-05 16:34:27
Tags:

img

Tổng quan

Chiến lược này có tên là ATR Trend Following Strategy là một chiến lược giao dịch theo xu hướng dựa trên Average True Range (ATR) để dừng lỗ và kênh lệch chuẩn cho các tín hiệu nhập cảnh. Nó phù hợp với các sản phẩm tài chính có xu hướng rõ ràng, chẳng hạn như chỉ số, ngoại hối và hàng hóa.

Logic giao dịch

Chiến lược này sử dụng chỉ số ATR để thiết lập giá dừng lỗ. ATR phản ánh sự biến động của thị trường và có thể được sử dụng để thiết lập khoảng cách dừng lỗ một cách năng động. Chiến lược tính toán giá trị ATR dựa trên thời gian và nhân nhập của người dùng ATR, và sử dụng giá trị ATR nhân với nhân để thiết lập khoảng cách dừng lỗ. Cụ thể, công thức tính toán ATR trailing stop là:

ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)  

If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss

Bằng cách này, đường ATR có thể điều chỉnh năng động dựa trên biến động giá để đạt được xu hướng sau khi dừng lỗ.

Ngoài ATR trailing stop, chiến lược này cũng sử dụng kênh lệch chuẩn để xác định tín hiệu đầu vào.

Middle Line = ATR Trailing Stop Line   
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation

Đi dài khi giá phá vỡ đường trung bình lên. Đi ngắn khi giá phá vỡ đường trung bình xuống.

Ưu điểm

Ưu điểm lớn nhất của chiến lược này là nó sử dụng chỉ số ATR để thiết lập dừng lỗ một cách năng động dựa trên sự biến động của thị trường, cho phép xu hướng sau khi dừng lỗ và kiểm soát rủi ro hiệu quả.

Ngoài ra, việc sử dụng kênh lệch chuẩn cho các tín hiệu nhập cảnh tránh việc mở các vị trí thường xuyên do biến động giá nhỏ.

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

Nguy cơ chính là nếu khoảng cách dừng lỗ quá lớn, nó không thể kiểm soát rủi ro hiệu quả, nhưng nếu quá nhỏ, nó có thể dễ dàng bị ngừng bởi tiếng ồn thị trường.

Một rủi ro khác là các thông số kênh sai lệch tiêu chuẩn không phù hợp dẫn đến tần số nhập quá cao / thấp. Các thông số có thể được tối ưu hóa để tìm ra tối ưu.

Cơ hội gia tăng

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Tối ưu hóa thời gian ATR và nhân để đạt được hiệu ứng dừng lỗ tốt hơn.

  2. Tối ưu hóa các thông số kênh lệch chuẩn để có tín hiệu nhập tốt hơn.

  3. Thêm các chỉ số khác để lọc, ví dụ như trung bình động, mô hình nến vv, để giúp đánh giá hướng xu hướng và cải thiện lợi nhuận.

  4. Tối ưu hóa logic vào và ra, ví dụ: chỉ mở các vị trí sau khi xác nhận mô hình nến khi giá đạt đến các dải kênh.

Tóm lại

Chiến lược đạt được xu hướng sau khi dừng lỗ dựa trên chỉ số ATR và sử dụng kênh sai lệch tiêu chuẩn cho các tín hiệu nhập cảnh. Ưu điểm của nó nằm trong khả năng kiểm soát rủi ro tốt cho giao dịch xu hướng. Rủi ro và cải tiến cũng được phân tích rõ ràng. Chiến lược đáng để thử nghiệm và tối ưu hóa hơn nữa và có giá trị giao dịch thực tế.


/*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)



Thêm nữa