Lỗi thời điểm nguy hiểm nhất trong backtest vẫn có thể lọt qua một cuộc kiểm tra dấu thời gian hoàn hảo. Hai sự kiện có thể cùng ghi 10:00:00.000 mà vẫn xảy ra theo thứ tự do bộ mô phỏng tự suy đoán.
Điều này quan trọng bất cứ khi nào chiến lược phản ứng với thứ gì đó ngoài các nến đã hoàn tất: cập nhật báo giá, giao dịch, thông báo funding, thay đổi trạng thái sàn giao dịch hoặc xác nhận lệnh của chính bạn. Dấu thời gian cho biết sự kiện được gắn nhãn vào lúc nào. Nó có thể không cho biết khi nào chiến lược của bạn có thể hành động dựa trên sự kiện đó.
Thứ tự sự kiện làm thay đổi điều gì?
Hãy hình dung một chiến lược mua khi giá bán tốt nhất giảm xuống dưới $100.00. Cùng một mili giây, dữ liệu ghi nhận cập nhật giá bán thành $99.99 và một giao dịch ở mức $99.99. Nếu backtest xử lý giao dịch trước rồi mới đến báo giá, chiến lược thấy giá bán mới và gửi lệnh. Xử lý báo giá trước cũng có thể ổn, miễn là sự kiện đó thực sự đã khả dụng. Nhưng nếu giao dịch đã sử dụng hết thanh khoản hiển thị trước khi lệnh đến nơi, thì việc khớp ở mức $99.99 chỉ là hư cấu.
Chỉ sắp xếp các dòng theo dấu thời gian sẽ buộc bộ mô phỏng tự chọn thứ tự cho những sự kiện trùng thời điểm. Thứ tự trong tệp, thứ tự mã giao dịch hoặc kế hoạch truy vấn cơ sở dữ liệu có thể vô tình trở thành quy tắc khớp lệnh. Đường vốn có thể thay đổi dù dữ liệu nền không đổi.
Có một cách hay để thấy việc này có thể tùy tiện đến mức nào: sắp xếp các sự kiện cùng thời điểm theo tên mã thay vì thứ tự đến. Khi đó, một chiến lược đa tài sản có thể hành xử khác đi chỉ vì một mã được xếp trước mã khác.
Backtest nên lưu những mốc thời gian nào?
Dữ liệu thị trường và xử lý lệnh thường liên quan đến một số mốc thời gian riêng biệt. Hãy giữ lại các trường mà nguồn dữ liệu cung cấp và ghi rõ ý nghĩa của chúng. Với nhiều luồng dữ liệu, dấu thời gian của sàn và dấu thời gian nhận tại máy cục bộ đều hữu ích; không mốc nào là sự thật phổ quát về những gì mọi bên tham gia đã thấy.
| Mốc thời gian | Ghi nhận điều gì | Bản thân nó không thể chứng minh điều gì |
|---|---|---|
| Thời điểm sự kiện trên sàn | Thời điểm sàn cho biết sự kiện xảy ra | Thứ tự mà một luồng dữ liệu khác hoặc quy trình của bạn ghi nhận sự kiện |
| Thời điểm nhận | Thời điểm bộ thu thập của bạn nhận được thông điệp | Thời điểm chiến lược xử lý xong thông điệp |
| Thời điểm ra quyết định | Thời điểm mã của bạn đánh giá tín hiệu | Rằng mức giá được báo vẫn còn khả dụng |
| Thời điểm lệnh đến sàn | Thời điểm sàn có thể xử lý lệnh | Một lần khớp, trừ khi quy tắc khớp lệnh và thanh khoản cho phép |
Với dữ liệu lịch sử không có thời điểm nhận, hãy nêu rõ giả định của bạn. Backtest có thể xử lý các sự kiện trên sàn theo thứ tự và áp dụng độ trễ cố định 5 ms từ lúc ra quyết định đến khi lệnh đến sàn. Đó là mô hình, không phải lịch sử được khôi phục. Nếu không có số thứ tự cho các sự kiện cùng dấu thời gian trên sàn, quy tắc xử lý sự kiện đồng thời của bạn cũng là một giả định.
Tôi nên mô hình hóa các sự kiện trùng thời điểm như thế nào?
Trước hết, hãy giữ lại số thứ tự của nguồn nếu có. Số thứ tự xác định thứ tự trong luồng dữ liệu đáng tin cậy hơn dấu thời gian, dù các kênh hoặc sản phẩm khác nhau có thể dùng các dải số thứ tự riêng.
Tiếp đó, hãy nêu rõ quy tắc xử lý của bộ mô phỏng. Với mỗi sự kiện, hãy quyết định liệu nó có thể cập nhật thông tin của chiến lược, thay đổi thanh khoản khả dụng, kích hoạt lệnh hay xác nhận lệnh hay không. Đây là những hành động khác nhau; gộp tất cả thành “xử lý dòng dữ liệu” là cách khiến các lần khớp lệnh bất khả thi lọt vào mô phỏng.
- Chỉ áp dụng thông tin thị trường đã đến trước thời điểm ra quyết định của chiến lược.
- Tạo lệnh, rồi mô phỏng lệnh đến sàn theo thời điểm đến được giả định.
- Chỉ cho phép khớp lệnh với thanh khoản đủ điều kiện sau khi lệnh đến, theo các giả định khớp lệnh dành cho loại lệnh đó.
- Ghi lại dữ liệu đầu vào, thứ tự sự kiện và độ trễ dùng cho mỗi lần khớp lệnh được mô phỏng.
Với chiến lược dựa trên nến, những bước này có thể rườm rà hơn mức cần thiết cho câu hỏi nghiên cứu. Nếu tín hiệu dùng các nến 1-minute đã hoàn tất và lệnh được khớp ở giá mở cửa của nến tiếp theo với mô hình chi phí thận trọng, thứ tự sự kiện ở cấp dưới một mili giây có lẽ không làm thay đổi kết luận nghiên cứu. Điều quan trọng là mức độ chi tiết về thời điểm phải phù hợp với tuyên bố mà backtest đưa ra.
Tôi có thể tin backtest khi không có dữ liệu thời điểm lệnh đến không?
Bạn vẫn có thể sử dụng backtest, nhưng hãy nói rõ giới hạn của nó. Nếu chiến lược giao dịch chậm và giới hạn rủi ro rộng, vài mili giây có thể không đáng kể. Nếu chiến lược phản ứng với báo giá thoáng qua, cạnh tranh vị trí trong hàng đợi hoặc phụ thuộc vào tín hiệu dẫn trước và trễ sau giữa các sàn, việc thiếu thời điểm lệnh đến có thể ảnh hưởng cốt yếu đến kết quả.
Những người chỉ trích có lý khi cho rằng thời điểm sự kiện chính xác có thể tạo cảm giác chính xác giả. Luồng dữ liệu lịch sử không đầy đủ, đồng hồ có thể bị lệch và dấu thời gian của sàn không cho thấy mọi chặng mạng. Bộ mô phỏng có các trường nanosecond vẫn có thể dựa trên giả định khớp lệnh thô sơ.
Vì vậy, hãy kiểm tra độ nhạy thay vì khẳng định chắc chắn: phát lại với các cách xử lý sự kiện trùng thời điểm và độ trễ lệnh hợp lý, rồi so sánh số giao dịch, giá khớp và những tín hiệu còn trụ lại. Nếu kết quả phụ thuộc vào một thứ tự mà dữ liệu không thể xác định, hãy nêu rõ sự phụ thuộc đó trong báo cáo nghiên cứu. Backtest vẫn có thể hữu ích dù đồng hồ không hoàn hảo. Chỉ cần thừa nhận rõ nó thực sự biết được thời điểm nào.
← Tất cả bài viết


