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


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

Код

        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.

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

Теги:


Спасибо:


< 1 2 
Mikhail Sukhov

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


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


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

Oppositus

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


Mikhail Sukhov Перейти
Oppositus Перейти
Вскрылись бездны ужаса: 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 и пр. объекты со временем?

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

Mikhail Sukhov

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


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

Спасибо:

Memory

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


Цитата:

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


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

Oppositus

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


Memory Перейти
Угу. Колонка появилась. Значение колонки 0. Всегда.


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

Memory

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


А смысл им резать?
Спасибо:

Oppositus

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


Memory Перейти
А смысл им резать?


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

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

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

Oppositus

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


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

Идея в следующем. Нам нужно поймать такую сделку, которая точно произошла в известное время - и от этой сделки уже мерять задержку. При этом особенность Квика в том, что он отбрасывает миллисекунды, а не округляет. То есть время 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 минут.
Спасибо: Геннадий Ванин (Gennady Vanin)

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

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


Memory Перейти
Угу. Колонка появилась. Значение колонки 0. Всегда.

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


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

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

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

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

loading
clippy