Добрый день.
В пятницу при работе программы столкнулся с ниже описанными проблемами. Найти аналогичные случае на форуме не получилось. Поэтому создаю новый пост, который возможно пригодится кому нибудь в будущем. Не особо надеюсь, что получится понять причину ошибок, так как до пятничного случая все работало как надо, а следовательно будет трудно добится повторяемости ошибки и ее локализации. Использую на данный момент S# версии 2.5.1 Возможно в новой версии такой ошибки уже и нет.
Описание ошибки:
- Создавалсь в S# заявка
- Заявка выставлялась в Квик
- Эта заявка в течении 6 секунд полностью удовлетворялась в Квике.
- По истечению этих 6 секунд состояние заявки в S# было State=Done, но при этом Balance был равен Volume. Так же странно что время Time завки было равно «0001-01-01 00:00:00.0000000»
- Помимо этого, есть подозрения, что не по всем заявкам пришло событие OrdersChanged.
К сожалению, есть вероятность того, что я в понимании и описании ошибки ошибаюсь, так как последовательность событий восстанавливал из логоф.
Если будет новая информация по данной ошибке, напишу в этот пост.
Возможно кто либо сталкивался с такой ситуацией? Если да, буду рад почитать комментарии.
Kommentare (5)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
У меня на версии S#2.6.2 + Квик 5.17 такой глюк:
выставляю заявку на фьюч с ценой заведомо неисполнимой в данный момент): Volume = 1, ExecutionCondition = OrderExecutionConditions.CancelBalance
Затем проверяю условие order.IsFilledEmpty() - возвращает true, но при этом заявка остается висеть в Квике активной, хотя должна сняться.
Экспортирую только таблицу инструментов и деривативов.
Возможно это связанно с ошибкой, описанной автором темы...
А почему должна сняться?
Ну она же выставлена с условием OrderExecutionConditions.CancelBalance. Поскольку заявка кидается глубоко в рынок, то она сразу не исполняется => по условию остаток (т.е. весь Volume) должен сняться. Или я не правильно его понял?
Если я подобную заявку выставляю в Квике руками с уловием "Снять остаток" она сразу снимается...
Я разобрался где ошибка в S# путем распечатки TransactionBuilder'a. Почему-то не передается это условие вообще.
ACCOUNT=ххххх; CLIENT_CODE=ххххх; TRANS_ID=38282260; CLASSCODE=SPBFUT; SECCODE=RTS-3.11; QUANTITY=10; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=192025;
Если добавить такой код
this.Trader.FormatTransaction += builder => builder.SetExecutionCondition(OrderExecutionConditions.CancelBalance);
то все работает:
ACCOUNT=ххххх; CLIENT_CODE=ххххх; TRANS_ID=37836414; CLASSCODE=SPBFUT; SECCODE=RTS-3.11; QUANTITY=10; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=192140; EXECUTION_CONDITION=KILL_BALANCE;
Не поверил, залез в код, смотрю, есть строчка:
Понимаю, что без комментариев тут не обойтись (а раз на условии нет комментария или ссылки, значит это писалось очень давно, сейчас везде сноска). Начал искать, нашел вот это http://www.quik.ru/forum/import/54311/54311/. Видимо, потому и сам так написал... Переделаю.