Переключение символа и таймфрейма

Иногда MQL-программе требуется переключить текущий символ или таймфрейм графика. В частности, это является привычным функционалом для многих мультивалютных, мультитаймфреймных торговых панелей или утилит анализа торговой истории. Для этой цели в MQL5 API имеется функция ChartSetSymbolPeriod.

С её помощью также удобно инициировать пересчет всего графика, включая расположенные на нем индикаторы, — достаточно в качестве параметров указать текущие символ и таймфрейм. Данный прием может пригодиться для индикаторов, которые не смогли полностью рассчитаться при первом вызове OnCalculate и ожидают подгрузки сторонних данных ("чужих" символов, тиков или других индикаторов). Также смена символа/таймфрейма влечет за собой переинициализацию эксперта, прикрепленного к графику. Скрипт (если он выполняется периодически в цикле) при данной процедуре и вовсе пропадет с графика (будет выгружен на старом сочетании символ/таймфрейм, но не загрузится автоматически на новом сочетании).

bool ChartSetSymbolPeriod(long chartId, string symbol, ENUM_TIMEFRAMES timeframe)

Функция меняет символ и таймфрейм указанного графика с идентификатором chartId, на значения соответствующих параметров: symbol и timeframe. 0 в параметре chartId означает текущий график, NULL в параметре symbol — текущий символ, а 0 в параметре timeframe — текущий таймфрейм.

Изменения вступают в силу асинхронно, то есть функция только посылает терминалу команду и не ждет ее выполнения. Команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

Функция возвращает true в случае удачного помещения команды в очередь графика или false в случае проблем. Информацию об ошибке можно получить в _LastError.

Мы видели примеры использования функции для обновления нескольких индикаторов, в частности: