← Zurück

Не изменяется Balance при совершении сделок.

Добрый день.

В пятницу при работе программы столкнулся с ниже описанными проблемами. Найти аналогичные случае на форуме не получилось. Поэтому создаю новый пост, который возможно пригодится кому нибудь в будущем. Не особо надеюсь, что получится понять причину ошибок, так как до пятничного случая все работало как надо, а следовательно будет трудно добится повторяемости ошибки и ее локализации. Использую на данный момент S# версии 2.5.1 Возможно в новой версии такой ошибки уже и нет.

Описание ошибки:

  1. Создавалсь в S# заявка
  2. Заявка выставлялась в Квик
  3. Эта заявка в течении 6 секунд полностью удовлетворялась в Квике.
  4. По истечению этих 6 секунд состояние заявки в S# было State=Done, но при этом Balance был равен Volume. Так же странно что время Time завки было равно «0001-01-01 00:00:00.0000000»
  5. Помимо этого, есть подозрения, что не по всем заявкам пришло событие OrdersChanged.

К сожалению, есть вероятность того, что я в понимании и описании ошибки ошибаюсь, так как последовательность событий восстанавливал из логоф.

Если будет новая информация по данной ошибке, напишу в этот пост.

Возможно кто либо сталкивался с такой ситуацией? Если да, буду рад почитать комментарии.

War dieses Thema hilfreich?

Thema teilen

Kommentare (5)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Den
Den

Maxim: Добрый день.

В пятницу при работе программы столкнулся с ниже описанными проблемами. Найти аналогичные случае на форуме не получилось. Поэтому создаю новый пост, который возможно пригодится кому нибудь в будущем. Не особо надеюсь, что получится понять причину ошибок, так как до пятничного случая все работало как надо, а следовательно будет трудно добится повторяемости ошибки и ее локализации. Использую на данный момент S# версии 2.5.1 Возможно в новой версии такой ошибки уже и нет.

Описание ошибки:

  1. Создавалсь в S# заявка
  2. Заявка выставлялась в Квик
  3. Эта заявка в течении 6 секунд полностью удовлетворялась в Квике.
  4. По истечению этих 6 секунд состояние заявки в S# было State=Done, но при этом Balance был равен Volume. Так же странно что время Time завки было равно «0001-01-01 00:00:00.0000000»
  5. Помимо этого, есть подозрения, что не по всем заявкам пришло событие OrdersChanged.

К сожалению, есть вероятность того, что я в понимании и описании ошибки ошибаюсь, так как последовательность событий восстанавливал из логоф.

Если будет новая информация по данной ошибке, напишу в этот пост.

Возможно кто либо сталкивался с такой ситуацией? Если да, буду рад почитать комментарии.

У меня на версии S#2.6.2 + Квик 5.17 такой глюк:

выставляю заявку на фьюч с ценой заведомо неисполнимой в данный момент): Volume = 1, ExecutionCondition = OrderExecutionConditions.CancelBalance

Затем проверяю условие order.IsFilledEmpty() - возвращает true, но при этом заявка остается висеть в Квике активной, хотя должна сняться.

Экспортирую только таблицу инструментов и деривативов.

Возможно это связанно с ошибкой, описанной автором темы...

Mikhail Sukhov
Mikhail Sukhov

Den: но при этом заявка остается висеть в Квике активной, хотя должна сняться.

А почему должна сняться?

Den
Den

Mikhail Sukhov:

Den: но при этом заявка остается висеть в Квике активной, хотя должна сняться.

А почему должна сняться?

Ну она же выставлена с условием OrderExecutionConditions.CancelBalance. Поскольку заявка кидается глубоко в рынок, то она сразу не исполняется => по условию остаток (т.е. весь Volume) должен сняться. Или я не правильно его понял?

Если я подобную заявку выставляю в Квике руками с уловием "Снять остаток" она сразу снимается...

Den
Den

Den:

Mikhail Sukhov:

Den: но при этом заявка остается висеть в Квике активной, хотя должна сняться.

А почему должна сняться?

Ну она же выставлена с условием 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;

Mikhail Sukhov
Mikhail Sukhov

Den: Я разобрался где ошибка в 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;

Не поверил, залез в код, смотрю, есть строчка:

if (order.Security.Type != SecurityTypes.Future)
	builder.SetExecutionCondition(order.ExecutionCondition);

Понимаю, что без комментариев тут не обойтись (а раз на условии нет комментария или ссылки, значит это писалось очень давно, сейчас везде сноска). Начал искать, нашел вот это http://www.quik.ru/forum/import/54311/54311/. Видимо, потому и сам так написал... Переделаю.