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

Vì sao lệnh giới hạn trong backtest được khớp dù thị trường chưa chạm tới?

Vì sao lệnh giới hạn trong backtest được khớp dù thị trường chưa chạm tới?

Backtest có thể khớp lệnh giới hạn của bạn dù không hề có cơ hội giao dịch thực sự. Nếu giá thấp nhất của một nến chạm xuống dưới giá giới hạn mua, nhiều engine sẽ tính là đã khớp. Nhưng giá thấp nhất chỉ cho biết đã có ít nhất một giao dịch được ghi nhận ở mức giá đó hoặc thấp hơn. Nó không cho biết khối lượng giao dịch là bao nhiêu, có bao nhiêu lệnh xếp trước bạn trong hàng đợi, hay lệnh của bạn đã được đưa vào thị trường kịp lúc chưa.

Khác biệt này quan trọng nhất khi lợi thế của chiến lược phụ thuộc vào việc thường xuyên được khớp thụ động. Mô hình coi mọi lần giá chạm tới là khớp toàn bộ có thể biến một lệnh vào kiên nhẫn thành nguồn alpha tưởng tượng.

Nến chạm tới giá giới hạn của tôi có nghĩa là lệnh đã được khớp không?

Không. Điều đó chỉ có nghĩa là khoảng giá được ghi nhận của nến có chứa giá giới hạn của bạn. Lệnh có thể được khớp hay không còn tùy thuộc vào sổ lệnh, dòng lệnh giao dịch, vị trí của bạn trong hàng đợi và thời điểm lệnh được đưa vào thị trường.

Hãy hình dung một lệnh giới hạn mua ở mức $100.00. Nến mở cửa ở $100.20, chạm đáy tại $99.98 rồi đóng cửa ở $100.10. Có thể đã có giao dịch khớp thấp hơn giá của bạn 2 cent, nhưng nếu ở mức $100.00 có một hàng đợi lớn đứng trước bạn và chỉ một lượng nhỏ được giao dịch tại đó, lệnh của bạn có thể vẫn chưa được khớp. Chỉ với OHLCV, bạn không thể thấy hàng đợi đó.

Còn một điểm nữa: một nến gộp các sự kiện diễn ra theo thời gian. Nếu tín hiệu được tính từ giá đóng cửa của nến đó, bạn không thể giả định lệnh đã nằm sẵn trong sổ lệnh từ trước, khi giá chạm mức thấp nhất. Nến lược bỏ trình tự sự kiện vốn có thể trả lời câu hỏi này.

Dữ liệu OHLCV thực sự cho tôi biết được gì về việc khớp lệnh giới hạn?

OHLCV có thể loại trừ một số khả năng khớp lệnh và cho thấy những khả năng khác là hợp lý. Nhưng dữ liệu này không thể xác định thứ tự ưu tiên trong hàng đợi hay đảm bảo lượng khớp được cho lệnh của bạn.

Quan sátĐiều đó cho thấyĐiều đó không chứng minh được
Giá thấp nhất của nến vẫn cao hơn giá giới hạn muaKhông có giao dịch được ghi nhận chạm tới mức giá đó trong nếnLệnh sẽ được khớp
Giá thấp nhất của nến chạm tới giá giới hạn muaGiá được ghi nhận ở mức giới hạnCó khối lượng được giao dịch sau khi lệnh của bạn được đưa vào thị trường
Giá thấp nhất của nến xuống dưới giá giới hạn muaĐã có giao dịch ở mức giá đó hoặc thấp hơnKhối lượng đủ để đến được vị trí của bạn trong hàng đợi
Tổng khối lượng của nến lớn hơn quy mô lệnh của bạnThị trường đã giao dịch ít nhất chừng ấy khối lượng ở đâu đó trong nếnKhối lượng đó được giao dịch ở giá của bạn, sau khi lệnh được đưa vào thị trường

Vì vậy, engine dựa trên nến cần một giả định về khớp lệnh. Hãy xem giả định đó là một mô hình có điểm mù đã biết, chứ không phải sự thật rút ra từ cây nến.

Tôi nên mô hình hóa việc khớp lệnh giới hạn trong backtest như thế nào?

Hãy bắt đầu từ thời điểm đặt lệnh. Xác định khi nào tín hiệu khả dụng, khi nào lệnh đến sàn và những sự kiện thị trường tiếp theo nào có thể ảnh hưởng đến lệnh. Với tín hiệu chỉ có khi nến đóng cửa, quy tắc thận trọng dựa trên nến là chỉ cho phép lệnh có hiệu lực từ nến kế tiếp trở đi.

Tiếp theo, hãy tách điều kiện giá đủ để giao dịch khỏi khối lượng được khớp. Lệnh đủ điều kiện giao dịch ở một mức giá không có nghĩa là toàn bộ lệnh sẽ được khớp. Nếu bạn có dữ liệu giao dịch nhưng không có lịch sử sổ lệnh, có thể yêu cầu khối lượng giao dịch ở giá giới hạn hoặc tốt hơn phải vượt một bội số của quy mô lệnh. Bội số đó chỉ là một khoảng đệm ước lượng cho hàng đợi, không phải hằng số áp dụng ở mọi nơi. Hãy thử nhiều giá trị và báo cáo kết quả thay đổi ra sao.

Ví dụ, giả sử chiến lược đặt lệnh giới hạn mua 2 BTC và sau khi lệnh có hiệu lực, tại mức giá đã chọn có 3 BTC được giao dịch. Mô hình yêu cầu 5 BTC khối lượng đủ điều kiện sẽ không khớp lệnh; mô hình dùng bội số khối lượng 1.0 sẽ khớp lệnh. Cả hai kết quả đều không tái dựng được hàng đợi. So sánh này cho thấy chiến lược phụ thuộc đến mức nào vào một giả định mà bạn không thể quan sát.

Hãy giữ các lệnh chưa khớp trong mô phỏng. Hủy chúng khi chiến lược sẽ hủy, và chấp nhận bỏ lỡ giao dịch. Nếu luôn cho chiến lược khớp lệnh khi giá giới hạn được chạm tới, đồng thời bỏ qua các lệnh hết hạn mà chưa khớp, bạn sẽ làm sai lệch cả kết quả thực thi lẫn số cơ hội.

Khi nào tôi cần dữ liệu sổ lệnh?

Hãy dùng dữ liệu cập nhật sổ lệnh và giao dịch khi vị trí trong hàng đợi hoặc việc khớp một phần là yếu tố cốt lõi của chiến lược: tạo lập thị trường, báo giá thụ động trong thời gian ngắn hoặc vào lệnh phụ thuộc vào việc đứng gần đầu hàng đợi ở một mức giá đông đúc. Ngay cả khi đó, dữ liệu lịch sử công khai có thể không cho biết chính xác vị trí của bạn trong hàng đợi. Bạn cần mô hình hóa thời điểm lệnh đến sàn, các lệnh bị hủy phía trước, quy tắc khớp lệnh và tác động thị trường từ chính lệnh của bạn.

Với chiến lược giao dịch chậm hơn, dữ liệu sổ lệnh chi tiết có thể làm tăng độ phức tạp mà không giải quyết được điểm bất định chính. Một nghiên cứu dựa trên nến vẫn có thể so sánh mức trần giả định khớp khi chạm giá với các kịch bản chặt chẽ hơn, có điều kiện về khối lượng. Nếu lợi thế tưởng như có được biến mất ngay khi bạn yêu cầu điều kiện khớp lệnh hợp lý, đó là thông tin hữu ích cho nghiên cứu.

Làm sao biết kết quả của tôi phụ thuộc vào giả định khớp lệnh quá lạc quan?

Chạy cùng một chiến lược với một số quy tắc khớp lệnh được xác định rõ và so sánh nhiều chỉ số hơn là lợi nhuận cuối kỳ. Theo dõi số lệnh đã khớp, tỷ lệ khớp một phần, thời gian lệnh nằm chờ, khối lượng bị hủy, các nhịp giá bỏ lỡ do không khớp và doanh số giao dịch. Chiến lược có thể giữ nguyên lợi nhuận nổi bật trên báo cáo trong khi thực chất dựa vào số giao dịch ít hơn nhiều và thuận lợi hơn.

Giao dịch mô phỏng là bước kiểm tra hữu ích tiếp theo: gửi lệnh theo đúng logic thực tế và ghi lại xác nhận, khớp lệnh và hủy lệnh. Việc khớp lệnh mô phỏng vẫn phụ thuộc vào quy tắc riêng của sàn hoặc trình mô phỏng, nhưng bước này kiểm tra được thời điểm và cách xử lý lệnh mà nến không thể thể hiện.

Giá giới hạn được chạm tới là bằng chứng về giá. Khớp lệnh là một khẳng định về thực thi. Backtest của bạn nên cho thấy rõ khoảng cách giữa hai khẳng định đó.

lệnh giới hạnbacktestvi cấu trúc thị trườngmô hình khớp lệnhthực thi
← Tất cả bài viết