Общеупотребительные MQL5 API

В предыдущих частях книги мы изучили основные понятия, синтаксис и правила использования языковых конструкций MQL5. Но это лишь фундамент для написания реальных программ, отвечающих требованиям трейдера, таким как аналитическая обработка данных и автоматическая торговля. Решение подобных задач было бы невозможно без широкого набора встроенных функций и средств взаимодействия с терминалом MetaTrader 5, составляющих MQL5 API.

В этой части мы приступим к освоению MQL5 API и продолжим это делать до конца книги, постепенно знакомясь со всеми специализированными подсистемами.

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

Ранее мы научились описывать в MQL5 свои собственные функции и вызывать их. Встроенные функции MQL5 API доступны из исходного кода, как говорится, "сразу из коробки", то есть без всякого предварительного описания.

Важно отметить, что в отличие от C++, не требуется никаких дополнительных директив препроцессора, чтобы подключить к программе специфический набор встроенных функций. Имена всех функций MQL5 API присутствуют в глобальном контексте (пространстве имен), всегда и безусловно.

С одной стороны, это удобно, но с другой — требует помнить о возможном конфликте имен. Если вы случайно попробуете использовать одно из имен встроенных функций, оно перекроет стандартную реализацию, что может привести к неожиданным последствиям: в лучшем случае Вы получите ошибку компилятора о неоднозначной перегрузке, а в худшем — все привычные вызовы будут переадресованы "новой" реализации, без всяких предупреждений.

В принципе, аналогичные имена можно использовать и в других контекстах, например, в качестве имени метода класса или в выделенном (пользовательском) пространстве имен. В таких случаях, вызвать глобальную функцию можно с помощью оператора разрешения контекста: мы рассматривали эту ситуацию в разделе Вложенные типы, пространства имен и оператор контекста '::'.