Kiểm tra và tối ưu hóa Expert Advisors
Việc phát triển Expert Advisors không chỉ đơn thuần là triển khai một chiến lược giao dịch trong MQL5 mà còn liên quan nhiều hơn đến việc kiểm tra hiệu suất tài chính của nó, tìm kiếm các cài đặt tối ưu và gỡ lỗi (tìm kiếm và sửa lỗi) trong nhiều tình huống khác nhau. Tất cả điều này có thể được thực hiện trong tester tích hợp của MetaTrader 5.
Tester hoạt động với nhiều loại tiền tệ khác nhau và hỗ trợ một số chế độ tạo tick: dựa trên giá mở của khung thời gian đã chọn, trên giá OHLC của khung thời gian M1, trên các tick được tạo nhân tạo và trên lịch sử tick thực tế. Bằng cách này, bạn có thể chọn tỷ lệ tối ưu giữa tốc độ và độ chính xác của mô phỏng giao dịch.
Cài đặt của tester cho phép bạn thiết lập khoảng thời gian kiểm tra trong quá khứ, kích thước tiền gửi và đòn bẩy; chúng được sử dụng để mô phỏng các requote và các đặc điểm cụ thể của tài khoản (bao gồm kích thước hoa hồng, ký quỹ, lịch trình phiên giao dịch, giới hạn số lượng lô). Tất cả chi tiết về cách làm việc với tester từ góc độ người dùng có thể được tìm thấy trong tài liệu terminal.
Trước đây, chúng ta đã thảo luận ngắn gọn về việc làm việc với tester, đặc biệt trong phần Kiểm tra chỉ báo. Hãy nhớ rằng các hàm điều khiển tester và tối ưu hóa của chúng không khả dụng cho các chỉ báo, không giống như đối với Expert Advisors. Tuy nhiên, cá nhân tôi muốn thấy một tùy chọn tự điều chỉnh thích nghi cho các chỉ báo: tất cả những gì cần thiết là hỗ trợ trình xử lý OnTester
trong chúng, mà chúng ta sẽ trình bày trong một phần riêng.
Như bạn đã biết, nhiều chế độ khác nhau có sẵn cho việc tối ưu hóa, chẳng hạn như liệt kê trực tiếp các tổ hợp tham số đầu vào của Expert Advisor, thuật toán di truyền tăng tốc, tính toán toán học hoặc chạy tuần tự qua các biểu tượng trong Market Watch
. Là tiêu chí tối ưu hóa, bạn có thể sử dụng các chỉ số nổi tiếng như lợi nhuận, tỷ lệ Sharpe, yếu tố phục hồi và kỳ vọng lợi nhuận, cũng như các biến "tùy chỉnh" được nhúng trong mã nguồn bởi nhà phát triển Expert Advisor. Trong bối cảnh cuốn sách này,假 định rằng người đọc đã quen thuộc với các nguyên tắc thiết lập, chạy và diễn giải kết quả tối ưu hóa vì trong chương này chúng ta sẽ bắt đầu nghiên cứu API điều khiển tester. Những ai quan tâm có thể làm mới kiến thức của mình với sự trợ giúp của phần liên quan trong tài liệu tối ưu hóa chiến lược.
Một chức năng đặc biệt quan trọng của tester là tối ưu hóa đa luồng, có thể được thực hiện bằng cách sử dụng các chương trình tác nhân cục bộ và phân tán (mạng), bao gồm cả những tác nhân trong MQL5 Cloud Network. Một lần chạy kiểm tra đơn lẻ (với các tham số đầu vào cụ thể) được khởi chạy thủ công bởi người dùng, hoặc một trong nhiều lần chạy được gọi trong quá trình tối ưu hóa (khi chúng ta thực hiện liệt kê các giá trị tham số trong các phạm vi đã cho) được thực hiện trong một chương trình riêng biệt — tác nhân. Về mặt kỹ thuật, đây là tệp metatester64.exe, và các bản sao của quá trình này có thể được thấy trong Windows Task Manager trong quá trình kiểm tra và tối ưu hóa. Chính nhờ điều này mà tester là đa luồng.
Terminal là một bộ điều phối phân phối nhiệm vụ cho các tác nhân cục bộ và từ xa. Nó khởi chạy các tác nhân cục bộ nếu cần thiết. Khi tối ưu hóa, theo mặc định, một số tác nhân được khởi chạy; số lượng của chúng tương ứng với số lõi của bộ xử lý. Sau khi thực hiện nhiệm vụ tiếp theo để kiểm tra một Expert Advisor với các tham số được chỉ định, tác nhân trả kết quả về terminal.
Mỗi tác nhân tạo ra môi trường giao dịch và phần mềm riêng của nó. Tất cả các tác nhân được cách ly với nhau và với terminal của khách hàng.
Cụ thể, tác nhân có các biến toàn cục riêng và hộp cát tệp riêng, bao gồm thư mục nơi nhật ký chi tiết của tác nhân được ghi: Tester/Agent-IPaddress-Port/Logs
. Ở đây Tester
là thư mục cài đặt tester (trong quá trình cài đặt tiêu chuẩn cùng với MetaTrader 5, đây là thư mục con nơi terminal được cài đặt). Tên của thư mục Agent-IPaddress-Port
, thay vì IPaddress
và Port
, sẽ chứa các giá trị địa chỉ mạng và cổng cụ thể được sử dụng để liên lạc với terminal. Đối với các tác nhân cục bộ, đây là địa chỉ 127.0.0.1 và phạm vi cổng, theo mặc định, bắt đầu từ 3000 (ví dụ, trên một máy tính có 4 lõi, chúng ta sẽ thấy các tác nhân trên các cổng 3000, 3001, 3002, 3003).
Khi kiểm tra một Expert Advisor, tất cả các hoạt động tệp được thực hiện trong thư mục Tester/Agent-IPaddress-Port/MQL5/Files
. Tuy nhiên, có thể triển khai sự tương tác giữa các tác nhân cục bộ và terminal của khách hàng (cũng như giữa các bản sao khác nhau của terminal trên cùng một máy tính) qua một thư mục chia sẻ. Để làm điều này, khi mở một tệp với hàm FileOpen
, cờ FILE_COMMON phải được chỉ định. Một cách khác để truyền dữ liệu từ các tác nhân đến terminal được cung cấp bởi cơ chế frames.
Hộp cát cục bộ của tác nhân được tự động xóa trước mỗi lần kiểm tra vì lý do bảo mật (để ngăn các Expert Advisors khác nhau đọc dữ liệu của nhau).
Một thư mục chứa lịch sử báo giá được tạo bên cạnh hộp cát tệp cho mỗi tác nhân: Tester/Agent-IPaddress-Port/bases/ServerName/Symbol/
. Trong phần tiếp theo, chúng ta sẽ nhắc lại ngắn gọn cách nó được hình thành.
Kết quả của các lần chạy kiểm tra riêng lẻ và tối ưu hóa được terminal lưu trữ trong một bộ nhớ cache đặc biệt, có thể được tìm thấy trong thư mục cài đặt, trong thư mục con Tester/cache/
. Kết quả kiểm tra được lưu trong các tệp có phần mở rộng tst
, và kết quả tối ưu hóa được lưu trong các tệp opt
. Cả hai định dạng này đều được MetaQuotes công khai mã nguồn, vì vậy bạn có thể triển khai xử lý dữ liệu phân tích hàng loạt của riêng mình hoặc sử dụng các mã nguồn sẵn có từ codebase trên trang web mql5.com.
Trong chương này, trước tiên, chúng ta sẽ xem xét các nguyên tắc cơ bản về cách các chương trình MQL hoạt động trong tester, và sau đó chúng ta sẽ học cách tương tác với nó trong thực tế.