Снятия заявки перед началом торгов

Страницы: 1
RSS
Снятия заявки перед началом торгов
 
Здравствуйте!
У меня такой вопрос: в торговую систему через API асинхронно подается транзакция снятия заявки на FORTS в следующем формате:

TransactionStringKill:= 'CLASSCODE=' + CodeOfClass + '; SECCODE=' +

Contract + '; ACTION=KILL_ORDER; ACCOUNT=' + ExchangeAccount + ';

TRANS_ID=' + TransID + '; ORDER_KEY=' + OrderKey + ';

BASE_CONTRACT=' + BaseContract + ';';

Вообщем, если идут торги, все прекрасно работает, заявка снимается.
Необходимо снять выставленную с вечера предыдущего дня заявку перед началом торгов.
И вот тут такая посылаемая транзакция на выполняется, хотя вручную из Quik заявку можно нормально снять.
Подскажите, пожалуйста, может я какой параметр пропустил или что не так?
 
Здравствуйте,
Какая возникает ошибка при неудачной попытке?
Посмотрите в меню Торговля - Таблица транзакиций
 
Никаких ошибок не возникает. Вообще не приходит никакого ответа. В Торговля-Таблица транзакций отображены только успешно снятые вручную заявки. Также успешно через API перед началом торгов были сняты все заявки с параметром транзакции KILL_ALL_FUTURES_ORDERS, это тоже есть в Торговля-Таблица транзакций. Установлена функция обратного вызова QUIK_ORDER_STATUS_CALLBACK. Туда при попытке снять отдельную заявку перед началом торгов также ничего не приходит. При снятии всех заявок пришло nStatus = 2 по каждой, то есть сработало. Полные параметры каждой отдельной активной заявки для снятия были получены через QUIK_ORDER_STATUS_CALLBACK при nMode = 1 и 2 (последняя заявка из очереди).
 
Евгений,

Ошибка должна быть. Ее не может быть только в случае если транзакция вообще не отправлялась.

Посмотрите, в переменных
pnExtendedErrorCode
и
lpstrErrorMessage

что пишется при неудачной попытке отправить транзакцию?
 
Евгений,
И еще, посмотрите что возвращает функция в Result
 
Проверка Result при выполнении TRANS2QUIK_SEND_ASYNC_TRANSACTION есть. Если бы Result не был равен TRANS2QUIK_SUCCESS, то выдавалось бы сообщение. Параметры pnExtendedErrorCode и lpstrErrorMessage программа не контролировала. Сейчас чуть допишу код, а завтра тогда перед началом торгов проконтролирую эти параметры. Но я так понимаю, что при Result = TRANS2QUIK_SUCCESS эти параметры не важны.
 
Евгений,
Если транзакция отправлена на сервер, то на ее должен быть ответ.
Ситуация при которой транзакция успешно отправляется серверу, но при этом на нее не поступает ответа не возможна.
Проверьте еще раз более внимательно, скорее всего Вы что то упустили.
Ответ должен быть. Хоть какой-нибудь но должен.
Если окажется что это не так, то скажите кто Ваш брокер и Ваш UID. Мы запросим логи со стороны сервера.
 
Хорошо, так и сделаю. Завтра проверю все еще раз, запущу программу в Debug mode, контролируя все параметры, дополнительно с выдачей сообщений обо всех параметрах. Если что не так, отпишу Вам как сказали. Дополнительно могу сказать, что QUIK_ORDER_STATUS_CALLBACK при nMode = 0 и nStatus = 2 запрашивает результат функции QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_WITHDRAW_QUIKTIME); Если результат равен нулю (а такое бывает), то QUIK_ORDER_STATUS_CALLBACK пропускает такие "сообщения".
 
Евгений,

Дополнительно, посмотрите еще TRANS2QUIK_TRANSACTIONS_REPLY_CALLBACK
 
Проблема распознана и решена. Я считаю, что это баг торговой системы либо сервера. В функции QUIK_ORDER_STATUS_CALLBACK параметр dwTransID - уникальный идентификатор транзакции "породившей" заявку. Так вот до начала торгов при первоначальном получении заявок (nMode = 1, 2) по каждой заявке выдается dwTransID = 0. То есть за ночь этот параметр "теряется". Если использовать для снятия заявки полученный ноль в TransID, то QUIK_TRANSACTION_REPLY_CALLBACK выдаст сообщение об ошибке, что указан неправильный идентификатор транзакции.
Я решил проблему так: если первоначально полученный TransID заявки равен нулю, то при формировании строки транзакции на её снятие меняем его на "не ноль" TRANS_ID=1
например. Тогда все работает, заявки снимаются. Но надо учитывать, что QUIK_ORDER_STATUS_CALLBACK при снятии заявки пришлет "сообщение" с nStatus = 2 и параметром dwTransID = 0.
Страницы: 1
Читают тему
Наверх