TRADE_RETCODE_PLACED для OrderSend - это ответ сервера.
TRADE_RETCODE_PLACED для OrderSendAsync - это ответ терминала.
Коды хоть и одинаковые, но имеют совершенно разный смысл. Скорее всего, разработчики исправят эту неоднозначность.
Поэтому понимать это:
нужно в соответствующем контексте.
Поясните ещё тогда, плз, при каких условиях при отправке торгового запроса с помощью функции OrderSend серверу может потребоваться возвращать код TRADE_RETCODE_PLACED? Ведь, судя по примечанию к функции OrderSendAsync и ответу Роша, этот самый код TRADE_RETCODE_PLACED свидетельствует только об успешной отправке запроса с терминала на сервер. Т.е., получается, как только запрос доползёт до сервера и начнётся его обработка/проверка, сервер будет вынужден сгенерировать другие, "настоящие" коды сервера "по результатам обработки". Поэтому пока не сильно понимаю, зачем серверу (именно серверу) возвращать код TRADE_RETCODE_PLACED, если этот код относится к стадии жизни запроса, предшествовавшей появлению запроса на сервере? Или код TRADE_RETCODE_PLACED в отношении фукнции OrderSend несёт иную смысловую нагрузку?
OrderSend может получать ответ, как от сервера, так и от терминала (в случае неудачного прохождение фильтров терминала).
Правильно ли я понял следующую мысль:
Терминал проверил запрос от OrderSend и успешно отправил его на сервер, при этом retcode получил промежуточное значение TRADE_RETCODE_PLACED. В этот момент связь прерывается, и всё, что функция OrderSend может вернуть - это "застрявший" в поле retcode код TRADE_RETCODE_PLACED? Это и будет тем примером, когда OrderSend возварщает TRADE_RETCODE_PLACED?
Терминал проверил запрос от OrderSend и успешно отправил его на сервер, при этом retcode получил промежуточное значение TRADE_RETCODE_PLACED. В этот момент связь прерывается, и всё, что функция OrderSend может вернуть - это "застрявший" в поле retcode код TRADE_RETCODE_PLACED? Это и будет тем примером, когда OrderSend возварщает TRADE_RETCODE_PLACED?
Возможно и так, но сомневаюсь. Скорее всего, при подобном обрыве связи будет TRADE_RETCODE_TIMEOUT через TimeOut-время.
Честно говоря, не понимаю, для чего нужно это занудство в случае OrderSend. Возможно, разработчики пояснят в справке подробнее.
P.S. Ни строчки не написал на MQL5. Поэтому все мои мысли по теме можно игнорировать.
...Всё равно, ерундистика какая-то. В Руководстве пользователя клиентского терминала (январь 2012) сказано, что одна из стадий ордера - это стадия "установленный(placed) - дилер принял ордер".
Т.е. из Руководства следует, что placed сигнализирует о стадии жизни торгового запроса, когда он уже благополучно добрался до сервера. А в описании функции OrderSendAsync() говорится прямо противоположное - что код TRADE_RETCODE_PLACED не зависит от прибытия на сервер.
Честно говоря, не понимаю, для чего нужно это занудство в случае OrderSend.
Лично мне в своё время по душе пришлась идея необходимости "обработки кодов возврата". Но чтобы такую обработку написать корректно, надо знать, о чём идёт речь. Вот уже долгое время пытаюсь понять, с чем именно связан код TRADE_RETCODE_PLACED.
Дождались соответствующего ответа от сервера в onTrade.
Вышли из MyOrderSend с этим ответом.
При такой реализации MyOrderSend будет полностью совпадать с штатной OrderSend (которую можно просто упразднить из API, реализовав через OrderSendAsync в штатной библиотеке).
При такой реализации MyOrderSend будет полностью совпадать с штатной OrderSend (которую можно просто упразднить из API, реализовав через OrderSendAsync в штатной библиотеке).
Для саморазвития идея интересная. Но вот пока onTrade не является параметризованным, любые проверки с использованием onTrade в штатной библиотеке будут, скорее всего, гораздо медленнее, чем сама функция OrderSend. Могу ошибаться.
Вообще, ввод OrderSendAsync - историческое для Metatrader событие. За все время существования торгового API (начиная с Metatrader3 (более ранних не видел)) Metatrader, пусть и реализованного через свой собственный язык, оно оставалось практически неизменным по сути. OrderSendAsync - первое по существу изменение торгового API от Metaquotes.
Искренне поздравляю компанию разработчиков с этим событием и желаю довести асинхронную модель до адекватной полноценности!
Техническое сообщение. Собираем интересные высказывания в одну тему.
Renat:
Учтите, что есть и будут лимиты на количество одновременных заявок в очереди исполнения от одного счета. Сейчас это 16 заявок, если я не ошибаюсь.
Асинхронные операции будут аккуратно работать с учетом "окна количества допустимых заявок", ожидая исполнения части предыдущей пачки перед посылкой очередной порции. Кроме того, будут защиты от глупого/тестового флуда. Пока при переполнении количества разрешенных заявок приходит ошибка.
Новый метод асинхронных операций через OrderSendAsync решает главную задачу - позволяет мгновенно провести десяток операций. Это очень мощное средство и пользоваться им надо аккуратно и обязательно с оглядкой на возможность бана со стороны сервера и брокера.
Надо бы пояснить:
TRADE_RETCODE_PLACED для OrderSend - это ответ сервера.
TRADE_RETCODE_PLACED для OrderSendAsync - это ответ терминала.
Коды хоть и одинаковые, но имеют совершенно разный смысл. Скорее всего, разработчики исправят эту неоднозначность.
Поэтому понимать это:
нужно в соответствующем контексте.
OrderSend может получать ответ, как от сервера, так и от терминала (в случае неудачного прохождение фильтров терминала).
OrderSendAsync получает ответ всегда только от терминала. Для получения ответа от сервера нужно отлавливать соответсвующие события в onTrade.
OrderSend может получать ответ, как от сервера, так и от терминала (в случае неудачного прохождение фильтров терминала).
Правильно ли я понял следующую мысль:
Терминал проверил запрос от OrderSend и успешно отправил его на сервер, при этом retcode получил промежуточное значение TRADE_RETCODE_PLACED. В этот момент связь прерывается, и всё, что функция OrderSend может вернуть - это "застрявший" в поле retcode код TRADE_RETCODE_PLACED? Это и будет тем примером, когда OrderSend возварщает TRADE_RETCODE_PLACED?
Правильно ли я понял следующую мысль:
Терминал проверил запрос от OrderSend и успешно отправил его на сервер, при этом retcode получил промежуточное значение TRADE_RETCODE_PLACED. В этот момент связь прерывается, и всё, что функция OrderSend может вернуть - это "застрявший" в поле retcode код TRADE_RETCODE_PLACED? Это и будет тем примером, когда OrderSend возварщает TRADE_RETCODE_PLACED?
Возможно и так, но сомневаюсь. Скорее всего, при подобном обрыве связи будет TRADE_RETCODE_TIMEOUT через TimeOut-время.
Честно говоря, не понимаю, для чего нужно это занудство в случае OrderSend. Возможно, разработчики пояснят в справке подробнее.
P.S. Ни строчки не написал на MQL5. Поэтому все мои мысли по теме можно игнорировать.
...Всё равно, ерундистика какая-то. В Руководстве пользователя клиентского терминала (январь 2012) сказано, что одна из стадий ордера - это стадия "установленный(placed) - дилер принял ордер".
Т.е. из Руководства следует, что placed сигнализирует о стадии жизни торгового запроса, когда он уже благополучно добрался до сервера. А в описании функции OrderSendAsync() говорится прямо противоположное - что код TRADE_RETCODE_PLACED не зависит от прибытия на сервер.
Честно говоря, не понимаю, для чего нужно это занудство в случае OrderSend.
Вообще любой может написать последовательный MyOrderSend через OrderSendAsync:
При такой реализации MyOrderSend будет полностью совпадать с штатной OrderSend (которую можно просто упразднить из API, реализовав через OrderSendAsync в штатной библиотеке).
При такой реализации MyOrderSend будет полностью совпадать с штатной OrderSend (которую можно просто упразднить из API, реализовав через OrderSendAsync в штатной библиотеке).
Вообще, ввод OrderSendAsync - историческое для Metatrader событие. За все время существования торгового API (начиная с Metatrader3 (более ранних не видел)) Metatrader, пусть и реализованного через свой собственный язык, оно оставалось практически неизменным по сути. OrderSendAsync - первое по существу изменение торгового API от Metaquotes.
Искренне поздравляю компанию разработчиков с этим событием и желаю довести асинхронную модель до адекватной полноценности!
Техническое сообщение. Собираем интересные высказывания в одну тему.
Учтите, что есть и будут лимиты на количество одновременных заявок в очереди исполнения от одного счета. Сейчас это 16 заявок, если я не ошибаюсь.
Асинхронные операции будут аккуратно работать с учетом "окна количества допустимых заявок", ожидая исполнения части предыдущей пачки перед посылкой очередной порции. Кроме того, будут защиты от глупого/тестового флуда. Пока при переполнении количества разрешенных заявок приходит ошибка.
Новый метод асинхронных операций через OrderSendAsync решает главную задачу - позволяет мгновенно провести десяток операций. Это очень мощное средство и пользоваться им надо аккуратно и обязательно с оглядкой на возможность бана со стороны сервера и брокера.