Mikhail Sukhov
|
Date: 3/29/2011
D_Alex в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.
|
|
Thanks:
|
|
|
|
|
a.dobryn
|
Date: 3/29/2011
|
|
|
|
Mikhail Sukhov D_Alex в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки. сама я этот момент не засекала, но видно по логу и списку сделок в Quik'e, что кусочек заявки исполнился =) инструмент - Сбербанк, все это в QuickJunior. Вот примерный код - Code bool b = true;
while(b) { CancelOrder(Cnum + 1); if (IsOrderCanceled(Cnum + 1) == false) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\log.txt", true)) { file.WriteLine("Заявка со страйком {0} не снята", StrikesTableR2[Cnum + 1].Strike); } } if (IsOrderDone(Cnum + 1)) b = false; }
int n = GetOrderBalance(Cnum + 1); //вот здесь бывает неверное определение
и код вспомогательных функций Code void CancelOrder(int num) { MainWindow.Instance.CancelOrder(MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)]); }
bool IsOrderDone(int num) { return MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)].State == OrderStates.Done; }
bool IsOrderCanceled(int num) { return MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)].IsCanceled(); }
int GetOrderNum(double price) { int i; for (i = MainWindow.Instance._ordersWindow.Orders.Count() - 1; i >= 0; i--) if (MainWindow.Instance._ordersWindow.Orders[i].Price == price) return i; }
возможно, тут и в коде косяки - он индусский весьма [blush] но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 3/30/2011
D_Alex возможно, тут и в коде косяки - он индусский весьма [blush] но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно Да уж. Я мало что понял в этих хитросплетениях. Выделите код в минимальный проект, где бы бага воспроизводилась. Сейчас в этом коде искать смысла нет баги - ошибка может быть в любом месте, вплоть до неправильного получения заявки (не та заявка).
|
|
|
|
|
a.dobryn
|
Date: 3/31/2011
Хорошо, постараемся сделать минимальный проект =)
|
|
Thanks:
|
|
|
|
|
a.dobryn
|
Date: 4/4/2011
Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи Выложила сюдаПосле старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/4/2011
D_Alex Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи Выложила сюдаПосле старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин Попытался скомпилировать. Не получилось. Какая версия S#?
|
|
Thanks:
|
|
|
|
|
a.dobryn
|
Date: 4/4/2011
а что говорит? 2.6
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/4/2011
D_Alex а что говорит? 2.6
Обновитесь до последней версии. Если ошибка не уйдет, будем дальше смотреть.
|
|
Thanks:
|
|
|
|
|
a.dobryn
|
Date: 4/4/2011
Обновилась, не помогло. Помогло другое - поставила перед определением остатка sleep в одну секунду. Теперь определяет правильно =) странно, но ведь как раз перед этим определяется, что заявка точно уже снята/исполнена?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/4/2011
D_Alex Обновилась, не помогло.
Код примера остался неизменный?
|
|
Thanks:
|
|
|
|