Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня это реализовано именно так, только через функции.
понял. в вашем коде аналогично как и у МК - между OrderCheck и OrderSend есть прослойка обработки ошибки юзером.
У меня это реализовано именно так, только через функции.
OrderCheck неявно и обязательно проверяется внутри OrderSend.
Так что при неправильном заполнении ордера сразу же вернется ответ без отсылки на сервер.
Смотрим что по этому поводу сообщает справочник:
Первое выделение: видим, что функция предназначена для совершения торговых операций и ни слова о проверках.
Ну если я говорю, что проверки есть, значит это правда.
Ни одна заявка не выходит за пределы терминала без жестких проверок.
Второе выделение: видим, что проверки осуществляются на сервере и для проверки запроса перед отправкой на сервер разработчики рекомендуют воспользоваться функцией OrderCheck(). И опять ни слова о том, что функция OrderSend() осуществляет какую-либо проверку.
Специально рекомендуем, чтобы трейдеры имели возможность предварительно точно узнать - правильно ли заполнен ордер и принять соответствующие меры.
Кто хочет - может предварительно провериться. Кто не хочет, за него все равно мы проверим и вернем аналогичные ответы.
Единственное место, где упоминается о проверке до отправке запроса - "В случае успешной базовой проверки структур (проверка указателей) ....". Но проверка указателей и проверка значений полей структуры запроса на ошибки это не одно и тоже. Да и рекомендация разработчиков об использовании функции OrderCheck() является косвенным доказательством того, что реальной проверки на ошибки перед отправкой запроса на сервер OrderSend() не осуществляет. Иначе зачем же делать "масло маслянное": сначала OrderSend() осуществляет проверку, а затем еще раз такую же проверку нужно провести при помощи OrderCheck()?
Так что из справочника следует однозначный ответ, что проверка осуществляется исключительно на сервере!
Никто не пропустит ошибочный или чрезмерный поток заявок на сервер.
Чтобы это понять, достаточно базовой логики. А документацию расширим.
нет её у вас. все ошибки обрабатываются бизнес логикой.
У меня есть. Бизнес логикой обрабатываются события, относящиеся к бизнес-логике(например, неудача выставление ордера), а вот все остальные(например, задержка ответа сервера) - универсальным шаблоном, на основе которого можно реализовать абсолютно любой эксперт.
Но МТ5 в разы сложнее по обработке кодов возвратов + асинхронность.
Вот об этом и речь, как я ранее аналогично писал, а информации по этому вопросу - ноль. И МК уже который год стараются всячески отмежеваться от ее предоставления. Об этом я и написал - дилерам выгоден продукт, где есть моменты, приводящие к сливу, т.е. для MQ это фактор увеличения продаж. Увы, мы на рынке где конкуренты(мы и MQ), а не товарищи.
Вы просите невозможного от обвертки. Стандартная библиотека - это не бизнес логика. Это обвертка "над" функциями терминал. Обвертка над начинкой конфеты.
Тогда смысла в таком структурном оформлении немного.
Как и функция Print не может гарантировать свободное место на диске. И ошибок записи в лог. Для этого надо использовать обработку ошибок другими функциями и они конкретны для случаев.
Не может гарантировать всего даже правильная обертка, но может многое, относящееся к смежным функциям.
Уже писали про конкретное неоднократно. Если MQ не в силах предоставить готовое решение, пусть хотя бы руководство по обработке ошибок и кодов возврата сделают. Отпираются всеми возможными способами. В документации на четверку это частично присутствовало(например, подождать 30 сек в таком-то случае), частично пользователи определили из опыта обработку недокументированных ситуаций. Для 5-ки вообще ничего нет. А раз так - то использовать ее никто не будет.
Ну а если MQ так отвечают потому, что просто созданная инфраструктура торговли в принципе не позволяет этого сделать, то что тут сказать - это полный провал всего проекта MT5, учитывая, что и других косяков неимоверная масса.
Если хотите, можно пройтись по каждому коду возврата и рассмотреть основные возможные ситуации.
Я бы с удовольствием занялся этим с таким опытным в MQL5 человеком как вы, подождем по наличию времени и необходимости. Слава богу, пока есть еще 4-ка, которая гораздо удобнее во многих планах.
-Alexey-:
готовое решение, пусть хотя бы руководство по обработке ошибок и кодов возврата
какой код вызывает вопросы по обработке?
Код
Идентификатор
Описание
10004
TRADE_RETCODE_REQUOTE
Реквота
10006
TRADE_RETCODE_REJECT
Запрос отвергнут
10007
TRADE_RETCODE_CANCEL
Запрос отменен трейдером
10008
TRADE_RETCODE_PLACED
Ордер размещен
10009
TRADE_RETCODE_DONE
Заявка выполнена
10010
TRADE_RETCODE_DONE_PARTIAL
Заявка выполнена частично
10011
TRADE_RETCODE_ERROR
Ошибка обработки запроса
10012
TRADE_RETCODE_TIMEOUT
Запрос отменен по истечению времени
10013
TRADE_RETCODE_INVALID
Неправильный запрос
10014
TRADE_RETCODE_INVALID_VOLUME
Неправильный объем в запросе
10015
TRADE_RETCODE_INVALID_PRICE
Неправильная цена в запросе
10016
TRADE_RETCODE_INVALID_STOPS
Неправильные стопы в запросе
10017
TRADE_RETCODE_TRADE_DISABLED
Торговля запрещена
10018
TRADE_RETCODE_MARKET_CLOSED
Рынок закрыт
10019
TRADE_RETCODE_NO_MONEY
Нет достаточных денежных средств для выполнения запроса
10020
TRADE_RETCODE_PRICE_CHANGED
Цены изменились
10021
TRADE_RETCODE_PRICE_OFF
Отсутствуют котировки для обработки запроса
10022
TRADE_RETCODE_INVALID_EXPIRATION
Неверная дата истечения ордера в запросе
10023
TRADE_RETCODE_ORDER_CHANGED
Состояние ордера изменилось
10024
TRADE_RETCODE_TOO_MANY_REQUESTS
Слишком частые запросы
10025
TRADE_RETCODE_NO_CHANGES
В запросе нет изменений
10026
TRADE_RETCODE_SERVER_DISABLES_AT
Автотрейдинг запрещен сервером
10027
TRADE_RETCODE_CLIENT_DISABLES_AT
Автотрейдинг запрещен клиентским терминалом
10028
TRADE_RETCODE_LOCKED
Запрос заблокирован для обработки
10029
TRADE_RETCODE_FROZEN
Ордер или позиция заморожены
10030
TRADE_RETCODE_INVALID_FILL
Указан неподдерживаемый тип исполнения ордера по остатку
10031
TRADE_RETCODE_CONNECTION
Нет соединения с торговым сервером
10032
TRADE_RETCODE_ONLY_REAL
Операция разрешена только для реальных счетов
10033
TRADE_RETCODE_LIMIT_ORDERS
Достигнут лимит на количество отложенных ордеров
10034
TRADE_RETCODE_LIMIT_VOLUME
Достигнут лимит на объем ордеров и позиций для данного символа
Например 10004. Где написано, что делать? А в четверочной документации было хоть что-то:
Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
какой код вызывает вопросы по обработке?
10006 (по какой причине отвергнут, какие еще могут быть причины не указанные в других кодах?)
10011, 10013, 10028
10006 (по какой причине отвергнут, какие еще могут быть причины не указанные в других кодах?)
10011, 10013, 10028
Коллеги, уже задолбался искать правду. Тема похожа на то что мне нужно, поэтому пишу сюда, прошу о помощи!
Выставляю ордер с немедленным исполнением, пока он висит каждый тик проверяю цену и если есть возможность трейлю ее. Но почему-то всегда возвращается ошибка 10013. Облазил все возможные форумы и добавил почти все строчки из начального ордера (хотя в описании написано что достаточно только символа, действия и sl и tp, для данного типа действия. Ничего не помогает! Вот код.