Maxim
|
Date: 4/25/2011
|
|
|
|
|
- QuikTrader.IsAyncMode = true
- Заявки регистрируются, а потом снимаются.
- Настроил логирование, но как теперь выяснилось, оно работало не совсем коректно.
В частности, нет информации по 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
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/25/2011
1)Михаил, а в каком свойстве класса Order находится информация из столбца «Состояние» Квика?
2)Заметил следующее. При отмене заявки в Квике заполняется столбик «Снята(время)».
Но на момент, когда состояние заявки становится Order.State == Done, свойство Order.CancelTime остается неопределенным.
Это происходит не всегда. Из 16 отмененных заявок в 4 заявках свойство Order.CancelTime все же определилось.
Из этого могу предположить, что все таки после того, как Order.State стал Done, заявки изменяются.
- Так же заметил, что в некоторых заявках после того, как Order.State стал Done, свойство Order.Time равно «0001-01-01 00:00:00.0000000». Что аналогично второму пункту свидетельствует о том, что заявка изменяется после того, как получила Order.State == Done.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/26/2011
Maxim:
1)Михаил, а в каком свойстве класса Order находится информация из столбца «Состояние» Квика?
Order.State
Maxim:
2)Заметил следующее. При отмене заявки в Квике заполняется столбик «Снята(время)».
Но на момент, когда состояние заявки становится Order.State == Done, свойство Order.CancelTime остается неопределенным.
Это происходит не всегда. Из 16 отмененных заявок в 4 заявках свойство Order.CancelTime все же определилось.
Из этого могу предположить, что все таки после того, как Order.State стал Done, заявки изменяются.
- Так же заметил, что в некоторых заявках после того, как Order.State стал Done, свойство Order.Time равно «0001-01-01 00:00:00.0000000». Что аналогично второму пункту свидетельствует о том, что заявка изменяется после того, как получила Order.State == Done.
Нужны логи из ДДЕ.
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/26/2011
Mikhail Sukhov:
Order.State
Но зная Order.State нельзя определить, была ли отменена заявка, правильно?
Получается, что единственный признак того, что заявка была отменена, это наличие Order.CancelTime?
Или я ошибаюсь?
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/26/2011
|
|
|
|
|
Mikhail Sukhov:
Нужны логи из ДДЕ.
- Неверное время 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 не приходят.
- Время 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. Это мое предположение, могу и ошибаться.
|
|
|
|
Thanks:
|
|
|
|
|
|
Serg
|
Date: 4/26/2011
Maxim, вы могли бы выложить свой проект для детального разбора?
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/26/2011
Не совсем понял, что подразумевается под «свой проект»?
Что конкретно не хватает для повторения ошибки?
Вопрос касается снятия и выставления заявок.
Ничего необычного в моей программе не используется.
Выше в этом посту я уже приводил пример куска кода.
Правда в этот раз я его не использовал для получения ошибок,
но уверен, что этот код даст такие же результаты.
Кстати, насчет первого вопроса есть отдельный пост.
http://stocksharp.com/forum/878/Order-Time-vozvrashchaiet-00-00-00-0001-ghoda/
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/26/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 ");
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/26/2011
У меня файлы не скачиваются.
|
|
|
|
Thanks:
|
|
|
|
|
|
Maxim
|
Date: 4/26/2011
|
|
|
|
Thanks:
|
|
|
|
|