Изменение Order.Balance после того, как заявка получила OrderStates == Done

Изменение Order.Balance после того, как заявка получила OrderStates == Done
Atom
24.01.2011
Maxim


Михаил, добрый день.
Обращаюсь по привычке к Вам, так как не в курсе, поддерживает ли S# еще кто либо.
Если я ошибаюсь, поправьте меня.

Михаил, прошу помочь разобраться в следующем.
Ситуация:
1) Проверяю состояние заявки.
2) Если состояние заявки Active, отменяю асинхронно заявку.
3) Дожидаюсь события OrdersChanged, когда заявка станет Done.
4) Проверяю Balance, он равен Volume.
5) Проверяю в Квике состояние заявки, заявка оказывается полностью удовлетворена.
То-есть Balance должен был быть равен нулю в пункте 4.

Если между пунктом 3 и 4 сделать пауза в 1 секунду, то Balance будет равен нулю.


Из этого я могу предположить, что Balance может изменится после того, как заявка приобрела статус Done.
Хотя в мануале написано:
«Done - заявка более не активна на бирже, и по ней не может прийти ни одно изменение.»

Так ли это? Сталкивались ли Вы с этим?

Теги:


Спасибо:


< 1 2 3 4 5  >
Maxim

Фотография
Дата: 25.04.2011
Ответить


1. QuikTrader.IsAyncMode = true
2. Заявки регистрируются, а потом снимаются.
3. Настроил логирование, но как теперь выяснилось, оно работало не совсем коректно.
В частности, нет информации по PreProcessDdeData и в OrdersChanged нет времени.
Оставлю пока информацию, которую собрал. Переделаю логирование и соберу более полную информацию.

Безрезультатно пытаюсь повторить эту ошибку в тестовом Квике.
Михаил, а может эта ошибка быть вызвана некоректным поведением брокерского сервера?

Первая заявка:
Цитата:

NewOrders

InitDate 2011-04-25 18:36:44.4077500
Date 0001-01-01 00:00:00.0000000
CancelDate NULL
Price 101.72
Volume 2927
Balance 2927
Id 1973988474
TransactionId 66671920
Direction S
StockName SBER03
State Active
Status Accepted
ExecutionCondition PutInQueue
Type Limit


OrdersChanged

TransactionId: 66671920 Balance: 1992 Volume: 2927 State: Active
TransactionId: 66671920 Balance: 1992 Volume: 2927 State: Active
TransactionId: 66671920 Balance: 782 Volume: 2927 State: Active
TransactionId: 66671920 Balance: 782 Volume: 2927 State: Active
TransactionId: 66671920 Balance: 782 Volume: 2927 State: Done
TransactionId: 66671920 Balance: 742 Volume: 2927 State: Done
TransactionId: 66671920 Balance: 732 Volume: 2927 State: Done



Вторая заявка:
Цитата:

NewOrders

InitDate 2011-04-25 18:37:22.2358750
Date 0001-01-01 00:00:00.0000000
CancelDate NULL
Price 101.66
Volume 7884
Balance 7884
Id 1973994793
TransactionId 66671954
Direction S
StockName SBER03
State Active
Status Accepted
ExecutionCondition PutInQueue
Type Limit


OrdersChanged


Line 232: OrdersChanged TransactionId: 66671954 Balance: 7874 Volume: 7884 State: Active
Line 233: OrdersChanged TransactionId: 66671954 Balance: 7874 Volume: 7884 State: Active
Line 235: OrdersChanged TransactionId: 66671954 Balance: 7874 Volume: 7884 State: Active
Line 237: OrdersChanged TransactionId: 66671954 Balance: 7374 Volume: 7884 State: Active
Line 238: OrdersChanged TransactionId: 66671954 Balance: 7294 Volume: 7884 State: Active
Line 239: OrdersChanged TransactionId: 66671954 Balance: 7294 Volume: 7884 State: Active
Line 240: OrdersChanged TransactionId: 66671954 Balance: 7264 Volume: 7884 State: Active
Line 241: OrdersChanged TransactionId: 66671954 Balance: 7164 Volume: 7884 State: Active
Line 242: OrdersChanged TransactionId: 66671954 Balance: 7164 Volume: 7884 State: Active
Line 243: OrdersChanged TransactionId: 66671954 Balance: 7064 Volume: 7884 State: Active
Line 244: OrdersChanged TransactionId: 66671954 Balance: 6994 Volume: 7884 State: Active
Line 245: OrdersChanged TransactionId: 66671954 Balance: 6994 Volume: 7884 State: Active
Line 246: OrdersChanged TransactionId: 66671954 Balance: 6994 Volume: 7884 State: Active
Line 247: OrdersChanged TransactionId: 66671954 Balance: 6864 Volume: 7884 State: Active
Line 248: OrdersChanged TransactionId: 66671954 Balance: 6764 Volume: 7884 State: Active
Line 249: OrdersChanged TransactionId: 66671954 Balance: 6714 Volume: 7884 State: Active
Line 250: OrdersChanged TransactionId: 66671954 Balance: 6714 Volume: 7884 State: Active
Line 251: OrdersChanged TransactionId: 66671954 Balance: 6584 Volume: 7884 State: Active
Line 252: OrdersChanged TransactionId: 66671954 Balance: 6484 Volume: 7884 State: Active
Line 253: OrdersChanged TransactionId: 66671954 Balance: 6474 Volume: 7884 State: Active
Line 254: OrdersChanged TransactionId: 66671954 Balance: 6474 Volume: 7884 State: Active
Line 255: OrdersChanged TransactionId: 66671954 Balance: 6304 Volume: 7884 State: Active
Line 256: OrdersChanged TransactionId: 66671954 Balance: 6304 Volume: 7884 State: Active
Line 257: OrdersChanged TransactionId: 66671954 Balance: 6256 Volume: 7884 State: Active
Line 258: OrdersChanged TransactionId: 66671954 Balance: 6256 Volume: 7884 State: Active
Line 259: OrdersChanged TransactionId: 66671954 Balance: 6239 Volume: 7884 State: Active
Line 260: OrdersChanged TransactionId: 66671954 Balance: 6239 Volume: 7884 State: Active
Line 261: OrdersChanged TransactionId: 66671954 Balance: 6139 Volume: 7884 State: Active
Line 262: OrdersChanged TransactionId: 66671954 Balance: 6089 Volume: 7884 State: Active
Line 263: OrdersChanged TransactionId: 66671954 Balance: 6039 Volume: 7884 State: Active
Line 264: OrdersChanged TransactionId: 66671954 Balance: 6039 Volume: 7884 State: Active
Line 265: OrdersChanged TransactionId: 66671954 Balance: 5735 Volume: 7884 State: Active
Line 266: OrdersChanged TransactionId: 66671954 Balance: 5735 Volume: 7884 State: Active
Line 267: OrdersChanged TransactionId: 66671954 Balance: 5175 Volume: 7884 State: Active
Line 268: OrdersChanged TransactionId: 66671954 Balance: 5175 Volume: 7884 State: Active
Line 269: OrdersChanged TransactionId: 66671954 Balance: 5045 Volume: 7884 State: Active
Line 270: OrdersChanged TransactionId: 66671954 Balance: 4435 Volume: 7884 State: Active
Line 271: OrdersChanged TransactionId: 66671954 Balance: 4312 Volume: 7884 State: Active
Line 272: OrdersChanged TransactionId: 66671954 Balance: 4312 Volume: 7884 State: Active
Line 273: OrdersChanged TransactionId: 66671954 Balance: 4312 Volume: 7884 State: Done
Line 275: OrdersChanged TransactionId: 66671954 Balance: 4159 Volume: 7884 State: Done
Line 276: OrdersChanged TransactionId: 66671954 Balance: 4041 Volume: 7884 State: Done
Спасибо:

Maxim

Фотография
Дата: 25.04.2011
Ответить


1)Михаил, а в каком свойстве класса Order находится информация из столбца «Состояние» Квика?

2)Заметил следующее. При отмене заявки в Квике заполняется столбик «Снята(время)».
Но на момент, когда состояние заявки становится Order.State == Done, свойство Order.CancelTime остается неопределенным.
Это происходит не всегда. Из 16 отмененных заявок в 4 заявках свойство Order.CancelTime все же определилось.
Из этого могу предположить, что все таки после того, как Order.State стал Done, заявки изменяются.

3) Так же заметил, что в некоторых заявках после того, как Order.State стал Done, свойство Order.Time равно «0001-01-01 00:00:00.0000000». Что аналогично второму пункту свидетельствует о том, что заявка изменяется после того, как получила Order.State == Done.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 26.04.2011
Ответить


Maxim
1)Михаил, а в каком свойстве класса Order находится информация из столбца «Состояние» Квика?


Order.State

Maxim

2)Заметил следующее. При отмене заявки в Квике заполняется столбик «Снята(время)».
Но на момент, когда состояние заявки становится Order.State == Done, свойство Order.CancelTime остается неопределенным.
Это происходит не всегда. Из 16 отмененных заявок в 4 заявках свойство Order.CancelTime все же определилось.
Из этого могу предположить, что все таки после того, как Order.State стал Done, заявки изменяются.

3) Так же заметил, что в некоторых заявках после того, как Order.State стал Done, свойство Order.Time равно «0001-01-01 00:00:00.0000000». Что аналогично второму пункту свидетельствует о том, что заявка изменяется после того, как получила Order.State == Done.


Нужны логи из ДДЕ.
Спасибо:

Maxim

Фотография
Дата: 26.04.2011
Ответить


Mikhail Sukhov

Order.State


Но зная Order.State нельзя определить, была ли отменена заявка, правильно?
Получается, что единственный признак того, что заявка была отменена, это наличие Order.CancelTime?
Или я ошибаюсь?
Спасибо:

Maxim

Фотография
Дата: 26.04.2011
Ответить


Mikhail Sukhov
Нужны логи из ДДЕ.


1) Неверное время Order.Time «0001-01-01 00:00:00.0000000»

В файле можно найти данные из OrdersChanged и PreProcessDdeData: эксель

Данные из NewOrders
Код

InitDate    2011-04-26 12:20:32.0277086
Date    0001-01-01 00:00:00.0000000
CancelDate    NULL
Price    102.22
Volume    39
Balance    39
Id    259271
TransactionId    44300176
Direction    B
StockName    SBER03
State    Active
Status    Accepted
ExecutionCondition    CancelBalance
Type    Limit

InitDate    2011-04-26 12:20:32.9495954
Date    0001-01-01 00:00:00.0000000
CancelDate    NULL
Price    102.22
Volume    39
Balance    39
Id    259356
TransactionId    44300177
Direction    B
StockName    SBER03
State    Active
Status    Accepted
ExecutionCondition    CancelBalance
Type    Limit


В этих данных можно посмотреть на заявки 44300176 и 44300177.
После того, как Order.State поменялся на Done, в заявке 44300176 свойство Order.Time было «2011-04-26 12:20:31.0000000».
Тогда как, в заявке 44300177 свойство Order.Time было «0001-01-01 00:00:00.0000000».

Просмотрев DDE данные, заметил, что в первом случае данные PreProcessDdeData приходят перед тем, как появится событие OrdersChanged.
Во втором случае перед первым OrdersChanged данные из PreProcessDdeData не приходят.



2) Время Order.CancelTime отсутствует, а должно быть.

В файле можно найти данные из OrdersChanged и PreProcessDdeData: эксель

Данные из NewOrders:
Код

InitDate    2011-04-26 12:21:34.1535038
Date    0001-01-01 00:00:00.0000000
CancelDate    NULL
Price    102.13
Volume    39
Balance    39
Id    260883
TransactionId    44300189
Direction    S
StockName    SBER03
State    Active
Status    Accepted
ExecutionCondition    CancelBalance
Type    Limit


InitDate    2011-04-26 12:21:38.5910606
Date    0001-01-01 00:00:00.0000000
CancelDate    NULL
Price    102.18
Volume    1
Balance    1
Id    260975
TransactionId    44300190
Direction    S
StockName    SBER03
State    Active
Status    Accepted
ExecutionCondition    PutInQueue
Type    Limit


В этих данных можно посмотреть на заявки 44300189 и 44300190.
После того, как Order.State поменялся на Done, в заявке 44300189 свойство Order.CancelTime было «2011-04-26 12:21:34.0000000».
Тогда как, в заявке 44300190 свойство Order.CancelTime было пустым.

В данных DDE можно увидеть, что событие первое событие OrdersChanged , когда Order.State поменялся на Done, происходит самопроизвольно, без поступления данных из DDE. Это мое предположение, могу и ошибаться.

Спасибо:

Serg

Фотография
Дата: 26.04.2011
Ответить


Maxim, вы могли бы выложить свой проект для детального разбора?
Спасибо:

Maxim

Фотография
Дата: 26.04.2011
Ответить


Не совсем понял, что подразумевается под «свой проект»?
Что конкретно не хватает для повторения ошибки?
Вопрос касается снятия и выставления заявок.
Ничего необычного в моей программе не используется.
Выше в этом посту я уже приводил пример куска кода.
Правда в этот раз я его не использовал для получения ошибок,
но уверен, что этот код даст такие же результаты.

Кстати, насчет первого вопроса есть отдельный пост.
http://stocksharp.com/fo...iet-00-00-00-0001-ghoda/
Спасибо:

Maxim

Фотография
Дата: 26.04.2011
Ответить


Serg
Maxim, вы могли бы выложить свой проект для детального разбора?


Немного исправил код, который упоминал выше.
При помощи этого кода на тестовом Квике получилось добиться двух ошибок описанных выше:
Код

Object quikPreProcessDdeDataLock = new Object();

_quik.PreProcessDdeData += (String str, IList<IList<Object>> array) =>
{
lock (quikPreProcessDdeDataLock)
{
if (str.Contains("все сделки") == false && str.Contains("[стакан]") == false && str.Contains("портфель по бумагам") == false && str.Contains("позиции по бумагам") == false)
{
Debug.WriteLine("PreProcessDdeData DateNow:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff") + " String: " + str);

for (int i = 0; i < array.Count; i++)
{
Debug.WriteLine("PreProcessDdeData DateNow:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff") + " Row: " + i.ToString());
for (int k = 0; k < array[i].Count; k++)
{
Debug.WriteLine("PreProcessDdeData DateNow:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff") + " " + "Column: " + k.ToString() + " Object: " + array[i][k].ToString());
}
}
}
}
};



_quik.NewOrders += orders =>
{
foreach (var _order in orders)
{
String _query =
@"NewOrders
DateNow: {0},
InitDate: {1},
Date: {2},
CancelDate: {3},
Price: {4},
Volume: {5},
Balance: {6},
Id: {7},
TransactionId: {8},
Direction: {9},
StockName: {10},
State: {11},
Status: {12},
ExecutionCondition: {13},
Type: {14}";

_query = String.Format(
_query,
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff"),
_order.InitializationTime.ToString("yyyy-MM-dd HH:mm:ss.fffffff"),
(_order.Time != null ? "'" + _order.Time.ToString("yyyy-MM-dd HH:mm:ss.fffffff") + "'" : "NULL"),
(_order.CancelTime.HasValue ? "'" + _order.CancelTime.Value.ToString("yyyy-MM-dd HH:mm:ss.fffffff") + "'" : "NULL"),
_order.Price.ToString(),
_order.Volume.ToString(),
_order.Balance.ToString(),
_order.Id.ToString(),
_order.TransactionId.ToString(),
(_order.Direction == OrderDirections.Buy ? "B" : "S"),
_order.Security.Code,
_order.State.ToString(),
_order.Status.ToString(),
_order.ExecutionCondition.ToString(),
_order.Type.ToString());

Debug.WriteLine(_query);

_quik.CancelOrder(_order);
}
};

_quik.OrdersChanged += orders =>
{
foreach (var order in orders)
Debug.WriteLine(
"OrdersChanged DateNow:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff") +
" TransactionId: " + order.TransactionId +
" Balance: " + order.Balance +
" Volume: " + order.Volume +
" State: " + order.State +
" CancelTime: " + order.CancelTime.ToString() +
" Status: " + order.Status +
" Time: " + order.Time.ToString("yyyy-MM-dd HH:mm:ss.fffffff"));
};

Security paperSecurity = null;

foreach (Security sec in _quik.Securities)
if (sec.Code == "SBER03")
paperSecurity = sec;

Debug.WriteLine("Start ");

Order _newOrder = new Order();
_newOrder.Portfolio = Global.Portfolio;
_newOrder.Direction = OrderDirections.Buy;
_newOrder.Security = paperSecurity;
_newOrder.ExecutionCondition = OrderExecutionConditions.PutInQueue;
_newOrder.Comment = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff");
_newOrder.Volume = 150;
_newOrder.Price = paperSecurity.BestBid.Price;

_quik.RegisterOrder(_newOrder);

Debug.WriteLine("OrderId:" + _newOrder.TransactionId.ToString());

Debug.WriteLine("Finish ");




Спасибо:

Mikhail Sukhov

Фотография
Дата: 26.04.2011
Ответить


У меня файлы не скачиваются.
Спасибо:

Maxim

Фотография
Дата: 26.04.2011
Ответить


Mikhail Sukhov
У меня файлы не скачиваются.


Можно скачать по номерам: 5286502 и 5286555
http://www.webfile.ru/
Спасибо:
< 1 2 3 4 5  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy