Để sẵn sàng giao dịch trong môi trường thật, một thuật toán giao dịch phải có nền tảng lý luận, khác với những mẫu hình tạo ra lợi nhuận nhưng không thể diễn giải được. Những mẫu hình này có thể được tìm bằng cách vét cạn từ dữ liệu quá khứ. Dữ liệu quá khứ chỉ nên dùng để ứng dụng lý thuyết tài chính vào một thị trường cụ thể.
Quá trình tối ưu hóa bắt đầu bằng việc đưa ra một giả thuyết dưới dạng một thuật toán sơ khởi. Thuận toán này có thể được đưa ra bởi một chuyên gia dựa trên kiến thức tài chính hoặc kinh nghiệm thực tế của họ. Thuật toán sơ khởi này được kiểm tra và tối ưu trên một khoảng dữ liệu quá khứ đủ dài nhằm cho ra một thuật toán hoàn chỉnh, lợi nhuận tốt, và ổn định. Khoảng dữ liệu quá khứ đó được gọi là khoảng dữ liệu trong mẫu của thuật toán tinh chỉnh. Khoảng dữ liệu trong mẫu này cần phải phản ánh được độ biến động của thị trường và thuật toán cần tạo ra đủ nhiều giao dịch trên tập dữ liệu này để độ hiệu quả của thuật toán đạt được ý nghĩa thống kê.
Một thuật toán sơ khởi được tinh chỉnh bằng cách thêm vào những luật mới và điều chỉnh tham số sao cho độ hiệu quả của thuật toán tinh chỉnh trên thị trường mục tiêu là tối ưu. Độ hiệu quả khi đó được đo đạc bằng một hàm mục tiêu, còn thị trường mục tiêu được đại diện bằng một tập dữ liệu trong mẫu.
Độ hiệu quả tối ưu của thuật toán là sự cân bằng giữa lợi nhuận và rủi ro, không phải là lúc thuật toán đạt lợi nhuận cao nhất, vậy nên, tỷ lệ Sharpe thường được chọn làm hàm mục tiêu. Hạn chế rủi ro thua lỗ lúc tối ưu cũng góp phần giảm thiểu hiện tượng quá khớp của thuật toán, một vấn đề rất cần được lưu ý trong quá trình phát triển thuật toán.
Hiện tượng quá khớp trong trường hợp này được định nghĩa là hiện tượng một thuật toán tinh chỉnh có hiệu quả rất tốt trên dữ liệu trong mẫu, nhưng khi thuật toán đó được kiểm nghiệm trên dữ liệu chưa từng thấy (ngoài mẫu) thì hiệu quả kém đi rất nhiều. Cho nên, khi tìm kiếm thuật toán tinh chỉnh tối ưu cần lưu ý rằng thuật toán này phải đáp ứng hai yêu cầu:
-
Tốt trong mẫu;
-
Có hiệu quả tương đương lúc kiểm nghiệm trong mẫu khi đưa vào vận hành thực tế.
Để đạt được điều đó, cần phải hạn chế hiện tượng quá khớp trong lúc xây dựng thuật toán. Vẫn có một vài kỹ thuật giúp hạn chế hiện tượng này, tuy nhiên rất khó để loại bỏ hoàn toàn.
Tìm thuật toán tinh chỉnh tối ưu
Hai bước tìm thuật toán tinh chỉnh tối ưu:
1. Thêm luật biến thiên
Khi tối ưu thuật toán, tính chất vận động liên tục của thị trường cần được lưu ý. Thay vì chọn giá trị tham số cố định, nếu có thể, nên tạo ra luật là hàm biến thiên theo chỉ số thống kê phản ánh tình trạng thị trường. Bằng cách này, thuật toán giao dịch có thể tự điều chỉnh để thích nghi khi thị trường thay đổi trạng thái, đảm bảo vận hành ổn định bất kể điều kiện thị trường.
Ví dụ, độ dao động là một chỉ báo quan trọng về tình hình thị trường. Khi thị trường có biên độ dao động thấp, thuật toán giao dịch có thể hoạt động khác với khi thị trường có biên độ dao động cao. Trung bình của hiệu giữa giá cao nhất và giá thấp nhất của VN30 trong một vài ngày gần đây có thể là một chỉ số thống kê phản ánh được độ dao động của thị trường. Khi sử dụng chỉ số này, thuật toán giao dịch có thể tự thích nghi để hoạt động tốt trên những biên độ dao động khác nhau của thị trường.
2. Tìm kiếm trên không gian tham số
Sau khi thêm luật để chọn giá trị tham số một cách linh hoạt dựa trên các chỉ số thống kê từ thị trường, vẫn sẽ có những tham số không thay đổi thường xuyên và cần phải xác định giá trị cụ thể. Không gian tham số là một tập hợp của tất cả tổ hợp có thể có của những giá trị tham số này, hay là tổ hợp của những tham số của thuật toán giao dịch. Nhiệm vụ chính của quy trình tối ưu là tìm ra bộ tham số cho hiệu quả tối ưu.
Một cách tiếp cận đơn giản là với mỗi bộ tham số, chạy kiểm thử quá khứ trong mẫu và đánh giá hiệu quả dựa trên hàm mục tiêu, sau đó, chọn ra bộ tham số cho hiệu quả cao nhất. Hàm mục tiêu có thể là tỷ lệ Sharpe hoặc một vài tiêu chí nào đó mà cân bằng giữa lợi nhuận và rủi ro. Phương pháp này có hạn chế là số lượng tham số có thể rất lớn hoặc vô tận. Trong các trường hợp đó sẽ không có đủ tài nguyên để thử hết tất cả bộ tham số. Một vấn đề nữa là bộ tham số với hiệu quả tốt nhất khi kiểm thử trong quá khứ không đảm bảo sẽ có được hiệu quả tương tự trong tương lai. Đó là hai vấn đề chính cần giải quyết trong quá trình tối ưu.
Nhiều phương pháp được đưa ra để chỉ cần kiểm tra một phần nhỏ của không gian tham số mà vẫn lựa chọn được bộ tham số gần tối ưu như: tìm kiếm trên lưới, tìm kiếm tham số ưu tiên, hoặc những thuật toán tìm kiếm nâng cao.
Tìm kiếm trên lưới. Phương pháp gần nhất với phương pháp đơn giản nêu trên khi mỗi tham số có một bộ giá trị định trước cần kiểm thử và bộ tham số được tạo ra bằng cách tổ hợp tất cả các giá trị định trước đó cho tất cả tham số. Bằng cách này, tất cả giá trị định sẵn của bộ tham số sẽ được kiểm tra. Sau đó, bộ tham số phù hợp sẽ được chọn lại bằng những phương pháp chống quá khớp như chia tập dữ liệu trong mẫu thành tập huấn luyện và tập hiệu chỉnh.
Ví dụ, một thuật toán hồi quy mà vào đầu ngày, dự đoán giá đóng cửa của VN30F1M thay đổi bao nhiêu phần trăm so với giá đóng cửa ngày hôm trước, dựa vào đó, mở một vị thế ở ATO và đóng vị thế ở ATC. Nếu dự đoán giá giảm 3%, thuật toán sẽ mở một vị thế bán vào ATO và đóng vị thế đó ở ATC. Nếu dự đoán đúng, thuật toán sẽ có lời. Thuật toán này có hai tham số cần được xác định:
-
N: là số ngày trước đó dùng để làm dữ liệu cho việc dự đoán.
-
Alpha (α): là ngưỡng xác định có nên mở vị thế ở ATO hay không. Nếu giá trị tuyệt đối của số dự đoán vượt qua ngưỡng này thì sẽ mở vị thế ở ATO.
Trong ví dụ này, có 25 giá trị khác nhau của N và 7 giá trị khác nhau của α cần được kiểm tra với giả định đã đủ bao phủ phần không gian tham số có khả năng cao chứa bộ tham số tối ưu. Do đó, có 25 x 7 = 175 bộ tham số khác nhau.Bảng 01, 02 liệt kê những giá trị và hiệu quả của những bộ tham số này trên khoảng dữ liệu trong mẫu. Dựa trên những kết quả dưới đây, có thể thấy N = 19 và α = 0.2% có thể là bộ tham số tối ưu cho thuật toán, với lợi nhuận đạt 127,62% và MDD vào khoảng -11,83%.
Tìm kiếm tham số ưu tiên. Khi có quá nhiều tổ hợp tham số cần đánh giá, tìm kiếm trên lưới sẽ không hiệu quả hoặc không thể thực hiện do tốn quá nhiều tài nguyên. Vì phương pháp tìm kiếm trên lưới sẽ hoạt động theo cách giữ một tham số cố định và thay đổi tất cả tham số còn lại. Tuy nhiên, để tiết kiệm thời gian, những tham số nào có ảnh hưởng lớn tới thuật toán nên được ưu tiên tìm kiếm trước bằng cách chỉ thay đổi giá trị của tham số đó trong khi giữ yên giá trị của các tham số còn lại.
Chúng ta có thể cố định α = 1.0%, và thay đổi các giá trị của N để tìm ra N nên là 15. Sau đó chúng ta cố định N = 15 và đánh giá độ hiệu quả của thuật toán với các giá trị khác nhau của α. Cuối cùng chúng ta tìm thấy được N = 15 và α = 0.3% với lợi nhuận là 103.95% và MDD là = -16.20%. Chúng ta tìm được bộ tham số này bằng cách thử 31 bộ tham số khác nhau, thay vì 175 bộ như với phương pháp tìm kiếm trên lưới.
Thuật toán tìm kiếm nâng cao. Trong các thuật toán tìm kiếm nâng cao, nên khám phá hướng nào tiếp theo trong không gian tham số để tìm ra được bộ tham số tối ưu sẽ được chỉ dẫn bởi giá trị của hàm mục tiêu. Bằng cách này, chỉ cần kiểm thử một phần rất nhỏ của không gian tham số là đã tìm được bộ tham số xấp xỉ tối ưu.
Một trong những cách này là tìm kiếm leo đồi (hill climbing search). Phương pháp này tìm kiếm dựa trên một hướng mà hướng đó tăng hiệu quả dần dần, và dừng khi không có những bộ tham số nào xung quanh cho hiệu quả cao hơn. Ví dụ tìm kiếm theo hướng [N = 21, α = 0.3%] → [N = 20, α = 0.3%] → [N = 19, α = 0.3%] → [N = 19, α = 0.2%].