Ошибки, баги, вопросы - страница 3201
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
да, почему бы не заполнять брокеру структуру по факту исполнения... но, есть возможность не заполнять, и некоторые брокеры этой возможностью пользуются.
Может они обрабатывают все как асинхронные OrderSendAsync() Но кто их об этом просит?
Может они обрабатывают все как асинхронные OrderSendAsync() Но кто их об этом просит?
вот именно. у меня первой мысль была именно такой.
OrderSend () заявлена как синхронная функция, в этом её несомненная прелесть, но ведёт себя так не у всех брокеров.
Я не понимаю зачем вы это делаете, ищете скрупулёзно баги ? Идеально ничего не будет, если ищут то находят баги и в CPU, но миллиарды умеют в такой среде работать и весь мир не идеален!
Я не понимаю зачем вы это делаете, ищете скрупулёзно баги ? Идеально ничего не будет, если ищут то находят баги и в CPU, но миллиарды умеют в такой среде работать и весь мир не идеален!
вот именно. у меня первой мысль была именно такой.
OrderSend () заявлена как синхронная функция, в этом её несомненная прелесть, но ведёт себя так не у всех брокеров.
Большое спасибо за логи и код - в них содержится вся необходимая информация для обсуждения.
Функция OrderSend() во всех случаях отработала в соответствии с документацией, т.е. правильно. И вернула в каждом из случаев всё, что могла на момент выполнения. Я ниже попробую объяснить, почему так считаю и в чем её отличие от асинхронной версии. Если я в чём то не прав - буду очень благодарен, если меня поправят. Понимание схемы работы этих функций очень важно для меня, т.к. позволяет избежать ошибок в работе роботов.
Схема взаимосвязи терминала со Срочной секцией MOEX. В части работы OrderSend() и OrderSendAsync() нет разницы какой брокер/биржа рассматриваются:
| зона ответственности Биржи || зона ответственности Брокера || интернет || клиент |
[биржа (MOEX)] <==> [шлюз Plaza2] <===> [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа] <================> [Терминал] - true OrderSend()
[биржа ( MOEX)] <==> [шлюз Plaza2] <===> [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа] <================> [Терминал] - true OrderSendAsync()
Золотым цветом выделена зона успешного выполнения OrderSend() и OrderSendAsync(), т.е. участок, который выполнен успешно, в случае, если они вернули true.
Цена рыночной сделки (и она сама) формируется на бирже (в данном случае MOEX). OrderSend() в нормальной ситуации, не должен возвращать цену и тикет сделки т.к. сам о ней пока ничего не знает. Сделка происходит позже и в нормальном случае - в другом месте (не на сервере МТ5).
Ваши логи подтверждают схему выше, кроме одного случая - в котором [MT5 торговый сервер] знает цену сразу - т.е. дальше запрос скорее всего уже не идет (это догадки). Я кстати, не утверждаю, что это плохо. Схемы работы "брокера" бывают разные, у всех есть свои достоинства и недостатки.
То что левее [MT5 торговый сервер] во всех случаях разное. Каждый брокер городит свою инфраструктуру, как может.
Вся инфа на основе анализа/наблюдений и из открытых источников.
Ваши логи подтверждают схему выше, кроме одного случая - в котором [MT5 торговый сервер] знает цену сразу - т.е. дальше запрос скорее всего уже не идет (это догадки). Я кстати, не утверждаю, что это плохо. Схемы работы "брокера" бывают разные, у всех есть свои достоинства и недостатки.
а что мешает брокеру отправить ответ уже после того, как заявка будет исполнена, или же сообщение об ошибке? - хитропопость?))
а что мешает брокеру отправить ответ уже после того, как заявка будет исполнена, или же сообщение об ошибке? - хитропопость?))
Так он и отправляет. Когда сам получит её. Но это уже к OrderSend() не имеет отношение.
Практический вывод - после OrderSend() результат быстрее всего можно получить в OnTrade(), ну или ждать по аналогии с проверочным кодом выше.
А на структуру возврата лучше основную логику алгоритма не завязывать.
Но Вы это и без меня знаете. Я думаю у Вас завязка на структуру возврата связана с каким-то замороченным алгоритмом или чужим кодом.
Как и предполагалось, сделки не было. Ордер отправлен, его тикет есть. Но по какой цене он реально исполнится, еще не известно.
Хочешь трушный синхронный ордерсенд — запили его сам с помощью предложенного бесконечного цикла.
Так он и отправляет. Когда сам получит её. Но это уже к OrderSend() не имеет отношение.
Практический вывод - после OrderSend() результат быстрее всего можно получить в OnTrade(), ну или ждать по аналогии с проверочным кодом выше.
А на структуру возврата лучше основную логику алгоритма не завязывать.
Но Вы это и без меня знаете. Я думаю у Вас завязка на структуру возврата связана с каким-то замороченным алгоритмом или чужим кодом.
так вот и хотелось бы изменить это. зачем трейдеру все промежуточные шаги от отправки торгового приказа до приходя отчета об итогах сделки? - тем более если трейдер никак на это повлиять не может!))) для более детального ковыряния в процессах торговли есть специализированные функции OrderSendAsync() и типа OnTrade().
OrderSend () должен быть полностью синхронным, трейдер отправил приказ а назад получить отчет о результатах сделки и всех промежуточных шагов брокера, поставщика ликвидности и за что вообще захочет отчитываться брокер. Всё.
Хочешь трушный синхронный ордерсенд — запили его сам с помощью предложенного бесконечного цикла.
мы программисты - народ плечистый, запилено уже давно. но не правильно это, не по людски как то.
Хочешь трушный синхронный ордерсенд — запили его сам
Есть даже стресс-тест, который трушный синхронный OrderSend не пройдет.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
fxsaber, 2021.05.05 02:04
Запустите этот код на пустом демо-счете и убедитесь в открытии двух позиций через несколько секунд.
Эта же логика на MT4 выглядит так.
Понятно, что такой код на MT4 не вызовет задвоения позиции. Но не на MT5.
Потому что в MT5 асинхронность повсюду: