Kiểm thử dữ liệu quá khứ là tính năng cơ bản của các phần mềm hỗ trợ bên thứ ba như AmiBroker, TradingView và MetaTrader. Dưới đây là phân tích chi tiết các mô-đun cơ bản cần có để phát triển hệ thống kiểm thử dữ liệu quá khứ.
Lợi ích của mô-đun kiểm thử dữ liệu quá khứ
Đối với nhà đầu tư tổ chức hoặc các nhóm phát triển giao dịch thuật toán chuyên nghiệp, kiểm thử dữ liệu quá khứ là giai đoạn sàng lọc hết sức quan trọng để trả lời câu hỏi thuật toán đang kiểm thử liệu có lợi nhuận trong tương lai hay không?
Khi số lượng thuật toán cần kiểm thử càng tăng lên, các tác vụ lặp đi lặp lại càng nhiều dẫn đến nhu cầu chuẩn hóa đầu ra của giai đoạn kiểm thử. Do đó, hình thành nhu cầu xây dựng mô-đun chuyên kiểm thử dữ liệu quá khứ nhằm chuẩn hóa quy trình kiểm thử.
Đồng thời, xây dựng thuật toán trên mô-đun kiểm thử được giả lập giống môi trường thật sẽ cho phép lập trình một lần duy nhất nhưng có thể sử dụng đồng thời cho kiểm thử và giao dịch môi trường thật, không cần lập trình hai phiên bản khác nhau.
Cuối cùng, vì mô-đun kiểm thử được xây dựng trên môi trường giả lập nên hạn chế lỗi xảy ra do thay đổi môi trường kiểm thử, đồng thời tăng độ tương đồng của hành vi giao dịch trong môi trường kiểm thử và môi trường thật.
Hướng phát triển mô-đun kiểm thử dữ liệu quá khứ
Mô-đun kiểm thử một thuật toán được chia thành ba phần:
Giả lập công ty chứng khoán. Đây là yêu cầu bắt buộc cần có để kiểm thử dữ liệu quá khứ trong dài hạn. Có thể hiểu tác vụ này là thành lập một công ty chứng khoán giả lập nhận lệnh, khớp lệnh hoặc hủy lệnh của thuật toán cần kiểm thử.Dựa vào tình trạng tài khoản ảo và trạng thái thị trường ở thời điểm nhận yêu cầu tạo lệnh mà quyết định từ chối hay tiếp nhận lệnh. Sau khi tiếp nhận lệnh mới sẽ dựa vào diễn biến thị trường để giả lập việc khớp lệnh tương tự như giao dịch thật. Về cơ bản công ty chứng khoán giả lập gần như có đầy đủ chức năng của một công ty chứng khoán thật ngoại trừ trường hợp đặc biệt như khớp lệnh một phần. Giả lập công ty chứng khoán cần đầu tư nhiều công sức nhưng về dài hạn sẽ hỗ trợ nhà đầu tư kiểm thử dữ liệu quá khứ một cách khách quan nhất có thể.
Lập trình thuật toán. Thuật toán được lập trình để có thể nhận dữ liệu quá khứ, trả về tín hiệu giao dịch và thực hiện giao dịch cùng với công ty chứng khoán giả lập để hình thành nên lịch sử giao dịch. Điểm quan trọng trong giai đoạn này là cùng một đoạn mã lập trình có thể ứng dụng trong mọi công đoạn: kiểm thử dữ liệu quá khứ, kiểm thử dữ liệu tương lai và vận hành trên môi trường thật.
Báo cáo. Hệ thống kiểm thử dữ liệu quá khứ cần chuẩn hóa báo cáo kiểm thử dữ liệu quá khứ để thuận lợi cho việc phát triển theo chiều ngang. Các thông số cơ bản cần có trong báo cáo kiểm thử dữ liệu quá khứ bao gồm:
-
Đường tổng tài sản theo thời gian;
-
Lợi nhuận;
-
Maximum drawdown;
-
Tỷ lệ Sharpe;
-
Tỷ lệ số lần mở vị thế có lợi nhuận/thua lỗ;
-
Giá trị kỳ vọng khi có lợi nhuận;
-
Giá trị kỳ vọng khi thua lỗ;
-
Chuỗi lợi nhuận dài nhất;
-
Chuỗi thua lỗ dài nhất;
-
Thống kê drawdown.
Lịch sử giao dịch được khuyến nghị xuất ra theo định dạng Excel để dễ dàng truy cập, kiểm tra, chỉnh sửa, và minh họa.
Logic giả lập công ty chứng khoán và đánh giá hiệu suất và rủi ro là giống nhau cho mọi thuật toán, do đó, nên phát triển riêng biệt để tái sử dụng cho những thuật toán khác nhau. Như vậy, có thể tiết kiệm công sức đồng thời giảm thiểu lỗi lập trình. Mục tiêu khi phát triển các mô-đun này độc lập là mô phỏng thị trường thật và tính toán chỉ số đánh giá nên sẽ không bị ảnh hưởng bởi một thuật toán cụ thể. Kết quả đánh giá thuật toán sẽ khách quan hơn.
Hướng triển khai giả lập công ty chứng khoán
Triển khai giả lập công ty chứng khoán là trọng tâm trong các phần của mô-đun kiểm thử dữ liệu quá khứ. Phần này gồm ba vấn đề cần xử lý:
-
Một, xây dựng một công ty chứng khoán giả lập (paper trad- ing broker) có thể nhận lệnh, hủy lệnh, trả kết quả khớp lệnh và tình trạng tài khoản thông qua API.
-
Hai, xác định một lệnh bất kỳ có khớp không và khớp bao nhiêu dựa vào thông tin có được từ dữ liệu thị trường (khối lượng, giá, dư mua, dư bán) ở thời điểm đặt lệnh (có thể là trong quá khứ đối với kiểm thử dữ liệu quá khứ hoặc hiện tại đối với kiểm thử dữ liệu tương lai). Một ví dụ đơn giản của việc khớp lệnh: chương trình giả lập nhận được lệnh mua giới hạn ở giá X cho mã Y, nếu sau thời gian nhận lệnh và lệnh chưa được hủy mà giá thị trường của mã Y nhỏ hơn X, thì ta có thể mô phỏng là lệnh này đã khớp.
-
Ba, tất cả thông tin về các lệnh đã đặt, trạng thái lệnh, kết quả khớp lệnh, chi phí giao dịch, và tình trạng tài khoản tại các thời điểm sẽ được lưu vào cơ sở dữ liệu. Những dữ liệu này sẽ được dùng tính toán các chỉ số đánh giá hiệu suất và rủi ro của thuật toán.
Chú ý rằng, tại thị trường Việt Nam, giai đoạn kiểm thử dữ liệu quá khứ có khá nhiều sai lệch với quá trình vận hành. Ngoài các vấn đề phổ biến có thể ước lượng được như thuế, phí, trượt giá thì khối lượng và dữ liệu khớp không quan sát được là điểm cần lưu ý. Khối lượng không đủ lớn sẽ giảm hiệu quả của thuật toán khi vận hành trong môi trường thật, trong khi dữ liệu khớp không quan sát được sẽ có ích cho các thuật toán dùng lệnh giới hạn và tác động tiêu cực đến các thuật toán dùng lệnh thị trường.