6 tháng Mười, 2026 · nghiên cứu

Vì sao backtest của tôi khớp lệnh ở mức giá thị trường chưa từng hiển thị?

Vì sao backtest của tôi khớp lệnh ở mức giá thị trường chưa từng hiển thị?

Backtest có thể báo khớp lệnh ở mức giá thị trường chưa từng hiển thị. Thông thường, trình mô phỏng đã suy ra một mức khớp có vẻ hợp lý từ dữ liệu không đầy đủ: giá cao nhất và thấp nhất của thanh nến, giá trung điểm hoặc mức giá giới hạn được một giao dịch chạm tới. Điều đó khiến nhật ký giao dịch trông có vẻ chính xác nhưng lại che khuất những gì thị trường thực sự chào mua hoặc chào bán.

Trước tiên, hãy hỏi lệnh của bạn có thể tương tác với mức giá nào. Một thanh nến giá giao dịch gần nhất cho biết những mức giá nào đã được giao dịch trong một khoảng thời gian. Nó không cho bạn biết giá bid và ask khi lệnh được gửi đến, khối lượng có sẵn ở mức đó, hay liệu lệnh có thể lên đầu hàng đợi hay không.

Vì sao backtest của tôi hiển thị mức khớp lệnh nằm ngoài giá thị trường?

Trước hết, hãy xác định rõ “nằm ngoài” nghĩa là gì. Lệnh mua khớp dưới mức thấp nhất của thanh nến hoặc lệnh bán khớp trên mức cao nhất là lỗi kế toán hoặc sai thời điểm hiển nhiên. Ngay cả mức khớp nằm trong biên độ cao-thấp cũng có thể là giả: mức giá đó có thể đã được giao dịch trước khi lệnh tồn tại, ở phía đối diện của chênh lệch giá mua-bán, hoặc với khối lượng quá nhỏ để khớp lệnh của bạn.

Hãy xét một thanh nến 1 phút có giá mở cửa 100.00, mức thấp nhất 99.80 và giá đóng cửa 100.10. Chiến lược của bạn thấy thanh nến đã hoàn tất, gửi lệnh mua và trình mô phỏng khớp lệnh ở mức 99.80. Mức thấp đó có thể đã xuất hiện gần đầu phút, trước tín hiệu 50 giây. Thanh nến không cung cấp bằng chứng rằng mức 99.80 vẫn có sẵn sau khi quyết định được đưa ra.

Dữ liệu bạn cóDữ liệu đó xác lập điều gìDữ liệu đó không thể xác lập điều gì
Thanh nến OHLCVBiên độ giá giao dịch và khối lượng được ghi nhận trong một khoảng thời gianTrình tự giá, bid và ask, hoặc mức độ sẵn có khi lệnh đến nơi
Bản ghi giao dịchCác giao dịch được báo cáo cùng dấu thời gian và mức giáThanh khoản chờ khớp hoặc vị trí của bạn trong hàng đợi
Báo giá ở mức tốt nhấtBid và ask tốt nhất được hiển thị tại các thời điểm lấy mẫuĐộ sâu ngoài mức giá tốt nhất hoặc liệu báo giá có duy trì giữa các lần lấy mẫu hay không
Sự kiện sổ lệnhThay đổi độ sâu hiển thị và sự kiện hàng đợi, tùy thuộc vào phạm vi dữ liệu của nguồn cấpThanh khoản ẩn, khả năng tiếp cận sàn giao dịch hoặc quyền ưu tiên được đảm bảo

Một nguyên nhân phổ biến khác là nhầm giá trung điểm với mức giá có thể khớp. Nếu báo giá là bid 99.99 và ask 100.01, mức giá trung điểm 100.00 trông gọn gàng trong báo cáo. Lệnh mua có thể khớp ngay thường phải trả giá ask, cộng thêm tác động thị trường do quy mô lệnh. Dùng giá trung điểm làm giá khớp âm thầm bỏ qua một nửa chênh lệch giá mua-bán.

Lệnh giới hạn có thể khớp chỉ vì thị trường chạm mức giá của lệnh không?

Việc chạm mức giá cho thấy đã có giao dịch được ghi nhận ở mức giá giới hạn. Điều đó không chứng minh lệnh chờ khớp của bạn đã được thực hiện. Nếu có lệnh khác đứng trước, khối lượng giao dịch tại mức giá đó có thể quá nhỏ để tới vị trí của bạn trong hàng đợi. Giao dịch được ghi nhận cũng có thể đến từ một sàn khác, trong khi lệnh của bạn đang chờ ở nơi khác.

Giả sử lệnh giới hạn mua của bạn ở mức 50.00 và thị trường giao dịch 200 cổ phiếu ở mức đó sau khi bạn đặt lệnh. Trình mô phỏng dựa trên việc chạm giá sẽ khớp toàn bộ 500 cổ phiếu. Mô hình thận trọng hơn sẽ xét khối lượng đã giao dịch ở mức 50.00 hoặc tốt hơn sau khi lệnh đến nơi, rồi tính đến lượng lệnh ước tính đang xếp trước. Nếu không có dữ liệu sổ lệnh ở cấp độ lệnh, vị trí trong hàng đợi chỉ là một giả định. Kết quả cần thể hiện rõ giả định đó, thay vì lén biến nó thành điều chắc chắn.

Với một hệ thống nghiên cứu nhỏ, tôi muốn nêu rõ giả định đó và kiểm tra một khoảng giá trị thay vì giả vờ dữ liệu nến cho biết ưu tiên trong hàng đợi. Khoảng phù hợp tùy thuộc vào sàn, quy mô lệnh và tần suất giao dịch của chiến lược. Một cổ phiếu ít biến động lúc mở cửa và một hợp đồng crypto thanh khoản mỏng lúc 03:00 UTC đặt ra những bài toán khớp lệnh khác nhau.

Tôi nên chọn mô hình khớp lệnh nào cho dữ liệu thanh nến?

Hãy chọn mô hình phù hợp với cả dữ liệu lẫn tuyên bố mà chiến lược đưa ra. Backtest dựa trên thanh nến vẫn có thể hữu ích với chiến lược chậm, nhưng mức khớp lệnh cần tuân theo những gì dữ liệu nến thực sự cho thấy.

  1. Xác định thời điểm ra quyết định và thời điểm lệnh đến nơi. Nếu tín hiệu sử dụng giá đóng cửa của thanh nến, hãy gửi lệnh sau thời điểm đóng cửa đó. Mô phỏng khớp lệnh từ khoảng thời gian hoặc báo giá khả dụng tiếp theo, thay vì lấy mức thấp sớm hơn của thanh nến đã hoàn tất.
  2. Dùng đúng phía của chênh lệch giá mua-bán. Với lệnh mua có thể khớp ngay, bắt đầu từ ask; với lệnh bán, từ bid. Nếu chỉ có thanh nến giao dịch, hãy ước tính chênh lệch giá từ một nguồn riêng hoặc ghi rõ mô hình đã bỏ qua yếu tố này.
  3. Giới hạn khối lượng khớp theo thanh khoản hợp lý. Áp dụng giới hạn tỷ lệ tham gia trên khối lượng quan sát được và tính cả phí lẫn tác động thị trường. Tổng khối lượng của một thanh nến không có nghĩa là toàn bộ khối lượng đó sẵn có ở mức giá bạn chọn.
  4. Kiểm tra sức chịu đựng của các giả định. So sánh khớp ở giá mở cửa tiếp theo với trượt giá thận trọng và kiểm tra xem kết quả có còn đứng vững khi khớp lệnh kém hơn hay không. Đừng tinh chỉnh mô hình khớp lệnh cho đến khi chiến lược có lời.

Đây là các lựa chọn mô hình hóa, không phải công thức khôi phục mức khớp lệnh đúng duy nhất từ dữ liệu không đầy đủ. Nếu chiến lược phụ thuộc vào việc kiếm vài điểm cơ bản, dữ liệu thanh nến có thể chưa đủ làm bằng chứng cho tuyên bố đó.

Làm thế nào để tìm ra mức khớp lệnh bất khả thi đã lọt vào backtest từ đâu?

Hãy lần theo một giao dịch đáng ngờ từ tín hiệu đến sổ ghi nhận. Lưu riêng dấu thời gian ra quyết định, dấu thời gian gửi lệnh, thời điểm lệnh mô phỏng đến nơi, quan sát thị trường được chọn, giá khớp, khối lượng khớp và phí. Sau đó kiểm tra lần lượt:

Nếu không thể trả lời những câu hỏi đó từ hồ sơ giao dịch, backtest đang thiếu bằng chứng về khớp lệnh. Hãy bổ sung các trường dữ liệu, phát lại thủ công một số giao dịch dựa trên dữ liệu thô và kiểm tra xem mức khớp được báo cáo có thể xảy ra theo mô hình bạn định dùng hay không. Đường vốn mượt mà không thể phát hiện mức giá chỉ tồn tại bên trong trình mô phỏng.

backtestdữ liệu thị trườngkhớp lệnhkỹ thuật dữ liệu
← Tất cả bài viết