Dừng thử nghiệm bắt buộc: TesterStop
Nếu cần thiết, tùy thuộc vào các điều kiện quan sát được, nhà phát triển có thể dừng việc thử nghiệm Expert Advisor sớm hơn. Ví dụ, điều này có thể được thực hiện khi đạt đến một số lượng giao dịch thua lỗ nhất định hoặc mức sụt giảm vốn. Để phục vụ mục đích này, API cung cấp hàm TesterStop
.
void TesterStop()
Hàm này đưa ra lệnh để chấm dứt tester, tức là việc dừng sẽ chỉ xảy ra sau khi chương trình trả lại quyền điều khiển cho môi trường thực thi.
Việc gọi TesterStop
được coi là một kết thúc bình thường của quá trình thử nghiệm, và do đó sẽ gọi hàm OnTester và trả về tất cả các thống kê giao dịch đã tích lũy cùng giá trị của tiêu chí tối ưu hóa cho strategy tester.
Ngoài ra còn có một cách thông thường khác để gián đoạn thử nghiệm: sử dụng hàm ExpertRemove đã được xem xét trước đó. Việc gọi ExpertRemove
cũng trả về các thống kê giao dịch đã thu thập được tính đến thời điểm hàm được gọi. Tuy nhiên, có một số khác biệt.
Kết quả của việc gọi ExpertRemove
, Expert Advisor sẽ bị xóa khỏi bộ nhớ của agent. Do đó, nếu bạn cần chạy một lượt mới với một tập hợp tham số mới, sẽ mất một chút thời gian để tải lại chương trình MQL. Khi sử dụng TesterStop
, điều này không xảy ra, và phương pháp này được ưu tiên hơn về mặt hiệu suất.
Mặt khác, việc gọi ExpertRemove
thiết lập cờ dừng _IsStopped trong chương trình MQL, cờ này có thể được sử dụng theo cách tiêu chuẩn ở các phần khác nhau của chương trình để hoàn thiện ("dọn dẹp" tài nguyên). Nhưng việc gọi TesterStop
không thiết lập cờ này, và do đó nhà phát triển có thể cần引入 một biến toàn cục của riêng mình để chỉ ra việc chấm dứt sớm và xử lý nó theo cách cụ thể.
Điều quan trọng cần lưu ý rằng
TesterStop
được thiết kế để chỉ dừng một lượt chạy của tester.MQL5 không cung cấp các hàm để chấm dứt sớm quá trình tối ưu hóa. Do đó, ví dụ, nếu Expert Advisor của bạn phát hiện rằng quá trình tối ưu hóa đã được khởi động trên mô hình tạo tick sai, và điều này chỉ có thể được phát hiện sau khi tối ưu hóa đã bắt đầu (
OnTesterInit
không giúp được gì ở đây), thì các lệnh gọiTesterStop
hoặcExpertRemove
sẽ gián đoạn các lượt chạy mới, nhưng bản thân các lượt chạy sẽ tiếp tục được khởi tạo, tạo ra hàng loạt kết quả rỗng. Chúng ta sẽ thấy điều này trong phần Ví dụ Expert Advisor lớn, nơi sẽ sử dụng biện pháp bảo vệ khỏi việc khởi động tại giá mở.Có thể giả định rằng lệnh gọi
ExpertRemove
trong phiên bản Expert Advisor đang chạy trong terminal và thực sự phục vụ một quản lý tối ưu hóa sẽ dừng quá trình tối ưu hóa. Nhưng điều này không đúng. Ngay cả việc đóng biểu đồ với Expert Advisor này hoạt động ở chế độ khung cũng không dừng được quá trình tối ưu hóa.
Bạn nên tự mình thử các hàm này trong thực tế.