Xu hướng ATR theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-28 11:32:09
Tags:

Tổng quan

Chiến lược này sử dụng chỉ số Average True Range (ATR) để xác định hướng xu hướng. Nó đi dài khi xu hướng tăng và đi ngắn khi xu hướng giảm. Nó thuộc loại chiến lược theo xu hướng.

Chiến lược logic

Chiến lược đầu tiên tính toán trung bình di chuyển đơn giản (sma) và trung bình di chuyển theo cấp số nhân (ema) của giá. Sau đó nó tính toán chỉ số ATR, đó là phạm vi trung bình của chuyển động giá trong N ngày qua.

Chiến lược sử dụng đường trung bình EMA, dải trên (EMA + ATR * hệ số) và dải dưới (EMA - ATR * hệ số) để xác định hướng xu hướng. Nó đi dài khi giá vượt qua dải trên và đi ngắn khi giá vượt qua dải dưới.

Logic chính trong mã:

  1. Tính toán giá SMA và EMA trung bình
  2. Tính toán phạm vi trung bình ATR
  3. Tính toán dải trên và dưới
  4. Xác định tín hiệu dài: giá phá vỡ trên dải trên
  5. Xác định tín hiệu ngắn: giá phá vỡ dưới dải dưới
  6. Thiết lập stop loss để đóng các vị trí: giá phá vỡ dưới dải trên để đóng giao dịch dài; giá phá vỡ trên dải dưới để đóng bán.

Bằng cách điều chỉnh vị trí năng động dựa trên ATR, nó có thể theo hướng xu hướng hiệu quả.

Ưu điểm

  1. Sử dụng ATR để xác định hướng xu hướng có thể nắm bắt hiệu quả xu hướng giá
  2. Stop loss dựa trên đường trung bình động có thể kiểm soát rủi ro một cách hợp lý
  3. Định nghĩa chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện
  4. Các thông số cấu hình linh hoạt, thích nghi với các môi trường thị trường khác nhau

Rủi ro

  1. Chỉ số ATR sẽ thất bại trong các thị trường bên cạnh rất biến động
  2. Cài đặt tham số không chính xác có thể gây ra giao dịch quá thường xuyên
  3. Sự đảo ngược đột ngột có thể làm cho lệnh dừng lỗ không hiệu lực
  4. Chi phí giao dịch cao hơn đòi hỏi phải điều chỉnh các thiết lập theo dõi

Giải pháp:

  1. Ngăn chặn chiến lược hoặc sử dụng các chỉ số khác trong biến động cao
  2. Tối ưu hóa các tham số để giảm tần suất giao dịch
  3. Tăng tỷ lệ dừng lỗ cho các sự kiện dữ liệu lớn
  4. Điều chỉnh phạm vi ATR dựa trên các sản phẩm cụ thể

Hướng dẫn cải thiện

  1. Kết hợp với các chỉ số xu hướng để tối ưu hóa các thông số, ví dụ: thêm MACD cho xu hướng
  2. Thêm các bộ lọc như Bollinger Bands để nhập
  3. Tối ưu hóa các phương pháp dừng lỗ, chẳng hạn như dấu hiệu dừng hoặc thoát
  4. Tối ưu hóa phạm vi ATR dựa trên các sản phẩm cụ thể
  5. Thêm quản lý rủi ro như định dạng vị trí phân số cố định
  6. Tối ưu hóa các tham số một cách năng động bằng cách sử dụng máy học

Tóm lại

Chiến lược theo xu hướng ATR có logic rõ ràng để xác định hướng xu hướng bằng cách sử dụng ATR. Đây là một hệ thống theo xu hướng điển hình. Những lợi thế là sự đơn giản và khả năng theo xu hướng. Nhưng nó cũng có những rủi ro đòi hỏi tối ưu hóa cho các thị trường khác nhau. Nhìn chung, nó có tiềm năng và giá trị lớn như một công cụ giao dịch định lượng.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

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 = 2008, title = "From Year", minval = 2008)
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 = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk()) and ema(close,1) > ema(close,528)
    strategy.entry("KOP", strategy.long, when=bull_cross) 
    strategy.close("KOP", when=bear_cross)  
if (startTimeOk()) and ema(close,1) < ema(close,528)
   strategy.entry("SALJ", strategy.short, when=bear_cross) 
   strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

Thêm nữa