← Atrás

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

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (19)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

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