Mục lục bài viết

Bằng chứng và phạm vi

Nguồn mô tả ZigZag, directional change và ATR. Phiên bản dùng close, ngưỡng chốt theo leg dưới đây là đề xuất độc lập; chưa có backtest lợi nhuận.

Dữ liệu và thị trườngDữ liệu close đều hoặc trades theo sự kiện; không trộn hai cách lấy mẫu trong một kết quả.
Khung thời gian nghiên cứuM30, H1 và ngày là ví dụ nghiên cứu; cùng q ATR không đảm bảo cùng ý nghĩa trên các thị trường.
Giá đạt 105 rồi chỉ xác nhận đỉnh sau khi giảm về 102, đáy 100 xác nhận khi hồi 103.Mở hình kích thước đầy đủ
Dữ liệu close tổng hợp; ngưỡng minh họa cố định 3 điểm cho hai leg đầu. Dấu cực trị và dấu xác nhận nằm ở nến khác nhau.

Quy trình thực hành

Sơ đồ quy trình ZigZag theo ATR: xác nhận sóng bằng mức đảo chiều
Các bước được mô tả đầy đủ bên dưới. Tại mỗi bước, dữ liệu thiếu hoặc điều kiện sai phải có lý do loại bỏ.
  1. Khởi tạo legLưu state, cực trị tạm và ATR tham chiếu.
  2. Cập nhật cực trịGiá đi tiếp chỉ thay ứng viên đang chạy.
  3. Đo đảo chiềuSo khoảng cách với ngưỡng đã đóng băng.
  4. Phát sự kiệnĐủ ngưỡng thì ghi cả hai timestamp.
  5. Đổi trạng tháiBắt đầu leg ngược và chốt ngưỡng mới.

Đếm sóng theo sự kiện

Một leg tăng có thể kéo dài ba hoặc ba mươi nến. Bộ máy luôn ghi nhận close cao nhất đang chạy, nhưng chỉ hoàn tất đỉnh sau khi close giảm đủ ngưỡng. Vì vậy độ trễ không cố định như pivot cửa sổ. Ngưỡng lớn bỏ qua nhiều dao động nhỏ, đồng thời công bố bước ngoặt muộn hơn.

Nghiên cứu intrinsic time trình bày directional change bằng ngưỡng phần trăm [1]. ZigZag trên TradingView có logic pivot và có thể sửa đoạn cuối [2]. Bài này không sao chép toàn bộ chỉ báo đó: mục tiêu là một stream sự kiện xác nhận bất biến, với ứng viên riêng biệt để tránh nhầm đường vẽ tạm thành lệnh lịch sử.

Chốt biến động vào đầu mỗi leg

Đặt A_ref bằng ATR14 của nến ngay trước khi leg mới bắt đầu, rồi giữ q×A_ref suốt leg. q=2 là tham số nghiên cứu. ATR dùng true range và cách làm trơn đã chọn; tài liệu chính thức phân biệt các cách smoothing [3]. Nếu leg kéo dài qua một chế độ biến động mới, ngưỡng cũ có thể kém phù hợp, nhưng đổi ngưỡng giữa chừng là phiên bản khác.

Để loại mơ hồ high/low trong một nến, baseline chỉ dùng close. Khởi tạo state=UP tại close đầu tiên sau warmup, không coi giá khởi tạo là đáy đã xác nhận. Khi chuyển DOWN, đáy ứng viên ban đầu là close hiện tại. Nếu ATR trước đó không đủ hoặc bằng không, tạm ngừng nhận diện thay vì tạo ngưỡng zero.

state = UP; extreme = first_close; extreme_i = first_i
threshold = q * ATR[first_i-1]
for each closed bar t after first_i:
    if state == UP:
        if C[t] > extreme: extreme, extreme_i = C[t], t
        elif extreme - C[t] >= threshold:
            emit HIGH(extreme_i, confirmed_at=t, price=extreme)
            state = DOWN; extreme, extreme_i = C[t], t
            threshold = q * ATR[t-1]
    else:
        if C[t] < extreme: extreme, extreme_i = C[t], t
        elif C[t] - extreme >= threshold:
            emit LOW(extreme_i, confirmed_at=t, price=extreme)
            state = UP; extreme, extreme_i = C[t], t
            threshold = q * ATR[t-1]

Một leg thành công và một đảo chiều giả

Ví dụ tổng hợp có ATR tham chiếu 1,5 và q=2, nên cần đảo chiều 3 điểm. Close đi 100→102→105→104→103. Đỉnh 105 vẫn chưa xác nhận vì giảm mới 2 điểm. Khi close tiếp theo bằng 102, hệ thống phát HIGH tại giá 105, occurred_at ở nến thứ ba và confirmed_at ở nến thứ sáu.

Nếu thay close cuối thành 106, ứng viên 105 được nâng lên 106; không tồn tại tín hiệu short bị xóa vì chưa hề xác nhận. Nếu sau 102 giá giảm 100 rồi bật lên 103, leg DOWN chốt đáy 100 khi ngưỡng leg đó cũng bằng 3. Hình zigzag hoàn chỉnh có vẻ bắt đúng cả hai cực trị, nhưng giá quyết định thật là 102 và 103.

Trường hợp thất bại của một chiến lược: short ở open 101,8 sau xác nhận đỉnh 105, stop 105,2. Giá hồi thẳng lên 106; khoảng rủi ro dự kiến là 3,4 điểm và stop có thể trượt. Nhận diện leg trước đúng về mặt thuật toán không hề đảm bảo xu hướng giảm tiếp tục.

Tín hiệu nào mới đủ để giao dịch

Có hai câu hỏi độc lập: đảo chiều đủ ngưỡng đã xảy ra chưa, và nên theo đà vừa xác nhận hay cược đảo lại. Baseline nghiên cứu có thể theo chiều directional change, vào next open, stop phía ngoài cực trị vừa chốt, thoát khi có directional change ngược. Không dùng cả hai cách tùy từng đoạn đồ thị.

Vì stop cấu trúc có thể xa, quantity phải dựa vào khoảng entry–stop cộng chi phí ước tính. Nếu khoảng này quá nhỏ so spread hoặc quá lớn so ngân sách, bỏ theo quy tắc định trước. Khi giá gap qua mức dừng, mô hình fill phải dùng giá khả thi, không bảo đảm lỗ đúng 1R.

Với ngưỡng phần trăm, định nghĩa giảm từ đỉnh là (peak−C)/peak, tăng từ đáy là (C−trough)/trough. Chúng không đối xứng theo log return; nếu muốn đối xứng, dùng chênh log giá và ghi thành biến thể riêng. Công thức tỷ lệ thông thường không phù hợp khi giá tham chiếu bằng không hoặc âm.

So sánh volume giữa các leg

Tổng volume leg dài thường lớn hơn leg ngắn chỉ vì tích lũy nhiều nến. Để diễn giải, lưu cả tổng volume, số nến, volume trung bình và độ dịch chuyển giá. Có thể thử feature effort = tổng volume / max(khoảng dịch chuyển, tick), nhưng giá trị cao chưa chứng minh có hấp thụ.

Khi HIGH được xác nhận, volume từ extreme_i+1 đến confirmed_at thuộc đoạn đảo chiều đã quan sát. Tách nó khỏi volume leg tăng trước extreme_i; ranh giới nến cực trị cần quy ước cố định. Thử nghiệm hữu ích là thêm RVOL của nến xác nhận so với cùng giờ, rồi kiểm tra có cải thiện lợi suất ngoài mẫu hay chỉ chọn các nến chi phí cao hơn.

Kiểm chứng độ nhạy mà không chọn sóng đẹp

Đăng ký q trong một lưới nhỏ như 1,5; 2; 3 và chỉ dùng development để chọn. Báo cả số sự kiện, phần trăm thời gian đứng ngoài, độ trễ bằng nến và bằng ATR, tỷ lệ stop bị gap. Một kết quả chỉ hoạt động tại đúng q=2,03 nhưng sụp ở 2,0 và 2,1 là dấu hiệu cần điều tra.

Replay theo prefix phải giữ nguyên mọi HIGH/LOW đã emit. Ứng viên hiện tại được thay đổi, nhưng log xác nhận không sửa. Chạy lại với thời điểm khởi tạo sớm hơn để đo ảnh hưởng warmup; so baseline close với dữ liệu tick chỉ khi có dữ liệu đáng tin và quy tắc khớp lệnh tương ứng.

Sai lầm thường gặp

Dùng đoạn cuối như tín hiệu hoàn chỉnh

Đường tạm có thể dời đến cực trị mới; không đưa nó vào lịch sử lệnh.

ATR tương lai làm đẹp sóng cũ

Lưu A_ref tại thời điểm hợp lệ, không tính lại ngưỡng quá khứ từ ATR cuối dữ liệu.

Lẫn wick và close

Chọn wick để lấy đỉnh cao nhất nhưng close để bỏ stop làm kết quả thiếu nhất quán.

Checklist trước khi dùng phương pháp

Tự đánh dấu khi đã kiểm tra trên dữ liệu của bạn. Trạng thái lưu trong trình duyệt này; đây không phải chứng nhận chiến lược có lãi.

0/8 mục

Câu hỏi thường gặp

ZigZag ATR có tốt hơn phần trăm không?

Đó là giả thuyết kiểm định. ATR thích nghi với biến động, nhưng thêm phụ thuộc vào lookback và cách chốt ngưỡng.

Đỉnh được xác nhận rồi có thể cao hơn tiếp không?

Có. HIGH là nhãn của leg đã hoàn tất theo quy tắc, không phải tuyên bố thị trường đã đạt đỉnh cuối cùng.

Nguồn nghiên cứu

Các nguồn dưới đây hỗ trợ phần định nghĩa hoặc bằng chứng được ghi bên cạnh. Mã giả, ví dụ minh họa và tham số đề xuất trong bài cần được kiểm định riêng.

  1. The Theory of Intrinsic Time: A PrimerJames B. Glattfelder và Richard B. Olsen. Đã đọc mục directional change và đa thang đo; không xem đây là backtest cho biến thể ATR. Đối chiếu: .
  2. Zigzag indicatorTradingView. Đã đọc cách dựng, projected pivots và giới hạn đoạn cuối. Đối chiếu: .
  3. Average True RangeTradingView. Đã đọc công thức true range và tùy chọn smoothing. Đối chiếu: .

Đọc tiếp theo phương pháp

Lưu ý rủi ro

Nội dung phục vụ giáo dục và thiết kế nghiên cứu, không phải lời khuyên tài chính. Backtest là mô phỏng lịch sử, không bảo đảm hiệu quả tương lai và không đặt lệnh giao dịch thật. Các phương pháp trong thư viện không mặc nhiên là tính năng đã có trong ứng dụng. Xem phương pháp tính và trung tâm học.

Kiểm tra quy tắc trước khi dùng vốn thật

Đối chiếu khả năng hỗ trợ của ứng dụng, dữ liệu và từng giao dịch mô phỏng; các detector nâng cao có thể cần triển khai riêng.

Tải Backtest trên App Store