Cài đặt Python và gói MetaTrader5
Để nghiên cứu tài liệu trong chương này, Python phải được cài đặt trên máy tính của bạn. Nếu bạn chưa cài đặt, hãy tải phiên bản mới nhất của Python (ví dụ: 3.10 tại thời điểm viết bài) từ https://www.python.org/downloads/windows.
Khi cài đặt Python, nên chọn cờ "Add Python to PATH" để bạn có thể chạy các tập lệnh Python từ dòng lệnh trong bất kỳ thư mục nào.
Sau khi Python được tải xuống và chạy, cài đặt mô-đun MetaTrader5 từ dòng lệnh (ở đây pip
là chương trình quản lý gói chuẩn của Python):
pip install MetaTrader5
Sau đó, bạn có thể kiểm tra cập nhật gói bằng dòng lệnh sau:
pip install --upgrade MetaTrader5
Cú pháp để thêm các gói thường dùng khác cũng tương tự. Đặc biệt, nhiều tập lệnh yêu cầu các gói phân tích và trực quan hóa dữ liệu: pandas
và matplotlib
, tương ứng.
pip install matplotlib
pip install pandas
2
Bạn có thể tạo một tập lệnh Python mới trực tiếp từ Trình hướng dẫn MQL5 trong MetaEditor. Ngoài tên tập lệnh, người dùng có thể chọn các tùy chọn để nhập nhiều gói, chẳng hạn như TensorFlow
, NumPy
, hoặc Datetime
.
Theo mặc định, các tập lệnh được đề xuất đặt trong thư mục MQL5/Scripts
. Các tập lệnh Python mới tạo và hiện có được hiển thị trong Navigator của MetaTrader 5, được đánh dấu bằng một biểu tượng đặc biệt, và có thể được khởi chạy từ Navigator theo cách thông thường. Các tập lệnh Python có thể được thực thi trên biểu đồ song song với các tập lệnh MQL5 khác và Expert Advisors. Để dừng một tập lệnh nếu quá trình thực thi của nó bị lặp, chỉ cần xóa nó khỏi biểu đồ.
Chạy tập lệnh Python trong terminal
Tập lệnh Python được khởi chạy từ terminal nhận tên ký hiệu và khung thời gian của biểu đồ thông qua các tham số dòng lệnh. Ví dụ, chúng ta có thể chạy tập lệnh sau trên biểu đồ EURUSD, H1, trong đó các đối số có sẵn dưới dạng mảng sys.argv
:
import sys
print('The command line arguments are:')
for i in sys.argv:
print(i)
2
3
4
5
Nó sẽ xuất ra nhật ký chuyên gia:
The command line arguments are:
C:\Program Files\MetaTrader 5\MQL5\Scripts\MQL5Book\Python\python-args.py
EURUSD
60
2
3
4
Ngoài ra, một tập lệnh Python có thể được chạy trực tiếp từ MetaEditor bằng cách chỉ định vị trí cài đặt Python trong hộp thoại Settings
của trình chỉnh sửa, tab Compilers
— sau đó lệnh biên dịch cho các tệp có phần mở rộng *.py
sẽ trở thành lệnh chạy.
Cuối cùng, các tập lệnh Python cũng có thể được chạy trong môi trường nguyên bản của chúng bằng cách truyền chúng dưới dạng tham số trong các lệnh gọi python.exe
từ dòng lệnh hoặc từ một IDE (Môi trường Phát triển Tích hợp) khác thích nghi cho Python, chẳng hạn như Jupyter Notebook.
Nếu giao dịch thuật toán được bật trong terminal, thì giao dịch từ Python cũng được bật theo mặc định. Để bảo vệ tài khoản hơn nữa khi sử dụng các thư viện Python bên thứ ba, cài đặt nền tảng cung cấp tùy chọn "Tắt giao dịch tự động qua API Python bên ngoài". Do đó, các tập lệnh Python có thể chặn giao dịch một cách chọn lọc, để lại quyền giao dịch cho các chương trình MQL. Khi tùy chọn này được bật, các lệnh gọi hàm giao dịch trong tập lệnh Python sẽ trả về lỗi 10027 (TRADE_RETCODE_CLIENT_DISABLES_AT) cho biết giao dịch thuật toán bị tắt bởi terminal khách hàng.
MQL5 vs Python
Python là một ngôn ngữ thông dịch, không giống như MQL5 được biên dịch. Đối với chúng ta với tư cách là nhà phát triển, điều này giúp cuộc sống dễ dàng hơn vì chúng ta không cần giai đoạn biên dịch riêng để có được một chương trình hoạt động. Tuy nhiên, tốc độ thực thi của các tập lệnh trong Python chậm hơn đáng kể so với những tập lệnh được biên dịch trong MQL5.
Python là một ngôn ngữ kiểu động: kiểu của một biến được xác định bởi giá trị chúng ta đặt vào nó. Một mặt, điều này mang lại sự linh hoạt, nhưng nó cũng đòi hỏi sự thận trọng để tránh các lỗi không lường trước. MQL5 sử dụng kiểu tĩnh, nghĩa là khi mô tả biến, chúng ta phải chỉ định rõ ràng kiểu của chúng, và trình biên dịch theo dõi tính tương thích kiểu.
Python tự động "dọn rác", tức là giải phóng bộ nhớ được cấp phát bởi chương trình ứng dụng cho các đối tượng. Trong MQL5, chúng ta phải theo dõi việc gọi kịp thời
delete
cho các đối tượng động.Trong cú pháp Python, thụt lề mã nguồn đóng vai trò quan trọng. Nếu bạn cần viết một câu lệnh phức hợp (ví dụ, vòng lặp hoặc điều kiện) với một khối gồm nhiều câu lệnh lồng nhau, thì Python sử dụng khoảng trắng hoặc tab cho mục đích này (chúng phải có kích thước bằng nhau trong khối). Không được phép trộn lẫn tab và khoảng trắng. Thụt lề sai sẽ dẫn đến lỗi. Trong MQL5, chúng ta tạo các khối của câu lệnh phức hợp bằng cách bao quanh chúng trong dấu ngoặc nhọn { ... }, nhưng định dạng không đóng vai trò gì, và bạn có thể áp dụng bất kỳ phong cách nào bạn thích mà không làm ảnh hưởng đến hiệu suất của chương trình.
Các hàm Python hỗ trợ hai loại tham số: đặt tên và vị trí. Loại thứ hai tương ứng với những gì chúng ta quen thuộc trong MQL5: giá trị cho mỗi tham số phải được truyền nghiêm ngặt theo thứ tự trong danh sách đối số (theo nguyên mẫu hàm). Ngược lại, các tham số đặt tên được truyền dưới dạng kết hợp của tên và giá trị (với '=' giữa chúng), và do đó chúng có thể được chỉ định theo bất kỳ thứ tự nào, ví dụ,
func(param2 = value2, param1 = value1)
.