- Получение списков доступных символов и Обзора рынка
- Редактирование списка Обзора рынка
- Проверка символа на существование
- Проверка актуальности данных по символу
- Получение последнего тика по символу
- Расписания торговых и котировочных сессий
- Маржинальные коэффициенты по символу
- Обзор функций получения свойств символа
- Проверка состояния символа
- Тип цены для построения графиков по символу
- Базовая, котировочная и маржинальная валюты инструмента
- Точность представления и шаг изменения цен
- Разрешенные объемы торговых операций
- Разрешения на торговлю
- Торговые условия и режимы исполнения приказов по символу
- Маржинальные требования
- Правила истечения сроков отложенных ордеров
- Спреды и отступы приказов от текущей цены
- Получение величины свопов
- Текущая рыночная информация (тик)
- Описательные свойства символов
- Глубина стакана цен
- Свойства пользовательских символов
- Специфические свойства (биржа, срочный рынок, облигации)
Проверка актуальности данных по символу
В силу распределенности клиент-серверной архитектуры, клиентские и серверные данные могут время от времени отличаться. Например, это может происходить сразу после начала сеанса работы терминала, при потере подключения или при большой нагрузке на ресурсы компьютера. Также символ, скорее всего, останется некоторое время несинхронизированным сразу после его добавления в Обзор рынка. MQL5 API позволяет проверить актуальность котировочных данных по конкретному символу с помощью функции SymbolIsSynchronized.
bool SymbolIsSynchronized(const string name)
Функция возвращает true, если локальные данные по символу с именем name синхронизированы с данными на торговом сервере.
В разделе Получение характеристик массивов котировок было представлено, среди прочих свойств таймсерий, свойство SERIES_SYNCHRONIZED, которое возвращает более узкий по своему смыслу признак синхронизированности: он распространяется на конкретное сочетание символа и таймфрейма. В отличие от этого свойства, функция SymbolIsSynchronized возвращает признак синхронизированности общей истории символа.
Построение всех таймфреймов запускается только после завершения скачивания истории. Из-за многопоточной архитектуры и параллельных вычислений в терминале может сложиться ситуация, когда SymbolIsSynchronized вернет true, а для какого-либо таймфрейма на том же символе свойство SERIES_SYNCHRONIZED будет временно равно false.
Посмотрим, как новая функция работает в индикаторе SymbolListSync.mq5. Он предназначен для периодической проверки всех символов из Обзора рынка на синхронизированность. Период проверки задается пользователем в параметре SyncCheckupPeriod в секундах. Он обуславливает запуск таймера в OnInit.
#property indicator_chart_window
|
В обработчике OnTimer в цикле вызываем SymbolIsSynchronized и собираем в общую строку все несинхронизированные символы, после чего они выводятся в комментарии и в журнале.
void OnTimer()
|
Например, если добавить в Обзор рынка отсутствовавший ранее символ (Brent), получим запись такого вида:
Unsynced symbols:
|
При нормальных условиях большую часть времени (пока запущен индикатор) в журнале не должно быть подобных сообщений. Однако во время проблем со связью может генерироваться поток предупреждений.