Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спрашивайте здесь, что будет не понятно...
К сожалению вопрос остаётся открытым =(
Проверяю догадку так:
1) OrderSend в result сообщила TRADE_RETCODE_PLACED
2) После этого выделяю ордер по тикету и OrderGetInteger(ORDER_STATE,state) сообщила в state ORDER_STATE_REQUEST_ADD.
Из документации это значит:
"Ордер в состоянии регистрации (выставление в торговую систему)"
Как переводится эта фраза на язык биржевого исполнения для ФОРТС?
Это проблема задержки синхронизации статусов и реального состояния дел?
Или это факт? То есть после TRADE_RETCODE_PLACED ордер нифига не на бирже в очереди?
Надо бы проверить однозначно, но сейчас у меня нет возможности.
Можно проверить последовательность возврата кода TRADE_RETCODE_PLACED с тикетом ордера и момент регистрации биржевого ID у заявки в очереди.
1) отправляю ордер или удаляю его
2) момент неопределённости (нельзя считать, что ордера нет, нельзя считать, что ордер есть)
3) ордер размещён на бирже(удалён с биржи), либо "ордер/запрос отклонён из-за..."
Весь вопрос в том, когда наступает состояние (2)?
Если внутри функции OrderSend() до возврата из неё, то (2) - не наши проблемы.
Если возврат из OrderSend() происходит когда ещё длится момент неопределённости, то это уже серьёзные проблемы для нас.
Постараюсь описать ситуацию предельно коротко:
1) отправляю ордер или удаляю его
2) момент неопределённости (нельзя считать, что ордера нет, нельзя считать, что ордер есть)
3) ордер размещён на бирже(удалён с биржи), либо "ордер/запрос отклонён из-за..."
Весь вопрос в том, когда наступает состояние (2)?
Если внутри функции OrderSend() до возврата из неё, то (2) - не наши проблемы.
Если возврат из OrderSend() происходит когда ещё длится момент неопределённости, то это уже серьёзные проблемы для нас.
Когда функция OrderSEnd вернула значение а TRADE_RETCODE_PLACED
Это означает,что ордер выставлен на биржу и мы можем получить его билет.
Когда функция OrderSEnd вернула значение а TRADE_RETCODE_PLACED
Это означает,что ордер выставлен на биржу и мы можем получить его билет.
Спасибо! Для меня это очень важно. Просто у меня сейчас в коде ошибки типа таких:
Лимит установлен > позиция открывается > новый лимит (частичного тейк профита) установлен > позиция мгновенно закрылась (на стоп вынесли быстрым рынком - отрабатывают такой редкий сценарий).
Так вот, почему-то в моём коде, на запрос "отменить частичный тейк профит сразу после установки" от сервера время от времени приходит реткод 100013.
Стал разбираться и выяснил, что вообще не могу удалять ордера мгновенно. Надо ждать после выставления.
Стал проверять статус и тут бах! Статус ордера говорит о том, что он ещё не на бирже =/
Спасибо ещё раз. Буду считать, что этот факт установлен наверняка.
Ошибку буду искать у себя в рассуждениях.
Спасибо! Для меня это очень важно. Просто у меня сейчас в коде ошибки типа таких:
Лимит установлен > позиция открывается > новый лимит (частичного тейк профита) установлен > позиция мгновенно закрылась (на стоп вынесли быстрым рынком - отрабатывают такой редкий сценарий).
Так вот, почему-то в моём коде, на запрос "отменить частичный тейк профит сразу после установки" от сервера время от времени приходит реткод 100013.
Стал разбираться и выяснил, что вообще не могу удалять ордера мгновенно. Надо ждать после выставления.
Стал проверять статус и тут бах! Статус ордера говорит о том, что он ещё не на бирже =/
Спасибо ещё раз. Буду считать, что этот факт установлен наверняка.
Ошибку буду искать у себя в рассуждениях.
Всё очень просто.
OrderSend() - синхронная команда - отправили ордер и пока не получили ответ, то и делать ничего не надо.
В промежутке между запросом и ответом ничего опрашивать не нужно (не имеет никакого смысла).
Всё очень просто.
OrderSend() - синхронная команда - отправили ордер и пока не получили ответ, то и делать ничего не надо.
В промежутке между запросом и ответом ничего опрашивать не нужно (не имеет никакого смысла).
Если бы так просто! =(
Михаил, помогите, пожалуйста, понять, почему мой тестовый эксперт не работает на RTS во время активного рынка... Точнее эксперт-то работает, а вот ордера удаляются через раз.
Когда статус ордера ORDER_STATE_PLACED - ордер удаляется, а вот когда статус ORDER_STATE_STARTED или ORDER_STATE_REQUEST_ADD - ордер 100% всегда не удаляется.
Почему такая фигня происходит?
Вопрос к разработчикам: неужели нельзя отправлять самый критически важный торговый запрос без сложного и крайне ненадёжного опроса сервера о статусе ордера?
Или вы считаете, что это нормально, когда сервер возвращает мне TRADE_RETCODE_INVALID (Неправильный запрос) на вполне адекватный код с просьбой удалить 100% существующий и действующий лимитный ордер?
Вот код эсперта для фьючерса на RTS:
Приоритеты в коде:
1) сделать код таким, чтобы не бомбить сервер заранее "дохлыми" запросами, когда уже понятно, что сервер вернёт 10013.
2) сделать код таким, чтобы запрос на удаление ордера наверняка отправлялся (то есть предельно упростить все проверки перед OrderSend())
3) сделать код таким, чтобы ордер удалялся как можно быстрее (в рамках возможностей OrderSend()), то есть не пропускать лишние тики в ожидании статуса.
ЗЫ Кто из разработчиков отвечает за ФОРТС?
Если бы так просто! =(
Михаил, помогите, пожалуйста, понять, почему мой тестовый эксперт не работает на RTS во время активного рынка... Точнее эксперт-то работает, а вот ордера удаляются через раз.
Когда статус ордера ORDER_STATE_PLACED - ордер удаляется, а вот когда статус ORDER_STATE_STARTED или ORDER_STATE_REQUEST_ADD - ордер 100% всегда не удаляется.
Почему такая фигня происходит?
Вопрос к разработчикам: неужели нельзя отправлять самый критически важный торговый запрос без сложного и крайне ненадёжного опроса сервера о статусе ордера?
Или вы считаете, что это нормально, когда сервер возвращает мне TRADE_RETCODE_INVALID (Неправильный запрос) на вполне адекватный код с просьбой удалить 100% существующий и действующий лимитный ордер?
Вот код эсперта для фьючерса на RTS:
Приоритеты в коде:
1) сделать код таким, чтобы не бомбить сервер заранее "дохлыми" запросами, когда уже понятно, что сервер вернёт 10013.
2) сделать код таким, чтобы запрос на удаление ордера наверняка отправлялся (то есть предельно упростить все проверки перед OrderSend())
3) сделать код таким, чтобы ордер удалялся как можно быстрее (в рамках возможностей OrderSend()), то есть не пропускать лишние тики в ожидании статуса.
ЗЫ Кто из разработчиков отвечает за ФОРТС?
Разработчики тут не причём.
Советую Вам почитать о приложениях КЛИЕНТ-СЕРВЕР.
У Вас не правильная логика советника.
Вот так будет работать:
Разработчики тут не причём.
Советую Вам почитать о приложениях КЛИЕНТ-СЕРВЕР.
У Вас не правильная логика советника.
Вот так будет точно работать:
неа. Не работает =(
(я тоже слегка исправил код выше, но суть не менял, только каменты)
Про КЛИЕНТ-СЕРВЕР... Естественно мой рабочий движок для лимитных ордеров обрабатывает события OnTrade, а логику совершения торговых действий я выстраиваю совсем не так.
Здесь я предельно упростил код, чтобы показать сам факт того, что ордер "не совсем чтобы на бирже" после OrderSend() или если он на бирже, то "не совсем чтобы всегда доступен для удаления".
И даже когда ордер выделяется - не всегда он удаляется!
ЗЫ только что проверял на демо счёте.
неа. Не работает =(
(я тоже слегка исправил код выше, но суть не менял, только каменты)
Про КЛИЕНТ-СЕРВЕР... Естественно мой рабочий движок для лимитных ордеров обрабатывает события OnTrade, а логику совершения торговых действий я выстраиваю совсем не так.
Здесь я предельно упростил код, чтобы показать сам факт того, что ордер "не совсем чтобы на бирже" после OrderSend() или если он на бирже, то "не совсем чтобы всегда доступен для удаления".
И даже когда ордер выделяется - не всегда он удаляется!
ЗЫ только что проверял на демо счёте.
Я тоже только что проверил - всё работает! (У Вас демо в Открывашке или БКС ?)
Я тоже только что проверил - всё работает!
Ну как это работает? Запустил Ваш код.
Множество раз сообщает подобный бред:
Кроме того... Хотите удивлю Вас?
1) То что OrderSelect() выделяет ордер, вовсе не означает, что ордер действующий =). Часто ордер ещё ~ секунду после исполнения выделяется, а уже потом переходит в список истории.
2) А может быть и так, что ордер 100% существует (даже действующий, или выполняется сейчас, или ещё что-то с ним). При этом он вообще ничем не выделяется! Ни OrderSelect(), ни HistoryOrderSelect()! И это происходит довольно часто!
3) Правильно обрабатывать возврат из OrderSelect() надо так как я показал внутри PrintOrderState().
Вот такая вот фигня =(