Khi hệ thống giao dịch mới theo công nghệ KRX được đưa vào vận hành giữa năm 2025, quy ước đặt mã hợp đồng phái sinh trên HNX cũng đổi theo. Với người chỉ xem bảng giá hàng ngày, đây là chuyện kỹ thuật vô hại. Với người ghép dữ liệu lịch sử để backtest, đây là chỗ chuỗi hợp đồng liên tục âm thầm gãy — và phần lớn công cụ ghép chuỗi đơn giản không phát hiện ra.
Vấn đề nằm ở chỗ nào
Chuỗi hợp đồng liên tục VN30F1M được ghép từ nhiều hợp đồng tháng kế tiếp nhau qua các lần roll. Cách ghép phổ biến nhất — nối theo đúng chuỗi ký tự mã hợp đồng đọc được trên bảng giá — giả định ngầm rằng mã hợp đồng của "cùng một kỳ hạn tháng gần" là ổn định theo thời gian.
Giả định đó đúng trước thời điểm chuyển đổi. Khi hệ thống KRX đổi định dạng mã, cùng một hợp đồng thực tế (cùng tài sản cơ sở, cùng ngày đáo hạn) có thể xuất hiện dưới hai ký hiệu khác nhau ở hai phía của mốc chuyển đổi. Một script ghép chuỗi theo mã ký tự thuần tuý sẽ đọc đây là "hai hợp đồng khác nhau" — hoặc bỏ sót một đoạn dữ liệu, hoặc tạo ra một bước nhảy giá giả tại đúng ngày chuyển hệ thống.
Hậu quả với backtest: mọi chỉ báo tính trên chuỗi giá (biến động, đường trung bình, drawdown) chạy qua đúng mốc đó đều sai, và sai theo cách không dễ nhận ra nếu người kiểm định không biết để tìm.
Cách Stockup ghép chuỗi qua mốc chuyển đổi
Thay vì nối theo mã ký tự đọc được trên bảng giá, Stockup định danh mỗi hợp đồng bằng cặp (tài sản cơ sở, ngày đáo hạn thực tế) lấy từ công bố hợp đồng của Sở, không phải từ chuỗi ký tự mã. Hai bản ghi có cùng cặp định danh này được coi là cùng một hợp đồng dù mã hiển thị khác nhau trước/sau mốc chuyển hệ thống.
Với cách định danh này, việc đổi mã hợp đồng không tạo ra bước nhảy giá giả hay khoảng trống dữ liệu — chuỗi vẫn liên tục qua mốc chuyển đổi vì phép nối không phụ thuộc vào chuỗi ký tự mã.
Một dấu hiệu phụ để kiểm tra: basis quanh mốc đáo hạn
Basis (chênh lệch giá hợp đồng tương lai so với chỉ số cơ sở) luôn hội tụ về gần 0 khi hợp đồng tiến gần ngày đáo hạn — đây là cơ chế toán học của mọi hợp đồng tương lai, không riêng VN30F1M. Nếu chuỗi dữ liệu bạn ghép bị đứt/nhảy giá giả quanh mốc chuyển đổi mã KRX, đường basis sẽ mất đúng hình dạng hội tụ này tại điểm đó — một cách gián tiếp để phát hiện lỗi ghép chuỗi ngoài việc so khớp ngày đáo hạn thủ công.
Vì sao điều này quan trọng khi tự kiểm định
Nếu bạn tự tải dữ liệu và ghép chuỗi bằng tay, hãy kiểm tra riêng đoạn dữ liệu quanh mốc chuyển đổi hệ thống KRX: so khớp ngày đáo hạn của hợp đồng cuối cùng theo mã cũ với ngày đáo hạn của hợp đồng đầu tiên theo mã mới. Nếu hai giá trị này không khớp hoặc có khoảng trống ngày giữa chúng, chuỗi dữ liệu đang dùng nhiều khả năng đã bị đứt tại đúng điểm này.
