Định hướng dựa trên ZigZag theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-10-30 14:51:08
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số ZigZag để xác định hướng xu hướng và theo xu hướng một khi được xác nhận.

Chiến lược logic

Chiến lược này chủ yếu sử dụng chỉ số ZigZag để xác định hướng xu hướng giá. ZigZag có thể lọc tiếng ồn thị trường và xác định các hướng biến động giá lớn. Nó tạo ra tín hiệu giao dịch khi giá đạt mức cao hoặc thấp mới.

Đặc biệt, chiến lược đầu tiên tính toán các giá trị ZigZag. Khi giá đạt mức cao hơn, giá trị ZigZag trở thành giá cao. Khi giá đạt mức thấp hơn, giá trị ZigZag trở thành giá thấp. Do đó, ZigZag có thể phản ánh rõ hướng biến động giá chính.

Chiến lược xác định hướng xu hướng dựa trên giá trị ZigZag. Khi ZigZag tăng, nó chỉ ra xu hướng tăng. Khi ZigZag giảm, nó chỉ ra xu hướng giảm. Chiến lược mở các vị trí khi ZigZag quay lại để theo hướng xu hướng.

Đặc biệt, chiến lược sẽ dài khi ZigZag quay sang mức cao mới và ngắn khi ZigZag quay sang mức thấp mới. Điều kiện thoát là khi ZigZag quay lại. Điều này đạt được giao dịch tự động dựa trên ZigZag để xác định xu hướng.

Phân tích lợi thế

  • ZigZag có thể lọc hiệu quả tiếng ồn thị trường và xác định chính xác hướng xu hướng chính.
  • Thời gian quay ZigZag là chính xác, cho phép các cơ hội nhập cảnh tối ưu.
  • Nó thực hiện một xu hướng thuần túy theo chiến lược mà không có các chỉ số hoặc mô hình phức tạp khác.
  • Lý thuyết đơn giản và rõ ràng, dễ hiểu và sửa đổi.
  • Tần số giao dịch có thể được kiểm soát tự do thông qua điều chỉnh tham số.

Phân tích rủi ro

  • ZigZag không nhạy cảm với sự đảo ngược xu hướng trung hạn, có khả năng bỏ lỡ sự đảo ngược nhanh hơn.
  • Các chiến lược theo xu hướng không thể xử lý tổn thất từ sự đảo ngược xu hướng.
  • Nó không giới hạn kích thước lỗ của các giao dịch đơn, gây ra rủi ro lỗ đơn lớn.
  • Chiến lược chỉ dựa trên một chỉ số, có nguy cơ quá phù hợp.

Các rủi ro có thể được giảm bằng cách:

  • Kết hợp các chỉ số khác để phát hiện rủi ro đảo ngược xu hướng.
  • Giảm thời gian giữ, dừng lỗ kịp thời.
  • Thêm quản lý rủi ro để hạn chế kích thước lỗ duy nhất.
  • Thêm các mô hình học máy để cải thiện độ bền.

Hướng dẫn tối ưu hóa

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

  1. Thêm lệnh dừng lỗ để kiểm soát rủi ro lỗ duy nhất, ví dụ như lệnh dừng hoặc lệnh dừng giới hạn.

  2. Thêm các cơ chế phát hiện sự đảo ngược xu hướng, ví dụ: MACD, đường trung bình động.

  3. Thêm mô-đun nhập lại, vị trí kim tự tháp khi xu hướng tiếp tục.

  4. Thêm các mô hình học máy như LSTM để hỗ trợ phát hiện xu hướng.

  5. Tối ưu hóa quản lý vốn dựa trên lý thuyết rút vốn hoặc tương quan.

  6. Tối ưu hóa toàn diện các thông số như thời gian ZigZag bằng cách kiểm tra lại và tham chiếu chuyên môn.

Tóm lại

Chiến lược xác định hướng xu hướng bằng ZigZag và giao dịch xu hướng. Logic đơn giản và dễ thực hiện. Nhưng rủi ro như sự phụ thuộc chỉ số duy nhất và đảo ngược xu hướng tồn tại. Chúng ta có thể tối ưu hóa thông qua dừng lỗ, chỉ số phụ trợ, tái nhập, mô hình học máy vv để làm cho nó mạnh mẽ hơn và hợp lý hơn. Với các tham số và kiểm soát rủi ro thích hợp, nó có thể theo dõi hiệu quả xu hướng trung dài.


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

//Noro
//2018

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

//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 = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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")

//ZigZag
zigzag() =>
    _isUp = close >= open
    _isDown = close <= open
    _direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
    _zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)

//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa