Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как сделал бы я.
В MQLRequest запихал бы флаг ORDER_STATE_REQUEST_MODIFY.
Затем в OntradeTransaction проверял бы что транзакция закончилась.
И сбрасывал этот флаг перед следующим изменением.
Вот как выглядят сигналы транзакции. Почему интересно два раза Placed?
Лучше реализовывать не через TRADE_RETCODE_PLACED, а через TRADE_RETCODE_DONE. PLACED может отмениться.
По крайней мере для MOEX у меня реализовано так.
Лучше реализовывать не через TRADE_RETCODE_PLACED, а через TRADE_RETCODE_DONE. PLACED может отмениться.
По крайней мере для MOEX у меня реализовано так.
Благодарю. Так лучше получается. (надежнее)
Лучше реализовывать не через TRADE_RETCODE_PLACED, а через TRADE_RETCODE_DONE. PLACED может отмениться.
По крайней мере для MOEX у меня реализовано так.
По протоколу смотрю в Retcode. Не всегда передает request_id.
По каким параметрам Вы сравниваете что это именно Ваш запрос выдал TRADE_RETCODE_DONE?
По протоколу смотрю в Retcode. Не всегда передает request_id.
По каким параметрам Вы сравниваете что это именно Ваш запрос выдал TRADE_RETCODE_DONE?
Это моя ошибка. В общем. На каждую транзакцию свое событие. На MqlTradeTransaction свое. На MqlTradeResult свое.
А я считал что это комплексное распределение. И проверял только через MqlTradeTransaction.
Поэтому в данный моменте номер транзакции не передавался. Если каждое событие обрабатывать индивидуально то все работает.
По протоколу смотрю в Retcode. Не всегда передает request_id.
По каким параметрам Вы сравниваете что это именно Ваш запрос выдал TRADE_RETCODE_DONE?
Нет. Все таки при отсылке ордера на модификацию при получении кода 10009 (TRADE_RETCODE_DONE) request_id поставляется как 0. Логику не могу понять.
Но наверное это говорит что если ноль то с ордером можно что то дальше делать.
Всем привет. Поделитесь пожалуйста порядком и методами как Вы работаете с флагами при обработке асинхронного запроса.
Как проверяете к примеру что ордер на модификацию в работ, отправлен и закончен?
Лучше стандартными функциями.
А то я совсем запутался. Вводить свои флаги или нет.
Спасибо.
Может быть это поможет
https://www.mql5.com/ru/blogs/post/557544
Может быть это поможет
https://www.mql5.com/ru/blogs/post/557544Благодао
Может быть это поможет
https://www.mql5.com/ru/blogs/post/557544
Благодарю. Это вне транзакции реализовано. Здесь вопрос стоял обработка именно транзакции. И как получилось что по возврату кода TRADE_RETCODE_DONE не всегда возвращается request_id. А если есть request_id то нет ордера в структуре.
Вот так проверяю что изменение ордера системой отработано.
заполняю структуры при изменении лимитных ордеров.
И обработка ордера в самой транзакции.
Может конечно сумбурно. Но работает.
По протоколу смотрю в Retcode. Не всегда передает request_id.
По каким параметрам Вы сравниваете что это именно Ваш запрос выдал TRADE_RETCODE_DONE?
В вашем логе не выведен тип транзакции. Поле request_id заполняется только для TRADE_TRANSACTION_REQUEST.
Понятно, что инфы много (в документации или книге), но иначе технологию не освоить.
Не нужен этот request_id. Подтверждение операции передается в структуре транзакции (MqlTradeTransaction), а не в структуре результата (MqlTradeResult).
Сначала проверяете тип транзакции (trans.type). Как только находите TRADE_TRANSACTION_REQUEST - проверяете действие запроса request.action. Находите TRADE_ACTION_MODIFY (для модификации) - смотрите структуру результата (result.retcode). Если retcode == TRADE_RETCODE_DONE - операция завершена успешно. Как-то так.
Это алгоритм работы именно с ордерами на MOEX. С позициями, возможно, как-то иначе.