Chiến lược đột phá xu hướng ATR thích nghi

Tác giả:ChaoZhang, Ngày: 2023-10-31 15:58:46
Tags:

img

Tổng quan

Chiến lược này là một chiến lược đột phá xu hướng dựa trên chỉ số ATR. Ý tưởng chính của nó là thực hiện các giao dịch đột phá xu hướng khi giá vượt quá một số lần nhất định của ATR. Chiến lược này cũng bao gồm xác nhận xu hướng và giới hạn giao dịch trong phạm vi ngày.

Nguyên tắc

Chiến lược này sử dụng chỉ số ATR để đo biến động giá. ATR viết tắt là Average True Range và nó đo biến động trung bình trong một khoảng thời gian. Các thông số chiều dài trong chiến lược tính toán thời gian ATR và numATRs đại diện cho nhân ATR cho đột phá.

Khi giá phá vỡ trên số lần số ATR của ATR, một vị trí dài được thực hiện. Khi giá phá vỡ dưới số lần số ATR của ATR, một vị trí ngắn được thực hiện.

Ngoài ra, chiến lược bao gồm các biến bool needlong và needshort để kiểm soát chỉ giao dịch dài hoặc chỉ giao dịch ngắn.

Chiến lược sử dụng biến kích thước để xác định kích thước vị trí và tính toán kích thước lệnh dựa trên tỷ lệ phần trăm vốn chủ sở hữu tài khoản.

Ưu điểm

  • Sử dụng ATR để tự động thích nghi với sự biến động của thị trường mà không cần cài đặt lợi nhuận/mất lợi nhuận bằng tay.

  • Dễ dàng lựa chọn dài, ngắn hoặc chỉ dài / ngắn.

  • Có thể thiết lập phạm vi ngày để tránh giao dịch tại các sự kiện quan trọng.

  • Định giá vị trí linh hoạt dựa trên tỷ lệ phần trăm vốn chủ sở hữu tài khoản.

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

  • ATR chỉ xem xét sự biến động giá. Nó có thể không đủ dừng lỗ trong những biến động thị trường lớn. Các chỉ số khác có thể được kết hợp.

  • Giới hạn phạm vi ngày có thể bỏ lỡ cơ hội nếu không có thiết lập tốt trước / sau.

  • Số phần trăm cổ phần rủi ro tổn thất lớn trên các giao dịch đơn lẻ.

Ý tưởng tối ưu hóa

  • Thêm các đường trung bình động cho bộ lọc xu hướng để giảm các giao dịch tiếng ồn phá vỡ sai.

  • Kiểm tra thời gian ATR để tìm các thông số tối ưu.

  • Kết hợp với các chiến lược khác để sử dụng điểm mạnh và cải thiện sự ổn định.

Kết luận

Đây là một xu hướng dễ hiểu sau chiến lược sử dụng ATR để thích nghi với biến động. Tối ưu hóa tham số và kết hợp với các chiến lược khác có thể cải thiện hơn nữa hiệu suất và sự ổn định.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Indicator
atrs = sma(tr, length) * numATRs

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
    strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
    strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
    strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
    strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

Thêm nữa