![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Может PositionTotal() нужно?
А причём тут позиция если я спрашиваю у OrdersTotal() сколько на данный момент есть выставленных ордеров,
при чём запрашиваю эту информацию в OnTrade(), те момент когда ордер существует никак не может быть пропущен.
Но по факту получается что этот самый момент всё же каким то образом упускается, и запросы проходят когда либо ордера ещё нет, либо когда уже нет.
А вот момента когда он есть никак в OnTrade() не отлавливается, или как вариант OrdersTotal() безбожно врёт.
Чтоб небыло нареканий на кривоту кода вот МетаКвотовский код, с моей доработкой скрипта в советник.
Добавлена функция OnTrade() и код скрипта вынесен в OnInit().
Ни один принт не вывел сообщение что есть ордер.
На это могу ответить только статьей Торговые события в MetaTrader 5:
Заключение
Все операции в торгово-аналитической платформе MetaTrader 5 производятся асинхронно и отсылка сообщений обо всех изменениях на торговом счете производятся независимо друг от друга. Поэтому не нужно пытаться отслеживать одиночное событие по правилу "Один запрос - Одно торговое событие". Если требуется точно определить что именно изменилось по приходу события Trade, то нужно на каждом вызове обработчика OnTrade анализировать все сделки, позиции и ордера и сравнивать с тем состоянием, что было до его появления.На это могу ответить только статьей Торговые события в MetaTrader 5:
Это означает, что ордер, который Вы пытаетесь отловить, наверняка уже нужно искать с помощью HistoryOrdersTotalСобственно этой статьёй и руководствуюсь. Хочу докопаться до ответа на вопрос: как так получается, что торговое событие пропускает момент, когда ордер выставлен но ещё не исполнен?
Торговые события генерируются сервером в следующих случаях:
Я подозреваю что OrderTotal() бочит. Но доказать это с данным функционалом не могу.
Хотя как вариант не отвергаю что OrderTotal() берёт данные не там где я думаю (ну то есть не на сервере).
Собственно этой статьёй и руководствуюсь. Хочу докопаться до ответа на вопрос: как так получается, что торговое событие пропускает момент, когда ордер выставлен но ещё не исполнен?
Просто к моменту прихода события Trade ордер уже выставлен и уже исполнен. Поэтому нет его среди действующих, он уже попал в историю.
Да, да, у меня мысли плавают вокруг этого ответа.
Я бы ответил так, на момент выставления ордера, сервером генерируется событие "традес" и отсылается терминалу, когда терминал его получает, то в коде делается запрос о количестве ордеров, но к моменту прихода этого запроса на сервер, сервер уже исполнил этот ордер.
Другого объяснения у меня нет.
Торговые события генерируются сервером в следующих случаях:
Я подозреваю, что OrderTotal() бочит. Но доказать это с данным функционалом не могу.
Правильно ли я понял, что к списку действующих ордеров Вы относите как действующие отложенные ордера, так и ордера на открытие позиции?
Что это означает?
... во вкладке "Эксперты" появляется это сообщение. Это не ошибка, а предупреждение. Предупреждение о чем?
Ну, я про "ошибку" и не говорил. Пусть будет "предупреждение". Свою версию с примером уже высказал. Посмотрите ещё обсуждение вот отсюда (про утечку строк - читать до конца страницы): https://www.mql5.com/ru/forum/1111/page345#comment_54616
Может, придётся в СД обратиться, с подробностями Вашей ситуации.
Обнаружил "непонятку".
Почему компилятору не нравится дефайн второй переменной b?
И вообще, как разрулить подобную ситуацию?