Среда исполнения MQL-программ

Как мы знаем, исходные тексты MQL-программы после компиляции в бинарный исполняемый код в формате ex5 готовы к работе в терминале или на агентах тестирования. Таким образом, терминал или тестер предоставляют общую среду, внутри которой и "живут" MQL-программы.

Напомним, что встроенный тестер поддерживает только 2 типа MQL-программ: эксперты и индикаторы. Про типы MQL-программ и их особенности мы подробно поговорим в пятой Части книги. А в этой главе остановимся на тех функциях MQL5 API, которые являются общими для всех типов и позволяют анализировать среду исполнения, а также, до некоторой степени, управлять ею.

Большинство свойств среды доступно только на чтение через функции TerminalInfoInteger, TerminalInfoDouble, TerminalInfoString, MQLInfoInteger, MQLInfoString. Из названий можно понять, что каждая функция возвращает значения определенного типа. Такая организация приводит к тому, что прикладной смысл свойств, объединенных в одной функции, может быть самым разным. Иную группировку может обеспечить реализация собственной объектной прослойки на MQL5 (пример приведем чуть ниже, в разделе об использовании свойств для привязки к программному окружению).

Указанный набор функций имеет явное логическое разделение на общие свойства терминала (с префиксом "Terminal") и свойства отдельной MQL-программы (с префиксом "MQL"). Однако во многих случаях требуется совместно анализировать схожие характеристики и терминала, и программы. Например, разрешения на использование DLL или выполнение торговых операций выдаются как в целом для терминала, так и конкретной программе. Именно поэтому функции из данного набора имеет смысл рассматривать в комплексе, как единое целое.

На запись доступны лишь некоторые свойства среды, связанные с кодами ошибок, в частности сброс предыдущей ошибки (ResetLastError) и установка пользовательской ошибки (SetUserError).

Также в этой главы мы рассмотрим функции для программного закрытия терминала (TerminalClose, SetReturnError) и приостановки программы в отладчике (DebugBreak).