Trong bài viết này
Sau khi đọc bài này…
- Tách hành vi đối tượng MT5 được tài liệu mô tả khỏi null trong mô hình trang.
- Ghi chế độ và bước phân kỳ mà không gửi lệnh.
- Phát hiện giá còn lưu từ quan sát cũ đang che một lần đọc thiếu.
Tra cứu thuật ngữ ngay trong bài
Expert Advisor — EA Backtesting (kiểm thử dữ liệu lịch sử)EA chỉ hoạt động trong tester trực quan cần kiểm tra xem quyết định phụ thuộc dữ liệu hay thứ được vẽ trên biểu đồ. Đối tượng đồ họa không nên thay tín hiệu tường minh. Trước khi đổi chiến lược, so chế độ, phiên bản, dữ liệu và chỗ đầu tiên nhật ký khác nhau. Mô hình dưới không chạy MT5: nó tách một số khỏi đầu vào chưa có, không đổi thiếu dữ liệu thành 0 và không đặt lệnh.
Chế độ trực quan khác ở đâu?
Tài liệu tester MQL5 nêu rằng ngoài thử nghiệm trực quan, đối tượng đồ họa không được vẽ và truy vấn thuộc tính đối tượng đã tạo nhận giá trị 0. Ngoại lệ này không áp cho chế độ trực quan. Đây là hành vi trong tài liệu nền tảng, không thí nghiệm chúng tôi vừa chạy trên EA của bạn; chưa chứng minh mọi chênh lệch test đều có nguyên nhân đó.
Nếu EA đọc giá đường kẻ hoặc trạng thái nút, ghi nhận riêng bước ấy với dữ liệu giá/chỉ báo. Xác định giá trị có sẵn trong chế độ hiện tại trước khi tính. Trạng thái “chưa đọc được” có thể dừng chẩn đoán trước phép so, tránh nhận số 0 kỹ thuật làm giá hợp lệ. Có biểu đồ hiện ra không xác nhận mọi đầu vào đã sẵn sàng.
Tách tín hiệu số khỏi đối tượng biểu đồ thế nào?
Thiếu đầu vào khác giá bằng 0
Cuộn ngang để xem hết sơ đồ.
| Đường dữ liệu | Đầu vào | Đánh giá mô hình |
|---|---|---|
| Số tường minh | 1.1050 | 1.1050 > 1.1040: true. |
| Đối tượng không khả dụng | null: chưa có giá trị | Không đánh giá điều kiện. |
| Thay thế sai | 0 thay cho thiếu giá trị | 0 > 1.1040: trông như kết quả false thông thường. |
Hàng cuối là phiên bản lỗi để đối chiếu, không đường bảo vệ. Số 0 trả lời câu hỏi về số; null mô hình nói thiếu đầu vào. Nếu đảo điều kiện thành “nhỏ hơn ngưỡng”, số 0 thay thế thậm chí trông như đạt tiêu chí. Không sửa chương trình bằng một giá trị mặc định tùy tiện hoặc tự lấy giá trên biểu đồ cũ.
Phân biệt dữ liệu với đối tượng trên biểu đồ
Ví dụ học tập chạy trong trình duyệt. Không kết nối tài khoản hoặc API, không gửi đầu vào hay lưu bền vững. Không nhập mật khẩu hoặc dữ liệu cá nhân.
Công cụ đổi được hai số dương hữu hạn: 10⁻⁸ đến 10⁸, tối đa 15 chữ số theo hướng dẫn ô nhập. Giữ dấu chấm trong ô số/ký hiệu mã dù văn bản tiếng Việt có thể dùng dấu phẩy. Chế độ không trực quan giữ đường đối tượng ở null; chế độ trực quan của mô hình cho nó mang số tín hiệu. Trang không đọc biểu đồ, kết nối tài khoản/API, chạy MT5 hay tạo tín hiệu đầu tư. Bài phân biệt false với “không thể đánh giá”, không xác định nguyên nhân EA thực.
Ghi chế độ chương trình mà không giao dịch
Các cờ MQL_TESTER, MQL_VISUAL_MODE, MQL_OPTIMIZATION mô tả môi trường chạy; TERMINAL_BUILD là số build terminal. Ghi giá trị thực thay vì đoán qua vẻ ngoài cửa sổ. Các cờ bằng nhau cũng chưa chứng minh dữ liệu/tham số giống nhau.
Đoạn EA chẩn đoán độc lập sau chỉ ghi cấu hình trong OnInit và để OnTick trống; không gửi, sửa lệnh hoặc quản lý vị thế. Lưu thành tệp MQ5 riêng, tự biên dịch trong MetaEditor và giữ kết quả/log thật của terminal. OnInit mô tả chữ ký khởi tạo, PrintFormat mô tả đầu ra định dạng. Chúng tôi chưa biên dịch hoặc chạy đoạn này trong MT5 tại đây.
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
Không thêm OnInit thứ hai vào EA hiện có hoặc thay khởi tạo của nó bằng đoạn này. Muốn thêm log phải giữ luồng hiện tại. Tài liệu tester nêu ngoại lệ OnInit đối với hạn chế PrintFormat khi tối ưu hóa; vắng log ở giai đoạn khác không chứng minh giai đoạn ấy chưa chạy. Kiểm tra môi trường và cách ghi log trước khi suy luận.
Tìm khác biệt đầu tiên thay vì chỉ so lợi nhuận
Lập cặp hồ sơ: trực quan/không trực quan, build terminal và phiên bản mã, inputs, symbol/timeframe, mô hình tạo tick, ngày bắt đầu yêu cầu/thực tế, ảnh chụp dữ liệu đầu vào, phí và trạng thái đầu. Giữ tệp cấu hình cùng mã định danh phiên bản. Nếu khác các khai báo này, chưa quy hết chênh lệch cho cửa sổ biểu đồ. Công cụ so hai hồ sơ backtest giúp sắp xếp kiểm tra.
Tìm bước sớm nhất khác: đọc thành công, thời điểm dữ liệu, độ sẵn sàng chỉ báo, tín hiệu, điều kiện rồi quyết định. Ghi “lãi 120 thay vì 80” không định vị được bước. Giữ log gốc và lập bảng nhỏ bên cạnh; đừng bịa lại giá trị chương trình trước đó không ghi.
Mỗi quan sát cần mã, đầu vào được yêu cầu, thời điểm hoặc vị trí trong chuỗi, trạng thái chấp nhận và giá trị nếu có. Ghi mọi thứ không có định danh ổn định có thể che chỗ phân kỳ. Hai mức giá trông giống nhau không chứng minh chúng thuộc cùng nến/bước. Thiết kế bản ghi giúp đối chiếu, không bảo đảm tự tìm mọi phụ thuộc.
Tách “giá đúng” khỏi “giá của đúng quan sát”
Ví dụ bổ sung ba quan sát hư cấu, ngưỡng 1.1040 và điều kiện >. 101 đọc được 1.1050: true. 102 không đọc được: unknown. 103 đọc được 1.1040: false vì bằng ngưỡng không phải lớn hơn. Nếu giữ âm thầm giá 1.1050 của 101 để lấp 102, phép so ở 102 lại true nhưng không có tín hiệu mới nào được xác nhận. Giá còn lưu trong bộ nhớ không tự là đầu vào hợp lệ cho quan sát hiện tại.
| Mã | Giá trị/trạng thái hiện tại | Đường có kiểm tra | Lỗi giữ giá cũ |
|---|---|---|---|
| 101 | 1.1050 / có | true | true |
| 102 | null / thiếu | unknown | true từ giá của 101 |
| 103 | 1.1040 / có | false | false nếu cập nhật đúng |
Trong ví dụ này, thêm cặp observation_id và available giúp phát hiện lỗi che dữ liệu thiếu; đó là tên trường do bài đề xuất, không API mới của MQL5. Từng chiến lược phải định nghĩa độ mới hợp lệ riêng; không tự cho một số giây chờ phổ quát. Đổi múi giờ hiển thị sang Việt Nam UTC+7 không biến hai timestamp khác nhau thành cùng quan sát; giữ cả offset/múi giờ gốc khi đối chiếu.
Thiết kế lại tín hiệu cần thay gì?
Khối tính nên trả giá trị và trạng thái khả dụng rõ ràng; lớp đồ họa chỉ hiển thị giá trị đó. Tắt vẽ khi ấy không cố ý đổi nguồn đầu vào. Thử các giá trị kiểm soát: lớn hơn, nhỏ hơn, bằng ngưỡng và thiếu dữ liệu. Kiểm tra thêm giá cũ khác mã quan sát. Đây là đề xuất thiết kế, không bảo đảm hai tester toàn chương trình giống nhau: phiên bản, dữ liệu, phí và phụ thuộc khác vẫn cần đối chiếu.
Không có mã nguồn, gửi tác giả EA cặp hồ sơ và khác biệt đầu tiên đã ghi. Không thay chẩn đoán bằng loạt lệnh thử trên tài khoản thật. Hướng dẫn backtest MT4/MT5 đi tiếp vào chuẩn bị thử nghiệm; mô hình không chứng minh lợi nhuận hay quyền dùng dịch vụ tài chính nào tại Việt Nam.
Dữ liệu thiếu khác dữ liệu cũ còn trong bộ nhớ
Lưu giá trị, khả dụng và mã quan sát. Số cũ vẫn hợp lệ về kiểu nhưng có thể không hợp lệ cho bước hiện tại.
Trên màn hình nhỏ, bạn có thể cuộn ngang hoặc phóng to sơ đồ. Các giá trị và kết luận cũng có ở phần văn bản bên dưới.
- 101: 1.1050, sẵn sàng
- true – Đọc hiện tại lớn hơn ngưỡng.
- 102: thiếu đầu vào
- unknown – Không lấy lại 1.1050 của 101 rồi báo true.
- 103: 1.1040, sẵn sàng
- false – Bằng ngưỡng không thỏa điều kiện lớn hơn.
Ba việc có thể làm tiếp
- Hoàn thành hồ sơ hai chế độ: phiên bản mã/build, inputs, dữ liệu, phạm vi. Đánh dấu chưa xác nhận; cùng tệp EA không chứng minh tất cả cấu hình và dữ liệu giống nhau.
- Tách thiếu giá trị với 0: chạy mô hình 1.1050 so 1.1040 rồi đặt bằng nhau. Đối tượng chưa có vẫn null, bất kể kết quả đường số. Không cần tài khoản giao dịch.
- Ghi giai đoạn phân kỳ: ở cấu hình demo tách biệt hoặc tester, lấy bản ghi chẩn đoán không đặt lệnh và so chuỗi. Xác định giá trị, trạng thái hay điều kiện đổi; mô tả lỗi không là khuyến nghị đầu tư hoặc chứng nhận chương trình an toàn.
Kiểm tra mức độ hiểu bài
Bài tập: khoảng 3 phút.
Xem đáp án và giải thích
Đúng. Đó là quy ước tường minh của mô hình, không khẳng định hàm đối tượng MT5 trả null.
Câu hỏi khác
Null ở đây có nghĩa hàm đối tượng MT5 trả null không?
True trong mô phỏng có nghĩa EA sẽ mở lệnh?
Bỏ đối tượng đồ họa có bảo đảm hai test trùng nhau?
Logger là chiến lược giao dịch dùng ngay?
Giữ giá cũ có khác thay 0?
Nguồn và kiểm chứng
- www.mql5.com
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
- www.mql5.com
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
- www.mql5.com
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
- www.mql5.com
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
- www.mql5.com
Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.
Các phép tính dùng giả định được nêu rõ. Chúng không thay thế dữ liệu thị trường hiện tại hoặc điều khoản của nhà cung cấp.
