
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Отличаются ли поля которые требуется заполнить при
SYMBOL_TRADE_EXECUTION_EXCHANGE
Биржевое исполнение
от полей при
SYMBOL_TRADE_EXECUTION_MARKET
Исполнение ордеров по рынку
???
в справке есть пример лишь для маркет
Market Execution
Торговый ордер на открытие позиции в режиме Market Execution (режим исполнения торговых приказов по рынку). Требуется указание 5 полей:
Можно также задать значения полей magic и comment.
Прочитал документацию, поискал в форуме... совсем запутался. Пожалуйста, если не затруднит, объясните в N+1 раз.
1. Отправляю торговый запрос с помощью OrderSend. Данная функция возвращает true.
2. Анализируем retcode (MqlTradeResult). Переменная имеет значение TRADE_RETCODE_DONE.
Эта ситуация гарантирует фактическое исполнение ордера на сервере? Или же ещё требуется выполнять какие-либо проверки в OnTrade, OnTradeTransaction? Тогда на кой ляд анализировать retcode, если от него никакого проку?
Т.е. потребность в OnTrade, OnTradeTransaction при использовании OrderSendAsync() мне понятна.
Нужны ли они при использовании функции OrderSend()? Дожидается ли она безусловно исполнения/отклонения ордера на сервере перед передачей исполнения последующего кода эксперта?
...
Нужны ли они при использовании OrderSend()? Дожидается ли она безусловно исполнения/отклонения ордера на сервере перед передачей исполнения последующего кода эксперта?
Если не ошибаюсь, OrderSend не ждет выполнения приказа, а только сообщает что приказ был верным и отправлен в очередь на сервер.
В случае успешной базовой проверки структур (проверка указателей) возвращается true - это не свидетельствует об успешном выполнении торговой операции. Для получения более подробного описания результата выполнения функции следует анализировать поля структуры result.
2. Анализируем retcode (MqlTradeResult). Переменная имеет значение TRADE_RETCODE_DONE.
Эта ситуация гарантирует фактическое исполнение ордера на сервере?
Если не ошибаюсь, OrderSend не ждет выполнения приказа, а только сообщает что приказ был верным и отправлен в очередь на сервер.
В таком случае, одного лишь "true" было бы достаточно. Но разработчики предусмотрели retcode, в котором по замыслу должен хранится "Код возврата торгового сервера".
Т.е. после того как отработает функция OrderSend(), второй строкой кода эксперта я вижу TRADE_RETCODE_DONE, третьей строкой кода пытаюсь, например, изменить только что открытую позицию (которая, по логике, должна существовать). Однако, PositionSelect возвращает false. Итерация повторяется. В итоге ошибочна открыта позиция в двойном объёме.
Как застраховать себя от подобной ситуации?
1. Руководствоваться только retcode и "забить" на OnTrade?
2. Руководствоваться только OnTrade и "забить" на retcode?
retcode может вернуть не только RETCODE_DONE :) Но если торговый сервер возвращает именно TRADE_RETCODE_DONE (Заявка выполнена), то зачем ещё что-либо проверять? По-моему скромному мнению, в данной ситуации функции OnTrade, OnTradeTransaction будут просто дублировать retcode.
Судя по перечню "Кодов возврата торгового сервера", в режиме исполнения запросов по рынку возможна только одна неопределённость: TRADE_RETCODE_LOCKED. И здесь, пожалуй, без OnTrade не обойтись.
Позвольте поинтересоваться, какую связку лично Вы используете?
Позвольте поинтересоваться, какую связку лично Вы используете?
Как застраховать себя от подобной ситуации?
1. Руководствоваться только retcode и "забить" на OnTrade?
2. Руководствоваться только OnTrade и "забить" на retcode?
Надежнее всего руководствоваться OnTrade-ом, но можно и без него - анализируйте совершенную сделку (ResultDeal()).
Скоро будет статья именно на эту тему.