Асинхронная обработка отсылки ордеров.

 

Всем привет. Поделитесь пожалуйста порядком и методами как Вы работаете с флагами при обработке асинхронного запроса.

Как проверяете к примеру что ордер на модификацию в работ, отправлен и закончен?

Лучше стандартными функциями. 
А то  я совсем запутался.  Вводить свои флаги или нет. 

Спасибо. 

 
Похоже асинхронкой никто не заморачивается. ((((
 
Aleksandr Dziuba #:
Похоже асинхронкой никто не заморачивается. ((((

Надо смотреть у конкретного брокера/ДЦ. Могут посылать разные события. Соответственно, и обрабатывать их нужно по-разному.

Рекомендую сделать так: после отправки приказа, сделайте принт OnTradeTransaction(). От этого и исходите.

 
Aleksandr Dziuba #:
Похоже асинхронкой никто не заморачивается. ((((

Если не заморачиваться совсем, то можно заранее выставлять отложку далеко от текущей цены через OrderSend, а модицифировать ее уровень через OrderSendAsync. Тогда никаких обработчиков даже писать не надо.

Так и делаю.
 

Спасибо за ответ. 
Я интересуюсь как перехватывать флаг.

Как сделал бы я. 

В MQLRequest запихал бы флаг ORDER_STATE_REQUEST_MODIFY.
Затем в OntradeTransaction проверял бы что транзакция закончилась.
И сбрасывал этот флаг перед следующим изменением.

2024.03.06 19:31:10.387 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_REQUEST_MODIFY 0
2024.03.06 19:31:10.390 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_PLACED 0
2024.03.06 19:31:10.771 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_PLACED 0

Вот как выглядят сигналы транзакции. Почему интересно два раза Placed?

 
Aleksandr Dziuba #:

Спасибо за ответ. 
Я интересуюсь как перехватывать флаг.

Как сделал бы я. 

В MQLRequest запихал бы флаг ORDER_STATE_REQUEST_MODIFY.
Затем в OntradeTransaction проверял бы что транзакция закончилась.
И сбрасывал этот флаг перед следующим изменением.

promise подручными костылями :-)

как-бы уже классика - асинхронная операция возращает promise (но не тут). 

тут простые пользователи вынуждены городить огороды костылей

Поэтому асинхронные операции в MQL - ЗЛО

нет промайзов нету асинков. точка

 
Aleksandr Dziuba #:

Спасибо за ответ. 
Я интересуюсь как перехватывать флаг.

Как сделал бы я. 

В MQLRequest запихал бы флаг ORDER_STATE_REQUEST_MODIFY.
Затем в OntradeTransaction проверял бы что транзакция закончилась.
И сбрасывал этот флаг перед следующим изменением.

2024.03.06 19:31:10.387 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_REQUEST_MODIFY 0
2024.03.06 19:31:10.390 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_PLACED 0
2024.03.06 19:31:10.771 BAS_v.1.20 (GLH4,M1) OnTradeTransactionORDER_STATE_PLACED 0

Вот как выглядят сигналы транзакции. Почему интересно два раза Placed?

Выводите в лог всю информацию о событиях (из структур) - тогда будет понятно, что произошло.

 
Maxim Kuznetsov #:

promise подручными костылями :-)

как-бы уже классика - асинхронная операция возращает promise (но не тут). 

тут простые пользователи вынуждены городить огороды костылей

Поэтому асинхронные операции в MQL - ЗЛО

нет промайзов нету асинков. точка

Тут асинхронка другая. Это не асинхронка на процессоре. Это передача запроса без ожидания возврата. Наверное с терминологией (классической) и путаница. 
В данной теме обсуждаем как получить флаги того что ордер изменил статус. 

 
fxsaber #:

Если не заморачиваться совсем, то можно заранее выставлять отложку далеко от текущей цены через OrderSend, а модицифировать ее уровень через OrderSendAsync. Тогда никаких обработчиков даже писать не надо.

Так и делаю.

Кто-нибудь еще так торгует?

 
Aleksandr Dziuba #:

Тут асинхронка другая. Это не асинхронка на процессоре. Это передача запроса без ожидания возврата. Наверное с терминологией (классической) и путаница. 
В данной теме обсуждаем как получить флаги того что ордер изменил статус. 

асинхронная операция (даже параллельная и удалённая) возвращает promise сиречь "надежду на исход". Который можно проверить на завершено/нет, и в итоге получить результат. Даже отменить

что возвращает OrderSendAsync ? 

некий bool - как признак что операция вообще принята

и мёртвую структуру MqlTradeResult по ссылке, с которой ничего сделать нельзя. 

Поэтому async - не в моде. 

 
fxsaber #:

Кто-нибудь еще так торгует?


да, практикую такой способ