Сбои подключения и ограничения запросов.
API восстанавливает терминал. Вы управляете приложением.
Скачать пример на Python · PY ↓
Пошаговая инструкция
- 0:00
Сбои подключения и ограничения запросов.
В этом уроке разберём сбои MT5 и ограничения запросов: как дождаться восстановления API, возобновить поток котировок и безопасно повторить чтение данных. Используем реальные ответы демонстрационного счёта.
- 0:18
Проверьте существующий сеанс.
Откройте эм ти пять точка эм эр пи си точка про. Сохраните ключ API и идентификатор терминала. В записанном ответе ConnectState состояние Connected, а isConnected, isAlive и apiIsAlive равны true. Терминал исправен. Обрыв связи в браузере или неудачный запрос сам по себе не требует создания нового терминала.
- 0:45
Дождитесь автоматического восстановления.
MetaRPC проверяет состояние терминалов и автоматически пытается восстановить активные сеансы, для которых разрешено восстановление. Идентификатор терминала сохраняется. Приложение должно приостановить затронутые операции и дать сервису время, а не постоянно вызывать Reconnect или ConnectEx. Проверяйте состояние с интервалами. Перед продолжением убедитесь через AccountSummary, что счёт снова доступен. Восстановление не происходит мгновенно после каждого сбоя.
- 1:23
Устраняйте причину сбоя.
Намеренное отключение, истечение срока сеанса, приостановка обслуживания или неверные учётные данные требуют соответствующего действия. Прочитайте причину ошибки и при необходимости обновите данные или устраните проблему со счётом. Reconnect и ConnectByToken — инструменты явного восстановления, а не часть цикла повторения каждого запроса. Если подходящий для восстановления сеанс остаётся недоступен, не возобновляйте работу и передайте поддержке код ошибки и время.
- 2:02
Восстановите WebSocket приложения.
Восстановление терминала и WebSocket приложения — разные соединения. Когда чтение счёта снова работает, закройте неисправный сокет и откройте OnSymbolTick с сохранённым id и ключом API. Возобновите подписки на инструменты. Реальные сообщения EURUSD показывают bid, ask и время. Убедитесь, что приходят свежие данные, и не создавайте дублирующие потоки. Исправный поток можно оставить открытым.
- 2:35
Распознайте превышение лимита.
Вот реальный отказ AccountSummary, полученный в ограниченном тесте чтения. HTTP Status Code 200 означает, что API вернул ответ. Поле error не равно null и содержит TERMINAL_RATE_LIMIT_EXCEEDED. Сообщение указывает, что вызов не выполнялся. В тесте лимит составлял триста неторговых вызовов за скользящую минуту для всех клиентов одного терминала. Проверяйте текущие ограничения, а не записывайте это число навсегда в код.
- 3:11
Подождите указанное сервером время.
В этом ответе error.properties содержит пару ключа и значения RetryAfterSeconds со значением 1. Подождите не менее одной секунды и добавьте небольшую случайную задержку перед повторным чтением. Приостановите и другие процессы, использующие лимит этого терминала. При новом отказе используйте новую задержку. Для HTTP Status Code 429 учитывайте заголовок Retry-After.
- 3:44
Возобновляйте запросы постепенно.
После ожидания реальный запрос снова успешен: HTTP Status Code 200, ошибки API нет, получены данные демосчёта. Не отправляйте сразу все накопившиеся запросы. Кэшируйте повторяющиеся сведения, согласуйте частоту запросов между процессами и используйте OnSymbolTick для котировок. Превышение лимита требует ожидания, а не переподключения терминала.
- 4:14
Задайте чёткие правила повторения.
Пример Python предназначен только для AccountSummary. Он повторяет запрос при явном превышении лимита или занятости, если указано корректное время ожидания, добавляет случайную задержку и ограничивается тремя попытками. Остальные ошибки передаются вызывающему коду. Храните секреты в переменных окружения. Для сбоев подключения нужна отдельная ограниченная политика. Не применяйте этот обработчик чтения к подключениям и торговым методам.
- 4:48
Сначала выясните результат сделки.
Если ответ на торговый запрос потерян, брокер уже мог его выполнить. Автоматическое восстановление не сообщает результат сделки. После восстановления доступа проверьте OpenedOrders и DealsHistory. Используйте тикеты ордеров и сделок, если они известны, и сопоставьте инструмент, направление, объём и время. Похожие сделки могут совпадать по этим признакам. Не повторяйте автоматически запрос с невыясненным результатом.
- 5:24
Завершите сеанс правильно.
Когда намеренно заканчиваете работу, остановите подписки и вызовите Disconnect. Демонстрационный поток остановлен, терминал отключён; сделки не изменялись. Помните: MetaRPC восстанавливает подходящие сеансы, приложение при необходимости восстанавливает свой сокет, при ограничениях нужно ждать, а перед новой сделкой — выяснить результат предыдущей.