MetaTrader 5 build 2485: Улучшения в iCustom и общая оптимизация в MQL5

Что нового в MetaTrader 5?

5 июня 2020

Terminal

  1. Оптимизировано и значительно ускорено редактирование баровой истории у пользовательских финансовых инструментов, в том числе при помощи функции CustomRatesUpdate.
  2. Исправлены ошибки, возникавшие при экспорте настроек пользовательских инструментов в JSON-файл.
  3. Исправления по крешлогам.

MQL5

  1. Изменен алгоритм загрузки пользовательских индикаторов с помощью iCustom.

    Если перед именем пользовательского индикатора указан обратный слеш '\', то EX5-файл индикатора ищется относительно корневой папки MQL5. Таким образом при вызове iCustom(Symbol(), Period(), "\FirstIndicator"...) индикатор будет загружаться как MQL5\FirstIndicator.ex5. Если по этому пути файла не окажется, вернется ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если же путь не начинается с '\', то поиск и загрузка индикатора производятся в следующей последовательности:

    • Сначала EX5-файл индикатора ищется в той же папке, где находится EX5-файл вызывающей программы. Например, советник CrossMA.EX5 находится в папке MQL5\Experts\MyExperts и содержит вызов iCustom(Symbol(), Period(), "SecondIndicator"...) – тогда поиск индикатора производится по пути MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Если индикатор не найден в том же каталоге, то поиск производится относительно корневой директории индикаторов MQL5\Indicators. То есть ищется файл MQL5\Indicators\SecondIndicator.ex5. Если индикатор не найден по обоим путям, то функция вернет INVALID_HANDLE и будет взведена ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если путь к индикатору задан в поддиректории, например как MyIndicators\ThirdIndicator, то сначала поиск ведется в папке вызывающей программы (советник находится в папке MQL5\Experts\MyExperts) по пути MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5, а затем в случае неуспеха ищется файл MQL5\Indicators\MyIndicators\ThirdIndicator.ex5. При этом разделителем в пути нужно обязательно указывать двойной обратный слеш '\\', например, iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...).

    Также при обнаружении в коде программы вызова пользовательского индикатора через iCustom, компилятор будет неявно добавлять директиву "#property tester_indicator XXX", если таковая отсутствует.

  2. Оптимизирована и значительно ускорена работа функции HistorySelect, позволяющая запрашивать историю сделок и ордеров.
  3. Исправлена ошибка, возникавшая при запросе тиков через функцию CopyTicksRange. Из-за нее в качестве начала диапазона принималось начало указанного дня без учета указанного времени.
  4. Оптимизировано и значительно ускорено отображение предупреждений с помощью функции Alert.
  5. Добавлено новое свойство SYMBOL_TIME_MSC — время последнего тика символа в миллисекундах. Для получения свойства используется функция SymbolInfoInteger.