Ошибки, баги, вопросы - страница 3202
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть даже стресс-тест, который трушный синхронный OrderSend не пройдет.
Потому что в MT5 асинхронность повсюду:
вот. так к чему в добавок к OrderSendAsync() ещё и НедоSendAsync ()?
подобное положение вещей порождает кучу проблем и торговых рисков там, где казалось бы проблем быть недолжно никогда и ни при каких обстоятельствах, если торговая логика чуть сложнее, чем торговля по MA.
так вот и хотелось бы изменить это. зачем трейдеру все промежуточные шаги от отправки торгового приказа до приходя отчета об итогах сделки? - тем более если трейдер никак на это повлиять не может!))) для более детального ковыряния в процессах торговли есть специализированные функции OrderSendAsync() и типа OnTrade().
OrderSend () должен быть полностью синхронным, трейдер отправил приказ а назад получить отчет о результатах сделки и всех промежуточных шагов брокера, поставщика ликвидности и за что вообще захочет отчитываться брокер. Всё.
наличие OrderSendSync() в дополнение к имеющимся OrderSend() и OrderSendAsync() упростило бы код в простых/односимвольных экспертах.
Но у меня голова уже "заточилась" под текущую/имеющуюся схему работы и она кажется мне вполне удобной.
OrderSend() точно переделывать не надо.
вот. так к чему в добавок к OrderSendAsync() ещё и НедоSendAsync ()?
подобное положение вещей порождает кучу проблем и торговых рисков там, где казалось бы проблем быть недолжно никогда и ни при каких обстоятельствах, если торговая логика чуть сложнее, чем торговля по MA.
Как и предполагалось, сделки не было. Ордер отправлен, его тикет есть. Но по какой цене он реально исполнится, еще не известно.
Хочешь трушный синхронный ордерсенд — запили его сам с помощью предложенного бесконечного цикла.
Тогда почему код ответа 10009 а не
10008
TRADE_RETCODE_PLACED
Ордер размещен
В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync() :
| зона ответственности Биржи || зона ответственности Брокера || интернет || клиент |
[биржа (MOEX)] <==> [шлюз Plaza2] <===> [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа] <================> [Терминал] - > true OrderSendSync()
[биржа (MOEX)] <==> [шлюз Plaza2] <===> [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа] <================> [Терминал] - > true OrderSend()
[биржа ( MOEX)] <==> [шлюз Plaza2] <===> [шлюз в MOEX] <=> [MT5 торговый сервер] <=> [Точка доступа] <================> [Терминал] - > true OrderSendAsync()
Надо?
В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync()
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
fxsaber, 2021.06.03 06:10
Пожалуй, на данный момент это самая сложная задача из всех легко формулируемых задач в этой ветке.
Очень сильная проверка владения торговой частью MQL5.
Там в ветке значительно конструктивнее было обсуждение различных вариантов поведения MT5.
В качестве предложения разработчикам, с учетом обсуждения, добавить OrderSendSync() :
Надо?
наверное, да, как компромисс, что бы не ломать имеющееся, было бы целесообразно ввести полностью синхронную функцию. либо новую, либо качественно обёрнутую разработчиками OrderSend ().
надо.
Всё это происходит от того, что существуют 2 базы данных. Один на сервере брокера, другой у вас.
И между ними стоят МТ5. Если обмен данными происходит через интернет, или сервера работают медленно, то всякое может произойти.
У меня раньше из-за OrderSend были и двойные сделки, и обратные сделки.
И поэтому сейчас уже как 4 года использую Стандартную библиотеку CTrade.
Например: CTrade trade;
trade.Sell(), trade.Buy(), trade.PositionModify() и trade.PositionClose()
Они не требуют задать или проверить тип исполнения, политика заполнения и не надо заполнить какие-то структуры;
Это очень просто и работают прекрасно :)
Есть даже стресс-тест, который трушный синхронный OrderSend не пройдет.
Потому что в MT5 асинхронность повсюду:
По пункту 3:
В момент срабатывания BuyLimit1 появляется маркет-ордер. Если память мне не изменяет - с тем же тикетом (могу ошибаться из-за давности проверок этой логики).
По нему можно понять, что сработал BuyLimit1: нету BuyLimit1, нету Buy1, но есть BuyMarket1, который и породит сделку.
Если ошибаюсь - поправьте.
По пункту 3:
В момент срабатывания BuyLimit1 появляется маркет-ордер. Если память мне не изменяет - с тем же тикетом (могу ошибаться из-за давности проверок этой логики).
По нему можно понять, что сработал BuyLimit1: нету BuyLimit1, нету Buy1, но есть BuyMarket1, который и породит сделку.
Если ошибаюсь - поправьте.