![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Потому что асинхронный быстрее и эффективнее (как всегда). Если посылать пачку ордеров асинхронно и один из них заткнется, то все остальные проскочат, а при синхронном подходе - заткнется вся очередь.
Кроме того, асинхронный советник после отправки ордеров может продолжать контролировать новые сигналы, а синхронный советник будет "курить бамбук" до тех пор, пока не сработает предыдущий приказ.
разработчики объявляли, что OrderSend сделали полностью синхронным
На реальном счете при вызове CTrade::PositionClose я пару раз поймал закрытие и переворот. Проанализировав логи, я увидел, что OrderSend внутри PositionClose отработал с кодом TRADE_RETCODE_DONE, но PositionsTotal() возвращала все равно 1 как до закрытия, так и после. Сейчас я добавил небольшой таймаут после вызова PositionClose и наблюдаю. Из всего этого я делаю вывод, что инфа по открытым позициям и история торговли обновляется с некоторой задержкой после вызова OrderSend и следовательно, называть эту функцию полностью синхронной во всех смыслах не стоит. Если я не прав, поправьте меня.
функция синхронная, просто история обновляется не синхронно с завершением работы этой функции,
я вот так делаю, думаю это проще чем возиться с OnTrade(), и прочими заморочками:
функция синхронная, просто история обновляется не синхронно с завершением работы этой функции,
я вот так делаю, думаю это проще чем возиться с OnTrade(), и прочими заморочками:
функция синхронная, просто история обновляется не синхронно с завершением работы этой функции,
я вот так делаю, думаю это проще чем возиться с OnTrade(), и прочими заморочками:
Можно в цикле
добавить проверку
if (IsStopped()) break;
так же можно ограничить количество итераций в цикле. Правда ситуаций, когда этот бесконечный цикл может зависнуть, я не вижу.
Делаю похожим способом. Но жду появления сделки с заданным тикетом в истории.
Можно в цикле
добавить проверку
if (IsStopped()) break;
так же можно ограничить количество итераций в цикле. Правда ситуаций, когда этот бесконечный цикл может зависнуть, я не вижу.