Вопрос по времени сделки


Вопрос по времени сделки
Atom
8/21/2012


Замерял задержку между совершением сделки на ФОРТС и приходом сделки в программу. (Время компьютера синхронизировал перед тестом.) Код ниже не работает так, как ожидается.

Code

        protected override void OnStarting()
        {
            base.Security.Exchange.IsSupportAtomicReRegister = false;

            this.SuspendRules(() =>
            {
                base.Security.WhenNewTrades().Do(NewTrade).Apply(this);
            });

            base.OnStarting();
        }

        protected void NewTrade()
        {
            String od = base.Security.LastTrade.OrderDirection.HasValue
                ? base.Security.LastTrade.OrderDirection.Value.ToString()
                : "?";
            TimeSpan lt = DateTime.Now - base.Security.LastTrade.Time;
            this.AddInfoLog("{0} сделка {1} объемом {2} направление {3}. Запаздывание {4} мс.",
                base.Security.LastTrade.Time.ToString() + "." + base.Security.LastTrade.Time.Millisecond.ToString(),
                base.Security.LastTrade.Price,
                base.Security.LastTrade.Volume,
                od,
                lt.TotalMilliseconds);

            // дальше не интересно. :)
        }


Периодически в лог валятся записи, у которых отрицательное время задержки. То есть DateTime.Now - base.Security.LastTrade.Time меньше 0.

Я нашел Грааль, да?! То есть, посмотрел в Квик, там в окне "все сделки" время без миллисекунд, в логе время сделок тоже без миллисекунд. Есть ли правильный способ посчитать задержку от сделки до ее прихода в мою программу?

Tags:


Thanks:


< 1 2 
Mikhail Sukhov

Avatar
Date: 8/22/2012
Reply


Oppositus Go to
Вскрылись бездны ужаса: http://quik.ru/forum/quik/68503/68503/ Как теперь жить?! [bored]


http://quik.ru/user/download/quik/6.3/#v6.3 Вроде появилась версия с миллисекундами. Она у всех доступна? Пугает большой разрыв в нумерации версии. С 6.0 до 6.3 сразу.
Thanks:

Oppositus

Avatar
Date: 8/22/2012
Reply


Mikhail Sukhov Go to
Oppositus Go to
Вскрылись бездны ужаса: http://quik.ru/forum/quik/68503/68503/ Как теперь жить?! [bored]


http://quik.ru/user/download/quik/6.3/#v6.3 Вроде появилась версия с миллисекундами. Она у всех доступна? Пугает большой разрыв в нумерации версии. С 6.0 до 6.3 сразу.


У меня 6.0.18.что-то. Но Открытие (где я торгую), обычно быстро версии Квика апдейтит, скоро до нас 6.3 доедет.

Пока интересно другое. В следующих версиях S#:

1. Будет ли обновлен дефолтный конфиг Квика, чтобы эти колонки с микросекундами были в таблицах по умолчанию? Или добавлять ручками?
2. Будет ли DDE-экспорт колонок с микросекндами включаться автоматически при подключению к Квику? Или включать ручками?
3. Будет ли доработана библиотека, чтобы эти колонки попадали в Trade.Time и пр. объекты со временем?

Очевидно, что если добавить колонку в конфиг и включать экспорт автоматически, то возникнет проблема совместимости, особенно у тех, кто добавлял в таблицы собственные колонки. Но и не включать тоже плохо - раз уж данные есть, то их надо учитывать автоматически...
Thanks:

Mikhail Sukhov

Avatar
Date: 8/22/2012
Reply


В начале подождем новую версию[cool]

Thanks:

Memory

Avatar
Date: 8/22/2012
Reply


Quote:

http://quik.ru/user/download/quik/6.3/#v6.3 Вроде появилась версия с миллисекундами. Она у всех доступна? Пугает большой разрыв в нумерации версии. С 6.0 до 6.3 сразу.


Угу. Колонка появилась. Значение колонки 0. Всегда.
Thanks:

Oppositus

Avatar
Date: 8/22/2012
Reply


Memory Go to
Угу. Колонка появилась. Значение колонки 0. Всегда.


А какой брокер? Может они на своем сервере данные режут.
Thanks:

Memory

Avatar
Date: 8/22/2012
Reply


А смысл им резать?
Thanks:

Oppositus

Avatar
Date: 8/22/2012
Reply


Memory Go to
А смысл им резать?


Может не специально, а просто включить забыли. А может и специально:
1. Экономят пропускную способность канала
2. Экономят нагрузку на сервер
3. Предоставляют микроекунды как дополнительную опцию на некоторых тарияфных планах
4. Просто боятся трогать конфиги
5. Возможно, для включения этой опции надо накатывать миграционные скрипты на базы данных - не хотят или боятся

Например, стаканы на ФОРТС. 2 года назад давали глубину 10, а теперь стандартно 20 а на некоторых тарифных планах и 50. Казалось бы, смысл резать? Ан нет, находят.

В любом случае - надо звонить брокеру и конкретно спрашивать.
Thanks:

Oppositus

Avatar
Date: 8/22/2012
Reply


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

Идея в следующем. Нам нужно поймать такую сделку, которая точно произошла в известное время - и от этой сделки уже мерять задержку. При этом особенность Квика в том, что он отбрасывает миллисекунды, а не округляет. То есть время 12:43:11.017 и 12:43:11.842 будут отображены как 12:43:11. Отсюда получаем хитрость - не надо смотреть на каждую сделку. Надо смотреть на сделку, время которой отличается от предыдущей ровно на 1 секунду. И, найдя такую сделку - уже от нее измерить запаздывание.

Таким обазом, идеальный случай будет, если пара сделок имеет биржевое время 12:43:11.999 и 12:43:12.000. Замерив свое время при приходе второй сделки мы сразу получим запаздывание. Но идеальных случаев мало, поэтоу надо учесть и худший случай: 12:43:11.000 и 12:43:12.999 - тут мы получим запаздывание больше секунды. Всякие разные пары типа 12:43:11.761 и 12:43:12.213 тоже будут портить статистику. А так как нам нужно много "хороших" пар сделок, то придется не только собирать большой объем сделок, но и выбрать инструмент, сделки по которому совершаются часто (нам нужно, чтобы было много сделок за секунду - тогда соседние сделки будут иметь небольшой интревал и равномерное распределение). То есть, мерять надо строго по RI.

Но и на RI сделки совершаются не каждую миллисекунду. Поэтому чем больший объем удастся набрать, тем лучше. Затем все измеренные задержки надо будет загнать в Эксель, простите оговорился, в Калк и посчитать среднее. Предположив, что сделки внутри секунды распределены равномерно - надо измерить отклонение среднего значения от 500, это и будет наша задержка.

Лично у меня задержка получилась 61,8мс (что примерно согласуется с намерянным другими людьми: http://webcache.googleus...u&ct=clnk&gl=ru)

P.S. Ну и, конечно, надо настроить автоматическую синхронизацию времени почаще. Скажем, раз в 10 минут.
Thanks: Геннадий Ванин (Gennady Vanin)

Геннадий Ванин (Gennady Vanin)

Avatar
Date: 12/5/2012
Reply


Memory Go to
Угу. Колонка появилась. Значение колонки 0. Всегда.

На реальном счёте - не 0.
На учебных серверах, например, QUIK Junior - 0


Oppositus Go to
Лично у меня задержка получилась 61,8мс (что примерно согласуется с намерянным другими людьми: http://webcache.googleus...u&ct=clnk&gl=ru)

P.S. Ну и, конечно, надо настроить автоматическую синхронизацию времени почаще. Скажем, раз в 10 минут.

Не очень понятно как это может быть использовано в в Windows (или C#), где таймер обновляется раз 15-20 миллисекунд, т.е. и время меняется скачками в 15-20 миллисекунд и его достоверность - такая же
Thanks:
< 1 2 

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

loading
clippy