Loại chương trình và giấy phép
Cùng một mã nguồn có thể được tích hợp vào các chương trình MQL thuộc các loại khác nhau. Ngoài tùy chọn bao gồm mã nguồn (chỉ thị tiền xử lý #include
) vào một sản phẩm chung tại giai đoạn biên dịch, cũng có thể lắp ráp các thư viện — các mô-đun chương trình nhị phân được kết nối với chương trình chính tại giai đoạn thực thi.
Tuy nhiên, một số hàm chỉ được phép sử dụng trong các loại chương trình nhất định. Ví dụ, hàm OrderCalcMargin
không thể được sử dụng trong chỉ báo. Mặc dù giới hạn này dường như không có lý do cơ bản, nhà phát triển của một thuật toán phổ quát để tính toán quỹ ký quỹ, có thể được tích hợp không chỉ vào Expert Advisors mà còn vào các chỉ báo, nên lưu ý đến sắc thái này và cung cấp một phương pháp tính toán thay thế cho các chỉ báo.
Danh sách đầy đủ các hạn chế đối với loại chương trình sẽ được trình bày trong một phần phù hợp của mỗi chương. Trong tất cả các trường hợp như vậy, việc biết loại chương trình "cha" là rất quan trọng.
Để xác định loại chương trình, có thuộc tính MQL_PROGRAM_TYPE
trong ENUM_MQL_INFO_INTEGER
. Các giá trị có thể của thuộc tính này được mô tả trong bảng liệt kê ENUM_PROGRAM_TYPE
.
Định danh | Giá trị | Mô tả |
---|---|---|
PROGRAM_SCRIPT | 1 | Script |
PROGRAM_EXPERT | 2 | Expert Advisor |
PROGRAM_INDICATOR | 4 | Indicator |
PROGRAM_SERVICE | 5 | Service |
Trong đoạn nhật ký ở phần trước, chúng ta thấy rằng thuộc tính PROGRAM_SCRIPT
được đặt thành 1 vì bài kiểm tra của chúng ta là một script. Để lấy mô tả dạng chuỗi, bạn có thể sử dụng hàm EnumToString
.
ENUM_PROGRAM_TYPE type = (ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE);
Print(EnumToString(type));
2
Một thuộc tính khác của chương trình MQL thuận tiện để phân tích nhằm bật/tắt một số tính năng là loại giấy phép. Như bạn đã biết, các chương trình MQL có thể được phân phối miễn phí hoặc trong MQL5 Market. Hơn nữa, chương trình trong cửa hàng có thể được mua hoặc tải xuống dưới dạng phiên bản dùng thử. Những yếu tố này dễ kiểm tra và nếu muốn, có thể điều chỉnh các thuật toán cho chúng. Để phục vụ mục đích này, có thuộc tính MQL_LICENSE_TYPE
trong ENUM_MQL_INFO_INTEGER
, sử dụng bảng liệt kê ENUM_LICENSE_TYPE
làm kiểu.
Định danh | Giá trị | Mô tả |
---|---|---|
LICENSE_FREE | 0 | Phiên bản miễn phí không giới hạn |
LICENSE_DEMO | 1 | Phiên bản dùng thử của sản phẩm trả phí từ Market, chỉ hoạt động trong bộ kiểm tra chiến lược |
LICENSE_FULL | 2 | Phiên bản được cấp phép đã mua, cho phép ít nhất 5 lần kích hoạt (có thể tăng bởi người bán) |
LICENSE_TIME | 3 | Phiên bản giới hạn thời gian (chưa được triển khai) |
Điều quan trọng cần lưu ý ở đây là giấy phép liên quan đến mô-đun nhị phân ex5 mà từ đó yêu cầu được thực hiện bằng MQLInfoInteger(MQL_LICENSE_TYPE)
. Trong một thư viện, hàm này sẽ trả về giấy phép của chính thư viện, không phải chương trình chính mà thư viện được liên kết.
Ví dụ để kiểm tra cả hai hàm trong phần này, một dịch vụ đơn giản EnvType.mq5
được bao gồm cùng với sách. Nó không chứa chu kỳ làm việc và do đó sẽ kết thúc ngay sau khi thực hiện hai lệnh trong OnStart
.
#property service
void OnStart()
{
Print(EnumToString((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE)));
Print(EnumToString((ENUM_LICENSE_TYPE)MQLInfoInteger(MQL_LICENSE_TYPE)));
}
2
3
4
5
6
7
Để đơn giản hóa việc khởi chạy, tức là để loại bỏ nhu cầu tạo một instance của dịch vụ và chạy nó qua menu ngữ cảnh của Navigator trong terminal, đề xuất sử dụng trình gỡ lỗi: chỉ cần mở mã nguồn trong MetaEditor và thực hiện lệnh Debugging -> Start on real data
(F5, hoặc nút trên thanh công cụ).
Chúng ta sẽ nhận được các mục nhật ký sau:
EnvType (debug) PROGRAM_SERVICE
EnvType (debug) LICENSE_FREE
2
Ở đây, bạn có thể thấy rõ ràng rằng loại chương trình là một dịch vụ, và thực tế không có giấy phép (sử dụng miễn phí).