Chiến lược gửi một lệnh giới hạn lúc 10:00. Tín hiệu thay đổi lúc 10:03. Backtest âm thầm thay lệnh lúc 10:04, rồi ghi nhận khớp lệnh lúc 10:05. Trong giao dịch mô phỏng, lệnh ban đầu có thể vẫn đang chờ tại sàn. Nếu lệnh đó được khớp trong khi lệnh thay thế cũng đang hoạt động, chiến lược có 2 lệnh nhưng mô hình vị thế lại giả vờ như chỉ có 1.
Lệnh đang mở cần có trạng thái và đồng hồ riêng. Backtest cần biết từng lệnh được gửi lúc nào, khi nào có thể hủy, yêu cầu hủy có đến được sàn hay không, và điều gì xảy ra nếu lệnh được khớp đúng lúc yêu cầu hủy đang được xử lý. 3 lối tắt thường xuyên xóa mất những thông tin này.
Sai lầm 1: Coi tín hiệu mới là lệnh hủy tức thời
Nhiều backtest tính lại vị thế mục tiêu theo mỗi nến, rồi ghi đè lệnh đang chờ bằng lệnh mà tín hiệu mới nhất yêu cầu. Như vậy, lệnh biến mất đúng lúc chiến lược đổi ý. Sàn thực tế không hoạt động như thế. Yêu cầu hủy cần thời gian xử lý và lệnh có thể được khớp trước khi sàn nhận yêu cầu.
Xét một lệnh mua giới hạn 100 cổ phiếu ở mức $50.00. Lúc 10:03, tín hiệu yếu đi nên chiến lược gửi yêu cầu hủy. Lúc 10:03:00.080, lệnh được khớp 60 cổ phiếu; yêu cầu hủy được xác nhận lúc 10:03:00.110. 40 cổ phiếu còn lại bị hủy, nhưng vị thế lúc này đã có 60 cổ phiếu. Backtest theo nến xóa lệnh lúc 10:03 có thể báo kết quả bằng 0. Còn backtest giả định hủy tức thời nhưng vẫn ghi nhận một lần khớp sau đó thì đã tạo ra mức phơi nhiễm theo hướng ngược lại.
Theo dõi rõ vòng đời lệnh: đã gửi, đã xác nhận, khớp một phần, đang chờ hủy, đã hủy hoặc khớp toàn bộ. Giữ lại các lần khớp xảy ra trước khi việc hủy được xác nhận. Với mô phỏng theo nến thô, hãy chọn và công bố quy tắc sắp thứ tự thận trọng khi cả hai sự kiện có thể xảy ra trong cùng một nến.
Sai lầm 2: Để lệnh chờ có thời hạn tồn tại vô hạn
Một lệnh giới hạn được định giá theo tín hiệu lúc 10:00 có thể trở nên lỗi thời ngay cả khi tín hiệu không có quy tắc thoát rõ ràng. Sổ lệnh biến động, độ biến động thay đổi và giá trị thị trường của công cụ có thể dịch chuyển. Thế nhưng, trình mô phỏng để lệnh hoạt động cho đến khi được khớp có thể ghi nhận một lần khớp sau nhiều tháng và gán nó cho một luận điểm giao dịch đã không còn tồn tại.
Hãy đặt chính sách hiệu lực của lệnh phù hợp với chiến lược. Tín hiệu 1 phút có thể dùng thời hạn 30 giây; tái cân bằng hằng ngày có thể giữ lệnh đến lúc đóng cửa. Đây là lựa chọn của chiến lược, không phải mặc định dùng cho mọi trường hợp. Nếu chiến lược định giá lại ở mỗi nến, hãy mô phỏng trình tự hủy lệnh rồi thay lệnh, thay vì làm như lệnh đã tức thì chuyển đến mức giá mới.
| Chính sách lệnh | Cách dùng thường gặp | Câu hỏi cho backtest |
|---|---|---|
| Khớp ngay hoặc hủy | Khớp với thanh khoản sẵn có, sau đó dừng | Có thể khớp bao nhiêu khi gửi lệnh? |
| Thời hạn ngắn | Tín hiệu nhanh với khoảng thời gian khớp lệnh ngắn | Lệnh còn hiệu lực khi giá quay trở lại không? |
| Đến hết phiên | Tái cân bằng chậm hoặc chủ đích khớp lệnh trong phiên đấu giá đóng cửa | Sàn có thực sự hỗ trợ thời hạn đó không? |
Sai lầm 3: Coi mọi lần chạm giá là một lần khớp
Nếu giá thấp nhất của nến chạm mức lệnh mua giới hạn, điều đó không có nghĩa là lệnh đã được khớp. Có thể có lệnh khác xếp trước trong hàng đợi, khối lượng giao dịch ở mức giá đó thấp, hoặc giao dịch thoáng qua diễn ra trước khi lệnh được gửi đến. Mô hình lệnh lỗi thời thường mắc cả 3 lỗi: để lệnh hoạt động quá lâu, giả định lệnh đứng đầu hàng đợi, rồi ghi nhận khớp toàn bộ khi giá chạm mức đặt.
Tối thiểu, hãy ngăn việc khớp lệnh trước thời điểm lệnh đến sàn và giới hạn khối lượng mô phỏng theo khối lượng giao dịch hợp lý tại mức giá đặt. Với chiến lược phụ thuộc vào vị trí trong hàng đợi, hãy dùng dữ liệu giao dịch và sổ lệnh, hoặc một mô hình hàng đợi có chủ đích thận trọng. Giả định khớp khi giá chạm vẫn hữu ích cho việc sàng lọc sơ bộ, nhưng hãy ghi rõ đây là một ước tính lạc quan và so sánh với giả định khắt khe hơn.
Một cách kiểm tra thực tế: ghi lại thời điểm tạo lệnh, khoảng thời gian lệnh hoạt động, yêu cầu hủy và xác nhận hủy, thời điểm khớp, khối lượng đã khớp và khối lượng còn lại của từng lệnh. Sau đó phát lại một vài giao dịch quanh thời điểm tín hiệu đảo chiều. Nếu bạn không giải thích được vì sao từng lệnh vẫn còn hiệu lực khi được khớp, thì cần rà soát lại số lần khớp trong backtest.
Mô hình hóa đúng lệnh bạn định chạy thử bằng giao dịch mô phỏng
Trạng thái lệnh kết nối ý định của chiến lược với mức phơi nhiễm thực tế. Vị thế chỉ nên thay đổi khi lệnh được khớp, chứ không phải khi có mức vị thế mục tiêu theo tín hiệu hay khi gửi yêu cầu hủy. Các lệnh thay thế cần để lại dấu vết có thể kiểm tra, còn phần khớp một phần phải được giữ lại cho quyết định tiếp theo. Cách này khiến backtest phức tạp hơn, nhưng cũng giúp việc so sánh với giao dịch mô phỏng có ý nghĩa: hai hệ thống có thể khác nhau về khớp lệnh vì những lý do xác định được.
Khi mô hình lệnh chưa chắc chắn, hãy giữ nguyên mức độ bất định đó trong kết quả. Hãy chạy mô phỏng với thời hạn lệnh ngắn và dài, thay đổi độ trễ hủy, rồi cho thấy hiệu suất phụ thuộc đến mức nào vào các giả định lạc quan về vị trí trong hàng đợi. Chiến lược có thể vẫn ổn. Nhưng lợi thế tưởng như có được cũng có thể chỉ là phần lãi từ một lệnh mà hệ thống thực tế đã hủy từ nhiều giờ trước.
← Tất cả bài viết


