Order.Balance после снятия заявки

Order.Balance после снятия заявки
Atom
3/23/2011
a.dobryn


Нужно получить нереализованный объем заявки после ее снятия. Order.Balance показывает полный объем, как узнать именно нереализованный?


Tags:


Thanks:


< 1 2 3  >
Mikhail Sukhov

Avatar
Date: 3/29/2011
Reply


D_Alex: в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume

Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.

Thanks:

a.dobryn

Avatar
Date: 3/29/2011
Reply


Mikhail Sukhov:

D_Alex: в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume

Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.

сама я этот момент не засекала, но видно по логу и списку сделок в Quik'e, что кусочек заявки исполнился =) инструмент - Сбербанк, все это в QuickJunior. Вот примерный код -


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);  //вот здесь бывает неверное определение

и код вспомогательных функций


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

Avatar
Date: 3/30/2011
Reply


D_Alex: возможно, тут и в коде косяки - он индусский весьма [blush] но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно

Да уж. Я мало что понял в этих хитросплетениях. Выделите код в минимальный проект, где бы бага воспроизводилась. Сейчас в этом коде искать смысла нет баги - ошибка может быть в любом месте, вплоть до неправильного получения заявки (не та заявка).

Thanks: a.dobryn

a.dobryn

Avatar
Date: 3/31/2011
Reply


Хорошо, постараемся сделать минимальный проект =)

Thanks:

a.dobryn

Avatar
Date: 4/4/2011
Reply


Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи Выложила сюда После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин

Thanks:

Mikhail Sukhov

Avatar
Date: 4/4/2011
Reply


D_Alex: Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи Выложила сюда После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин

Попытался скомпилировать. Не получилось. Какая версия S#?

Thanks:

a.dobryn

Avatar
Date: 4/4/2011
Reply


а что говорит? 2.6

Thanks:

Mikhail Sukhov

Avatar
Date: 4/4/2011
Reply


D_Alex: а что говорит? 2.6

Обновитесь до последней версии. Если ошибка не уйдет, будем дальше смотреть.

Thanks:

a.dobryn

Avatar
Date: 4/4/2011
Reply


Обновилась, не помогло. Помогло другое - поставила перед определением остатка sleep в одну секунду. Теперь определяет правильно =) странно, но ведь как раз перед этим определяется, что заявка точно уже снята/исполнена?

Thanks:

Mikhail Sukhov

Avatar
Date: 4/4/2011
Reply


D_Alex: Обновилась, не помогло.

Код примера остался неизменный?

Thanks:
< 1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy