OrderSendAsync не возвращает номер тикета (OnTradeTransaction - ловля блох или асинхронных хаос? ) - страница 5
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
:)
А если отложенный ордер и исполнился не полным объемом?
Михаил, (кажется так Вас зовут) если исполнился отложенный ордер, то в OnTradeTransaction() будет тип транзакции TRADE_TRANSACTION_DEAL_ADD и всё то-же самое. Позиция выбирается, проверяется объём и если не полностью исполнен, то при поступлении TRADE_TRANSACTION_REQUEST получаем retcode и принимаем решение.
Я так понимаю, это был небольшой экзамен. Уверяю вас, при острой необходимости я справлюсь.
Вы в этой теме не участвовали?
Причем тут позиция, если вообще нет никаких данных об ордере!
Товарисч предлагает отправить ассинхронный ордер и контролировать позицию. :),
при этом нет не тикета не реквест айди ордера.
Я говорил о позициях.
Я с Вами вообще не вел диалога и не обращался к Вам.
Как работает OnTradeTransaction у меня есть четкое представление.
Почему-то все забывают, что приложения Клиент-Сервер имеют слабое звено.
И не важно OrderSend или OrderSendAsync мы отсылаем, ответ сервера не гарантирован из-за слабого звена.
Другой вопрос
Как контролировать отправленный ордер, если нет ответа сервера.
100% работающее решение этой проблемы я описывал.
https://www.mql5.com/ru/blogs/post/557544
Сейчас, этот механизм доработан и оптимизирован.
Я с Вами вообще не вел диалога и не обращался к Вам.
А тут вы разве не моё сообщение цитировали?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderSendAsync не возвращает номер тикета (OnTradeTransaction - ловля блох или асинхронных хаос? )
prostotrader, 2020.03.20 20:11
:)
А если отложенный ордер и исполнился не полным объемом?
И в диалоге с Артёмом не обо мне?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderSendAsync не возвращает номер тикета (OnTradeTransaction - ловля блох или асинхронных хаос? )
prostotrader, 2020.03.20 21:44
Причем тут позиция, если вообще нет никаких данных об ордере!
Товарисч предлагает отправить ассинхронный ордер и контролировать позицию. :),
при этом нет не тикета не реквест айди ордера.
А тут вы разве не моё сообщение цитировали?
И в диалоге с Артёмом не обо мне?
Нет, не Вам
А, простите, на кой дьявол вам requestID если в trans.type == TRADE_TRANSACTION_DEAL_ADD есть trans.position по которому можно проверить
Если true значит requestID 10009 и другого быть не может. В противном случае получим в trans.type ==TRADE_TRANSACTION_REQUEST requestID и будем принимать решение.
Для отложенных ордеров решение другое.
Ну, если вы так бьётесь за пару миллисекунд, то я умолкаю...
Ещё обратите внимание на статьи Артёма Тришкина. У него есть решение лучше, но сложное для моего возраста.
Алексей, мне приходит на ум старый анекдот, перефразировав который могу сказать, вы не читатель, вы - писатель... Я уже раз 10 написал, что на запрос OrderSendAsync вернет вам гарантировано ТОЛЬКО requestID и нет у вас тикета, и в этом случае все, что вам останется - ждать TRADE_TRANSACTION_REQUEST. Хорошо если в 10-20% случаев вам вернется тикет, но это просто везение и не более того.
И для справки, OrderSendAsync вернет вам только 10008. Все остальное ловить должны уже сами.
Алексей, мне приходит на ум старый анекдот, перефразировав который могу сказать, вы не читатель, вы - писатель... Я уже раз 10 написал, что на запрос OrderSendAsync вернет вам гарантировано ТОЛЬКО requestID и нет у вас тикета, и в этом случае все, что вам останется - ждать TRADE_TRANSACTION_REQUEST. Хорошо если в 10-20% случаев вам вернется тикет, но это просто везение и не более того.
И для справки, OrderSendAsync вернет вам только 10008. Все остальное ловить должны уже сами.
Уточните пожалуйста вы ставите отложенный ордер или позицию по маркету?
Вы просто не умеете пользоваться описанными Вами функциями.
Здесь https://www.mql5.com/ru/forum/38456/page136#comment_15425184 (прикрепленные файлы)
рабочий код. Там все предельно ясно.
Откройте демо счет ФОРТС (фьючерсы) в Открытии или БКС и посмотрите, как нужно пользоваться функциями.
Добавлено
Если ничего не приходит в OnTradeTransaction (в коде этого нет)
То включается механизм проверки что случилось с ордером.
Если есть ордер, то ищем по ордеру, если нет ордера, то ищем по уникальному magic.
Принцип - каждому ордеру присваивается уникальный magic, по которому
идет проверка что произошло с ордером (в коде есть "ошметки" как это делается mem_time - для проверки интервала времени, mem_start_time - для поиска ордера в узком отрезке времени,
magic_storage - для хранения текущего magic). Automagic.mqh позволяет генерить уникальный начальный magic для символа и советника,
позволяющий хранить 254 magic
Михаил, во-первых, спасибо за код, во-вторых, Вы немного торопитесь с выводами... Ваш код код требует определенной детерминированности (парадигма, что в текущем потоке может быть только поток по одной сделке, терминированной типом TRADE_TRANSACTION_REQUEST). При большом рейте выставления сделок он будет "захлебываться" и терять моменты "фиксации" сделок, хотя опять же, он написан под определенный рынок. На Фьючерсах, думаю, он будет работать без проблем. Прекрасный пример принципа "Необходимо и достаточно", но когда за секунду генерится до 100-ни сделок - он точно не подойдет.
Но как я уже писал ранее, тут вопрос не в невозможности обработки (полноценный связанный список с объектами транзакций вполне решит проблему), а в ущербности асинхронного режима.
Уточните пожалуйста вы ставите отложенный ордер или позицию по маркету?
Позицию.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
OrderSendAsync не возвращает номер тикета (OnTradeTransaction - ловля блох или асинхронных хаос? )
Alexey Viktorov, 2020.03.20 19:04
А, простите, на кой дьявол вам requestID если в trans.type == TRADE_TRANSACTION_DEAL_ADD есть trans.position по которому можно проверить
Если true значит requestID 10009 и другого быть не может. В противном случае получим в trans.type ==TRADE_TRANSACTION_REQUEST requestID и будем принимать решение.
Для отложенных ордеров решение другое.
Ну, если вы так бьётесь за пару миллисекунд, то я умолкаю...
Ещё обратите внимание на статьи Артёма Тришкина. У него есть решение лучше, но сложное для моего возраста.