Заменяем последовательный опрос терминалов из Python сервисом MQL5, который записывает состояние каждого терминала и торгового счёта в общую базу SQLite. Разбираем схему базы, чтение данных веб-приложением и развёртывание сервиса на нескольких терминалах. Такой подход позволяет получать данные параллельно и сохранять существующий интерфейс почти без изменений.
В предыдущей части мы добавили к веб-интерфейсу управления терминалами MetaTrader 5 конфигурацию и показатели торговых счетов. Чтобы получить баланс, прибыль, средства и маржу, веб-сервер последовательно подключался к каждому терминалу через модуль MetaTrader5 для Python, вызывал terminal_info() и account_info(), а затем отключался.
В пределах одного такого подключения модуль работает с выбранным терминалом, поэтому для следующего экземпляра приходится повторять initialize() и shutdown(). Время полного обхода складывается из времени всех обращений. Для уже подготовленных терминалов это могут быть миллисекунды, но неудачная инициализация задерживает переход к следующему экземпляру. При массовом запуске менеджеру приходится ждать, хотя сведения от остальных терминалов уже могли бы быть доступны.
Изменим направление передачи данных: в каждом терминале будет работать MQL5-сервис, который раз в две-три секунды записывает состояние в общую базу SQLite. Веб-приложение станет читать готовые записи, а наличие процесса по-прежнему проверять через psutil: программа внутри терминала не может сообщить "я остановлена", если завершилась вместе с ним. Получится схема сервис → SQLite → Python → интерфейс.
Так мы уберём прямой опрос терминалов и зависимость чтения данных от Python-модуля MetaTrader5. Сбор сведений будет выполняться независимо в каждом экземпляре, хотя запись в общий файл всё ещё потребует согласования. В этой части ограничимся последним состоянием; историю показателей и подробности открытых позиций оставим для продолжения. После реализации сравним оба способа чтения на одном, двух и четырёх терминалах.
Опубликована статья Разрабатываем менеджер терминалов (Часть 4): Используем сервис для получения информации о терминалах:
В предыдущей части мы добавили к веб-интерфейсу управления терминалами MetaTrader 5 конфигурацию и показатели торговых счетов. Чтобы получить баланс, прибыль, средства и маржу, веб-сервер последовательно подключался к каждому терминалу через модуль MetaTrader5 для Python, вызывал terminal_info() и account_info(), а затем отключался.
В пределах одного такого подключения модуль работает с выбранным терминалом, поэтому для следующего экземпляра приходится повторять initialize() и shutdown(). Время полного обхода складывается из времени всех обращений. Для уже подготовленных терминалов это могут быть миллисекунды, но неудачная инициализация задерживает переход к следующему экземпляру. При массовом запуске менеджеру приходится ждать, хотя сведения от остальных терминалов уже могли бы быть доступны.
Изменим направление передачи данных: в каждом терминале будет работать MQL5-сервис, который раз в две-три секунды записывает состояние в общую базу SQLite. Веб-приложение станет читать готовые записи, а наличие процесса по-прежнему проверять через psutil: программа внутри терминала не может сообщить "я остановлена", если завершилась вместе с ним. Получится схема сервис → SQLite → Python → интерфейс.
Так мы уберём прямой опрос терминалов и зависимость чтения данных от Python-модуля MetaTrader5. Сбор сведений будет выполняться независимо в каждом экземпляре, хотя запись в общий файл всё ещё потребует согласования. В этой части ограничимся последним состоянием; историю показателей и подробности открытых позиций оставим для продолжения. После реализации сравним оба способа чтения на одном, двух и четырёх терминалах.
Автор: Yuriy Bykov