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


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

Теги:


Спасибо:




19 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.12.2010
Ответить


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


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

Lafert

Фотография
Дата: 30.12.2010
Ответить


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

После чего я ее снял вручную с квика
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.12.2010
Ответить


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


А в чем вопрос?
Спасибо:

Lafert

Фотография
Дата: 31.12.2010
Ответить


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

MCTuTeJ|19951995

Фотография
Дата: 31.12.2010
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.12.2010
Ответить


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


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

Lafert

Фотография
Дата: 02.01.2011
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 03.01.2011
Ответить


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


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

Lafert

Фотография
Дата: 03.01.2011
Ответить


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 03.01.2011
Ответить


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

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


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

Lafert

Фотография
Дата: 05.01.2011
Ответить


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

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

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

Lafert

Фотография
Дата: 05.01.2011
Ответить


Номера транзакций уникальны
Автор топика
Спасибо:

MCTuTeJ|19951995

Фотография
Дата: 05.01.2011
Ответить


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

Lafert

Фотография
Дата: 06.01.2011
Ответить


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

Lafert

Фотография
Дата: 07.01.2011
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.01.2011
Ответить


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


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

Lafert

Фотография
Дата: 10.01.2011
Ответить


true
Автор топика
Спасибо:

Lafert

Фотография
Дата: 10.01.2011
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.01.2011
Ответить


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.

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy