← Zurück

Несовпадение статуса заявок в квике и таблице Orders

Заявку видно в стакане как активную, хотя в таблице Orders у неё State Done , Status NotDone

War dieses Thema hilfreich?

Thema teilen

Kommentare (19)

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

Mikhail Sukhov
Mikhail Sukhov

Lafert: Заявку видно в стакане как активную, хотя в таблице Orders у неё State Done , Status NotDone

Что имеется ввиду по словом стакан и что такое таблица Orders?

Lafert
Lafert Autor

Во время остановки программы заявка уже стояла минут 5 (и продолжала стоять) После чего я ее снял вручную с квика

Mikhail Sukhov
Mikhail Sukhov

Lafert: Во время остановки программы заявка уже стояла минут 5 (и продолжала стоять) После чего я ее снял вручную с квика

А в чем вопрос?

Lafert
Lafert Autor

Так в том и вопрос, что заявка была активна, а State у нее был Done.

MCTuTeJ|19951995
MCTuTeJ|19951995

State Done - это вроде когда транзакция до сервера доходит и заявка принимается биржей, а Status - как и должно быть - NotDone. Суть вопроса не понял. А может наоборот...

Mikhail Sukhov
Mikhail Sukhov

MCTuTeJ|19951995: State Done - это вроде когда транзакция до сервера доходит и заявка принимается биржей, а Status - как и должно быть - NotDone. Суть вопроса не понял.

Я вообще ничего понять не могу. Где и что не совпадает? Понятно только, что что-то не так с заявками (тор ли статусами, то ли состояниями). При чем здесь стакан - так же не понимаю.

Lafert
Lafert Autor

Согласно Help - OrderStates.Done = Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы).
Тем не менее она стояла в стакане Квика еще в течении нескольких минут.

Mikhail Sukhov
Mikhail Sukhov

Lafert: Согласно Help - OrderStates.Done = Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы). Тем не менее она стояла в стакане Квика еще в течении нескольких минут.

А с таблице заявок она какое имела состояние?

Lafert
Lafert Autor

Под словами "стояла в стакане" я имел в виду, что заявка была активной в таблице заявок и одновременно стояла в стакане (тут все логично).

В таблице заявок (в окне квика) эта заявка имела состояние Активна до того, как я остановил программу, и продолжала оставатся активной до тех пор, пока я ее не снял.

Mikhail Sukhov
Mikhail Sukhov

Lafert: Под словами "стояла в стакане" я имел в виду, что заявка была активной в таблице заявок и одновременно стояла в стакане (тут все логично).

В таблице заявок (в окне квика) эта заявка имела состояние Активна до того, как я остановил программу, и продолжала оставатся активной до тех пор, пока я ее не снял.

А номера транзакции уникальны? Можете воспроизвести ошибку в минимальном коде?

Lafert
Lafert Autor

Ошибка происходит, если снять заявку(возможно еше не зарегистрированную). После этого приходит событие OrderChanged и при нем ордер с указанными state и status.

На тестовых торгах на мамбе такая ошибка не возникла (ошибка возникла на украинской бирже на реальных торгах).

Ошибка возникает не каждый раз (раз в 5 минут при постоянном выставлении и снятиии заявок)

Lafert
Lafert Autor

Номера транзакций уникальны

MCTuTeJ|19951995
MCTuTeJ|19951995

кстати сталкивался с похожей проблемой - при частом переставлении заявок иногда заявка не имеет статуса, но отправляется и в квике видеа.

Lafert
Lafert Autor

Сделал простейший опыт. несколько раз вцикле выставляю заявку и тут же снимаю. Через некоторое время проверяю статус у тех заявок, которые остались висеть в таблице заявок. State=Done, Status=NotValidated, isMatches()=false, isCanceled()=true; Заявки в таблице видны с состоянием "Активна". Как определить, что эта заявка не удалилась?

Mikhail Sukhov
Mikhail Sukhov

Lafert: Сделал простейший опыт. несколько раз вцикле выставляю заявку и тут же снимаю. Через некоторое время проверяю статус у тех заявок, которые остались висеть в таблице заявок. State=Done, Status=NotValidated, isMatches()=false, isCanceled()=true; Заявки в таблице видны с состоянием "Активна". Как определить, что эта заявка не удалилась?

Ок, протестирую. А какой режим был у QuikTrader.IsAsyncMode?

Mikhail Sukhov
Mikhail Sukhov

Lafert: Сделал простейший опыт. несколько раз вцикле выставляю заявку и тут же снимаю. Через некоторое время проверяю статус у тех заявок, которые остались висеть в таблице заявок. State=Done, Status=NotValidated, isMatches()=false, isCanceled()=true; Заявки в таблице видны с состоянием "Активна". Как определить, что эта заявка не удалилась?

Сделал тест (демо Квик 5.18.0.239):

var qt = new QuikTrader { IsAsyncMode =  true };
qt.Connect();

var sec = new Security
{
	Code = "RIH1",
	Class = "SPBFUT",
};

var pf = new Portfolio
{
	Name = "SPBFUT00538",
};

for (var i = 0; i < count; i++)
{
	var order = new Order
	{
		Volume = 1,
		Portfolio = pf,
		Security = sec,
		Price = 185000,
	};

	qt.RegisterOrder(order);
	qt.CancelOrder(order);

	orderList.Add(order);
}

Console.ReadLine();

Если count равен 10, то после ожидания в Console.ReadLine все заявки в orderList имеют State == Active. Тоесть, все заявки на снятие не прошли, что является стандартным поведением в асинхронном режиме.

Если count == 100, то первые 12 заявок Active, остальные Failed.

Оба варианта соответствуют данным в Квик. Прогоните такой же тест у себя. Заодно, проверьте, может у нас версии Квик чем-то отличаются.

Lafert
Lafert Autor

На тестовой МАМБе завесить заявки не удалось. Сначала с задержкой накапливаются, затем снимаются. Я бы обратился на УкрБиржу, но не вижу, что возвращает QuikApi.

Lafert
Lafert Autor

true

Lafert
Lafert Autor

Пока решили эту проблему вычиткой состояний из CustomTable