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

Tác giả:ChaoZhang, Ngày: 2024-02-19 11:41:20
Tags:

img

Tổng quan

Chiến lược theo xu hướng Super ATR là một chiến lược theo xu hướng dựa trên chỉ số ATR. Nó sử dụng chỉ số ATR để đo biến động thị trường và thiết lập dừng lỗ dựa trên nhiều ATR để theo dõi xu hướng.

Chiến lược logic

Chiến lược đầu tiên tính toán chỉ số ATR, đó là trung bình động của biến động giá trong N ngày qua, để đại diện cho rủi ro và biến động thị trường. Chiến lược cho phép chúng ta thay đổi phương pháp tính toán ATR, hoặc là ATR bình thường hoặc SMA.

Sau đó, các dải trên và dưới được tính dựa trên giá trị ATR nhân một nhân tố, tức là:close - Multiplier * ATRđối với dải trên;close + Multiplier * ATRĐây tạo thành một kênh xu hướng dựa trên ATR.

Sau đó, chúng ta đánh giá giá hiện tại có vượt qua dải trên hoặc dưới của kênh. Nếu giá vượt qua dải trên, nó được đánh giá là đi vào xu hướng giảm; nếu giá vượt qua dải dưới, nó được đánh giá là đi vào xu hướng tăng. Khi có một sự đột phá xu hướng, chúng tôi mua và bán tương ứng.

Ngoài ra, chiến lược đã thiết lập một cửa sổ thời gian giao dịch chỉ giao dịch trong khoảng thời gian ngày đã chỉ định.

Phân tích lợi thế

Chiến lược theo xu hướng dựa trên kênh chỉ số này có những lợi thế sau:

  1. Sử dụng chỉ số ATR để tự động điều chỉnh vị trí dừng lỗ kiểm soát rủi ro hiệu quả
  2. ATR xem xét biến động giá, dừng lỗ hợp lý hơn
  3. Tăng độ chính xác nhập bằng cách phá vỡ kênh
  4. Cho phép điều chỉnh phương pháp tính toán ATR, linh hoạt hơn
  5. Thiết lập cửa sổ giao dịch tránh thất bại chiến lược trong các sự kiện quan trọng

Nói chung, đây là một xu hướng đơn giản và thực tế sau chiến lược có thể kiểm soát rủi ro hiệu quả và thu được lợi nhuận tốt.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro cho chiến lược này:

  1. Thị trường có thể có những thay đổi dữ dội mà ATR không phản ứng kịp thời, dẫn đến stop loss quá lỏng lẻo
  2. Giá có thể dao động trong kênh khi tâm lý khác nhau, làm tăng rủi ro giao dịch
  3. Số nhân cố định có thể không phù hợp với tất cả các sản phẩm, cần điều chỉnh phù hợp
  4. setThiết lập cửa sổ giới hạn cơ hội giao dịch, có thể bỏ lỡ giao dịch tốt nếu không được thiết lập đúng cách

Để kiểm soát những rủi ro này, chúng ta có thể thực hiện các biện pháp sau:

  1. Kết hợp các chỉ số khác để xác định tình hình thị trường, tránh chỉ dựa vào ATR
  2. Thêm bộ lọc để tránh việc phá vỡ không hợp lệ giới thiệu rủi ro giao dịch
  3. Chọn nhân thích hợp theo đặc điểm lịch sử của các sản phẩm khác nhau
  4. Tối ưu hóa và kiểm tra thiết lập các tham số cửa sổ để đảm bảo thiết lập đúng

Tối ưu hóa

Có chỗ cho việc tối ưu hóa thêm chiến lược này:

  1. Giới thiệu thuật toán học máy để tối ưu hóa động nhân
  2. Tích hợp các chỉ số tâm lý vv để tối ưu hóa phạm vi kênh
  3. Thêm xác nhận khối lượng hoặc biến động để tránh đột phá không hợp lệ
  4. Sử dụng khung chiến lược dựa trên thời gian tiên tiến cho backtest

Những tối ưu hóa này có thể tiếp tục cải thiện sự ổn định và lợi nhuận của chiến lược.

Kết luận

Nhìn chung, đây là một chiến lược theo xu hướng rất thực tế. Nó xây dựng một kênh thích nghi bằng cách sử dụng chỉ số ATR và xác định các mục nhập bằng cách phá vỡ kênh. Chiến lược đơn giản và hiệu quả để kiểm soát rủi ro, phù hợp để theo dõi xu hướng trung dài hạn. Chúng tôi cũng đề xuất các đề xuất kiểm soát rủi ro và tối ưu hóa hơn nữa để làm cho chiến lược mạnh mẽ hơn.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Thêm nữa