Trong bài viết này
Sau khi đọc bài này…
- Kiểm NaN và biên số trước chuyển luật.
- Phân biệt kết nối thành công với đối chiếu lệnh.
- Tách tính hữu hạn với độ mới và timestamp nguồn.
Tra cứu thuật ngữ ngay trong bài
Backtesting (kiểm thử dữ liệu lịch sử) Khớp lệnh Giá trị danh nghĩa vị thế Phí hoa hồng giao dịch Tài khoản mô phỏng (demo) Spread — chênh lệch Ask và BidMQL5 và Python là những cách khác nhau để tự động hóa một quy trình đã định nghĩa. Chọn quyền truy cập tài khoản, dữ liệu và nơi vận hành trước. Ngôn ngữ, script ngắn hoặc kiến trúc lai không tự chứng minh có lãi, tin cậy hơn hay triển khai nhanh hơn cho mọi người.
So sánh cách vận hành trước cú pháp
EA MQL5 chạy qua terminal MT5. Python có thể dùng gói MetaTrader 5 chính thức, API broker riêng hoặc chỉ tệp lịch sử cho nghiên cứu. Gói chính thức giao tiếp với terminal, không nối trực tiếp mọi máy chủ broker. Phải khớp bản phân phối với hệ điều hành và interpreter. PyPI ở bản được xem 5.0.6231 liệt kê wheels Windows x86-64; Python chạy được ở hệ khác không có nghĩa gói này có cùng hỗ trợ ở đó.
initialize() có thể mở terminal khi cần. Chỉ định bản cài và kiểm tài khoản, server, demo/live; không dựa vào tài khoản đã dùng gần nhất. Kết nối thành công không xác nhận kết quả lệnh gửi trước. API khác cũng cần kiểm pháp nhân, sản phẩm, quyền, dữ liệu và mô hình lệnh riêng; lựa chọn kỹ thuật không cấp quyền cung cấp hay sử dụng sản phẩm tại Việt Nam.
| Kiến trúc | Cần theo dõi | Kiểm đầu tiên |
|---|---|---|
| EA MQL5 | Terminal, mã, tham số, kết nối | Phiên bản đang chạy và phản hồi |
| Python qua MT5 | Tiến trình Python, terminal, giao tiếp | Danh tính tài khoản sau kết nối |
| Python qua API riêng | Quyền, adapter, giới hạn, mô hình lệnh | Đơn vị, mã và quyền |
| Python nghiên cứu, MQL5 thực thi | Cùng quy tắc và phiên bản hai môi trường | Phát lại đầu vào ở biên |
Ít tiến trình có thể dễ giám sát hơn, không thay phương án khi bị từ chối, khớp một phần hoặc chưa rõ trạng thái. Giữ thông tin đăng nhập ngoài mã công khai và log thông thường; bài đọc tệp không cần quyền đặt lệnh.
MQL5 có tích hợp, vẫn có điều kiện
EA có sự kiện terminal, hàm giao dịch và Strategy Tester. Kiểm dữ liệu, phí và giả định khớp thay vì coi tester là toàn bộ hiện thực lịch sử broker. Cloud optimization có điều kiện riêng. Mô hình chuẩn bị ở nơi khác có thể chạy qua giao diện ONNX được hỗ trợ; học máy không bắt buộc Python phải chạy lúc thực thi. Kiểm shape, tiền xử lý, kiểu và quy ước đầu ra.
OnTick không bảo đảm callback riêng cho mọi tick nhận: khi NewTick đang chờ hoặc đang xử lý, sự kiện mới không được thêm vào hàng đợi. Đo tải và thời gian ở kiến trúc thật; tên ngôn ngữ không xác lập độ trễ 1 ms hoặc làm độ trễ khung H1 vô nghĩa.
Thư viện Python không bỏ được kiểm dữ liệu và adapter
Python có công cụ phân tích và mô hình. Cùng một interface vẫn cần xử lý mã, khối lượng, phiên, dữ liệu và luật lệnh từng nhà cung cấp. Dữ liệu vĩ mô, nhiều tài khoản hoặc thư viện là yêu cầu cần đánh giá, không bằng chứng một stack luôn thắng. Lưu phiên bản phụ thuộc và cấu hình.
Kho gốc ib_insync được chủ sở hữu lưu trữ chỉ đọc ngày 14/3/2024. Điều đó không tự chứng minh mã cũ không chạy, nhưng tutorial cũ không chứng nhận hỗ trợ hiện nay. Không có benchmark ở đây cho các lời khẳng định pandas nhanh hơn một bậc hoặc một thư viện quét gấp nhiều lần tester.
Hai kiểu lai cần giám sát khác nhau
Kiểu một: Python phát triển mô hình, logic kiểm chứng được triển khai trong EA; Python không cần còn chạy nếu thực thi đã chứa đủ logic. Kiểu hai: Python liên tục gửi yêu cầu qua terminal; phải theo dõi cả hai tiến trình, độ mới đầu vào và trạng thái tài khoản thực.
MetaTrader virtual hosting chuyển môi trường EA/chart được hỗ trợ, không là desktop Windows chung để chạy tùy ý Python ngoài. EA bổ sung không thể đóng vị thế qua chính terminal hoặc kết nối broker đã hỏng. Kiểm bảo vệ được máy chủ nhận riêng.
order_send() gửi yêu cầu và trả cấu trúc kết quả. Đóng vị thế cần đúng action và ngữ cảnh vị thế; không có hàm tổng quát position_close() được tài liệu này xác nhận. Sau liên lạc không rõ kết quả, đối chiếu orders, deals và positions trước quyết định gửi thêm.
Ví dụ độc lập: yêu cầu 0.10 lot đã khớp nhưng phản hồi mất. Gửi mù lần hai 0.10 lot và lần này cũng khớp tạo 0.20 lot dù ý định 0.10. Với hợp đồng EUR/USD tuyến tính 100.000 EUR/lot, pip 0.0001 và tài khoản USD, phơi nhiễm tăng từ 1 lên 2 USD/pip. Mô hình quy định cả hai đã khớp; không nói mọi yêu cầu không rõ đều khớp hoặc mọi broker gộp vị thế giống nhau.
Phủ định không sửa được NaN
Dùng đúng scalar Python x = float('nan'), ngưỡng giả định 10. NaN đại diện kết quả chỉ báo thiếu, không phải 0 hay số lớn; không giả định đã lọc đầu vào trước.
Cuộn ngang để xem hết sơ đồ.
x > 10 cho False, nhưng not(x <= 10) cho True. Với số hữu hạn hai biểu thức có vẻ tương đương, với NaN thì không. Biến thể ở đây dùng math.isfinite(x) and x > 10 để chặn NaN. Kiểm kiểu, sự có mặt và hữu hạn trước luật. Mảng NumPy hoặc Decimal có ngữ nghĩa riêng; không suy mọi ngôn ngữ xử lý giống nhau.
Đối chiếu biên và giá khớp được gán
Mô hình tín hiệu có sau nến đóng 1.1000. A mua tại đó; B mua ở Ask muộn 1.1003, chênh 3 pip với pip 0.0001. Thời gian, giá di chuyển và phía báo giá đều có thể góp phần; không gọi toàn bộ chênh là overhead Python hoặc spread. So tín hiệu, yêu cầu, khối lượng, fills và phí trước tổng lợi nhuận. Vectorized có thể tính phí; tên event-driven không chứng nhận mô hình fill.
MT5 tester không chạy mọi script Python như EA native. Khi chuyển quy tắc cần cùng dữ liệu/phiên bản. Trong scalar Python float, 0.1 + 0.2 là 0.30000000000000004, lớn hơn float 0.3. Decimal tạo từ chuỗi cho đúng 0.3 trong ví dụ; số nguyên theo đơn vị cho 1 + 2 = 3. Hiển thị cả hai thành 0.3 không sửa so sánh giá trị lưu.
Kiểm dưới, bằng, trên ngưỡng, thiếu và vô hạn. Các tolerance, kiểu số khác có luật riêng; phải định nghĩa trước theo đơn vị nghiệp vụ, không thêm epsilon tùy tiện cho khớp báo cáo. Những kiểm tra ở đây không chạy bản MQL5 hoặc chứng minh lợi thế.
Giá trị thêm: hữu hạn chưa có nghĩa còn mới
Một bài tập dữ liệu tự xây dựng dùng giá trị chỉ báo 11, ngưỡng 10, giới hạn tuổi 5 giây do người thiết kế đặt trước. Cả A và B hữu hạn và vượt ngưỡng. Tại 21:40:00, A có timestamp 21:39:00, tuổi 60 giây nên bị chặn; B timestamp 21:39:58, tuổi 2 giây nên qua kiểm độ mới. Không gọi B là lệnh được phép: còn cần mọi điều kiện rủi ro và vận hành.
Ghi rõ timestamp là thời điểm dữ liệu nguồn hay thời điểm nhận; không tráo hai loại để làm tuổi nhỏ hơn. Ví dụ giả định đồng hồ cùng tham chiếu và không lệch; timestamp tương lai cần xử lý riêng, không mặc định “âm nên đủ mới”. Ngưỡng 5 giây không khuyến nghị cho mọi chiến lược. Chặn NaN giải quyết kiểu/khả dụng, không giải quyết dữ liệu cũ.
Chọn theo yêu cầu có thể tái lập
Viết API/tài khoản, dữ liệu, lúc quyết định, thư viện, hệ điều hành và giám sát cần có. Chọn thứ có thể duy trì. Prototype nhỏ có thể đọc dữ liệu và ghi tín hiệu mà không giao dịch. Số dòng, thời gian cài cố định hoặc tỷ lệ học hai-trên-một không xác định lựa chọn đúng.
Nếu nhạy thời gian, đo theo bố trí dự kiến; khoảng cách giữa nến không làm delay tự hết quan trọng. Backtest Python cần kiểm đầu vào và mô hình thực thi như mọi môi trường khác.
NaN qua phép phủ định
Dữ liệu thiếu không được biến thành tín hiệu hợp lệ.
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.
- not(x <= 10)
- True – So sánh là False rồi bị phủ định.
- isfinite(x) and x > 10
- False – Chặn dữ liệu thiếu trước luật.
Bước tiếp: kiểm một kiến trúc cùng tình huống lỗi
- Khóa quy tắc nhỏ: dữ liệu có lúc nào, đơn vị, so bằng và đầu ra mong đợi.
- Tách cấu hình demo, đọc dữ liệu và quyền lệnh; đọc lại tài khoản và mã sản phẩm dự kiến.
- Trong môi trường demo có kiểm soát, kiểm từ chối, đầu vào thiếu, restart và phản hồi không rõ; nối lại không chứng minh lệnh trước thất bại.
- Đối chiếu tín hiệu riêng và giả định khớp trước tổng kết quả. Script chạy xong không chứng minh lợi nhuận hoặc độ tin cậy native.
Kiểm tra mức độ hiểu bài
Bài tập: khoảng 2 phút.
Xem đáp án và giải thích
Cần kiểm khả dụng và isfinite riêng. True không xác nhận giá trị chỉ báo.
Câu hỏi khác
Gói Python MT5 có nối trực tiếp mọi broker?
Kết nối lại xong thì gửi lại lệnh cũ?
NaN có làm hai điều kiện phủ định tương đương?
Cổng isfinite đủ chứng minh dữ liệu tốt?
MQL5 hoặc Python chắc nhanh hơn?
Nguồn và kiểm chứng
- MetaQuotes — initialize
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- MetaQuotes — order_send
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- MetaQuotes — OnTick
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- MetaTrader5 package — PyPI distributions
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- Python — value comparisons
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- Python — math.isfinite
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- ib_insync original repository
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- MetaQuotes — running ONNX model
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung bài.
- MetaQuotes — virtual hosting migration
Nguồn tham khảo; phạm vi và giả định được nêu trong nội dung 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.
