Сохранение стакана, Описание эксперимента с сохранением стакана
Пользователь
Сообщений: Регистрация: 29.04.2023
29.04.2023 19:43:39
Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>), который потом записывается в файл. Очередность в итоговом списке такая же, какая случилась при вызовах коллбэков. Это небольшой кусочек списка, где стакан обозначен знаком =, а сделка знаком *:
Видно, что данные приходят срезами(иначе не было бы нескольких сделок подряд без изменения стакана, такое невозможно). И тут возникает вопрос: а как определить временную метку полученного стакана?? У каждой сделки такая метка есть.
Если покупать подобную информацию(история заявок, из которой можно собрать стакан) на бирже, то она выглядит как список заявок по всем инструментам, где каждая заявка также имеет свою временную метку, по формату аналогичную тому, что используется в сделках. То есть там не сам кадр стакана имеет временную метку, а каждая заявка, и можно собрать стакан самому, и при этом выяснить, какую временную метку ему проставить.
А что в Quik? Сохранить последовательность стаканов я могу, но без временных меток они не имеют много смысла.
Поэтому вопросы к разработчикам: 1) Где-то в недрах ваших систем есть временные метки для стаканов? Ведь биржа время заявки шлет. Если это есть, то почему бы это не передать в тот же коллбэк OnQuote, или в getQuoteLevel2? 2) Если таких временных меток на стакане у вас нет, то как вообще вы синхронизируете тот же стакан и таблицу всех сделок, графики да и все остальное, что имеет метку времени? Или же НИКАК??
Моя задача проста: распределить сделки и полученные стаканы на оси времени в верном порядке. Готов выслушать любые предложения:)
P.S. Если кому интересно: файл с записью такой информации только за вечернюю сессию по одному из инструментов срочного рынка занял 97 Мб.
Приносим свои извинения за длительное отсутствие реакции на Ваше обращение.
1. Информация по котировкам поступает без временных меток. 2. Указанные данные транслируются в разных потоках, их синхронизация не выполняется.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
26.05.2023 14:37:13
2) ничего не синхронизируется. Всё едет независимо. Как приехало - так отобразили. Купили историю заявок на бирже? Серьёзно?? В вашем файле время формирования информации, не более.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.05.2023 17:26:20
Цитата
Delv написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>), который потом записывается в файл. Очередность в итоговом списке такая же, какая случилась при вызовах коллбэков. Это небольшой кусочек списка, где стакан обозначен знаком =, а сделка знаком *:
Видно, что данные приходят срезами(иначе не было бы нескольких сделок подряд без изменения стакана, такое невозможно). И тут возникает вопрос: а как определить временную метку полученного стакана?? У каждой сделки такая метка есть.
Если покупать подобную информацию(история заявок, из которой можно собрать стакан) на бирже, то она выглядит как список заявок по всем инструментам, где каждая заявка также имеет свою временную метку, по формату аналогичную тому, что используется в сделках. То есть там не сам кадр стакана имеет временную метку, а каждая заявка, и можно собрать стакан самому, и при этом выяснить, какую временную метку ему проставить.
А что в Quik? Сохранить последовательность стаканов я могу, но без временных меток они не имеют много смысла.
Поэтому вопросы к разработчикам: 1) Где-то в недрах ваших систем есть временные метки для стаканов? Ведь биржа время заявки шлет. Если это есть, то почему бы это не передать в тот же коллбэк OnQuote, или в getQuoteLevel2? 2) Если таких временных меток на стакане у вас нет, то как вообще вы синхронизируете тот же стакан и таблицу всех сделок, графики да и все остальное, что имеет метку времени? Или же НИКАК??
Моя задача проста: распределить сделки и полученные стаканы на оси времени в верном порядке. Готов выслушать любые предложения:)
P.S. Если кому интересно: файл с записью такой информации только за вечернюю сессию по одному из инструментов срочного рынка занял 97 Мб.
Стакан не приходит целиком. Он передается лишь изменениями. Кроме того, есть сделки, заявки по которым никогда не появляются в стакане. --------------- сделки в таблицу обезличенных сделок а следовательно и в колбек ALLTrades приходят не срезами, а блоками. Срезы не гарантируют отсутствие пропусков, а обезличенные сделки приходят без пропусков, но кучей одновременно.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.05.2023 17:28:26
Ваша идея не осуществима. Единственное решение - купить у биржи или торговцев информации с биржи эту информацию. Но остается вопрос - А смысл?
Пользователь
Сообщений: Регистрация: 29.04.2023
28.07.2023 22:19:33
Цитата
Купили историю заявок на бирже? Серьёзно?? В вашем файле время формирования информации, не более.
Нет, не покупал. Но предложение такое от биржи есть. Стоит недешево. Честно говоря, не знаю, что именно за время биржа ставит на каждую заявку...Но по крайней мере оно там есть. А тут, в QUIK у нас получается, что: все едет независимо и в итоге неясно, куда какой кадр стакана относится. То ли он сделку опередил и приехал первым, то ли он опоздал...
Пользователь
Сообщений: Регистрация: 29.04.2023
28.07.2023 22:20:51
Цитата
--------------- сделки в таблицу обезличенных сделок а следовательно и в колбек ALLTrades приходят не срезами, а блоками. Срезы не гарантируют отсутствие пропусков, а обезличенные сделки приходят без пропусков, но кучей одновременно.
Так в чем разница срезов и блоков? В пропуске данных?
Это только небольшая часть. Вот такое вот обозначение ## 1 ## показывает разницу времени в миллисекундах относительно предыдущей сделки. Хотел прикрепить целый файл, но форум выдает какую-то ошибку. Здесь показаны только Bid/Ask и количество заявок на этих уровнях. В списке же хранится весь полученный стакан(50 позиций в каждую сторону). Инструмент - фьючерс на природный газ.
Пользователь
Сообщений: Регистрация: 29.04.2023
28.07.2023 23:07:56
Цитата
nikolz написал: Ваша идея не осуществима. Единственное решение - купить у биржи или торговцев информации с биржи эту информацию. Но остается вопрос - А смысл?
Да, именно это следует из ответа техподдержки. Решение купить дорогое в общем-то. К тому же купленную информацию придется еще обрабатывать, собирая из нее стакан. Смысл? Да их масса. Например скормить эти стаканы нейросети, обучив ее на что-то.
Пользователь
Сообщений: Регистрация: 25.09.2020
29.07.2023 09:20:12
Delv, О, Господи! Который раз у нас нейросети? Самое смешное, что за них, кажется, топил сам nikolz.
Пользователь
Сообщений: Регистрация: 29.04.2023
29.07.2023 14:32:47
Цитата
Владимир написал: , О, Господи! Который раз у нас нейросети? Самое смешное, что за них, кажется, топил сам nikolz. ::
Даже не знаю, который. А что не так с нейросетями? Прекрасный фильтр, так-то. Впрочем, даже без нейросетей стакан интересен. Там многое можно увидеть.
Пользователь
Сообщений: Регистрация: 25.09.2020
29.07.2023 15:21:49
Delv, Да всё не так с нейросетями. Если уж сам разработчик не знает как надо торговать, то его поделие и подавно опозорится. Было тут несколько поклонников нейросетей - приходили с гнутыми пальцами и наполеоновскими планами, а потом тихо и бесследно исчезали. А в стакане можно увидеть.разве что то, что там ХОТЯТ показать. Рынок двигают сделки, а не суходроч в стакане.
Пользователь
Сообщений: Регистрация: 29.04.2023
29.07.2023 15:32:36
Цитата
Владимир написал: А в стакане можно увидеть.разве что то, что там ХОТЯТ показать. Рынок двигают сделки, а не суходроч в стакане.
Совершенно верно. То, что хотят показать. Но из этого тоже можно сделать выводы. Что касается "гнутых" пальцев: все эти финансовые ряды не стационарны. То есть статистические методы на них бессильны. Остается только выдумывать нечто. Ну например: вряд ли человек сможет адекватно и быстро анализировать сразу несколько потоков. Типа основного тренда плюс анализ разных сопутствующих данных. Участвовал в одном проекте от GeekBrains на эту тему. Было там интересное решение одного из участников. Анализ поведения индекса S&P500 и предсказание его движения(краткосрочного) путем построения языковой модели и анализа с ее помощью новостного фона. Результаты там были просто космос. Больше 70% точности!
Пользователь
Сообщений: Регистрация: 25.09.2020
29.07.2023 15:50:56
Delv, А на кой? Какое нам дело, что нам ХОТЯТ показать? Пусть показывают, что хотят, а мы будем торговать так, как МЫ хотим.
Согласен, "статистические методы бессильны". Но зачем "выдумывать нечто"? Всё уже украдено до нас (с). Естественно, "человек не сможет адекватно и быстро анализировать сразу несколько потоков" - для того и скрипт. он никогда не устаёт, всегда внимателен, умеет быстро и точно считать, у него крепкие нервы - что ещё надо? А вот предсказывать движение курса пока что никому не удавалось за всё время существования биржи.
Пользователь
Сообщений: Регистрация: 30.01.2015
29.07.2023 21:54:47
Цитата
Delv написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>),
Забыл сказать Вам ранее. 1) Существуют сделки, которых нет в стакане. 2) Для эксперимента можно сделать так. Синхронизируйте часы компьютера от сервера точного времени. При этом проверьте на сколько будет уходить время на Вашем компьютере. Реально получить 2-5 ms . Потом пишите стакан и сделки с метками компьютерного времени. Потом обработайте файл с оценкой разницы компьютерного времени и времени сделок. В итоге Вы получите, что сделки приходят к Вам с запозданием Сделки и срезы стаканов могут приходит в одном пакете. Количество изменений стакана в действительности всегда больше чем число совершенных сделок. Но выбор среза стакана очевидно определяется не моментом совершения сделок, либо не только. ----------------- В любом случае, если так сделаете, то узнаете много нового. =============== Прим: Когда-то давно привозили данные с биржи по сделкам для экспертизы в рамках одного уголовного дела. Там много чего есть интересного.
Пользователь
Сообщений: Регистрация: 29.04.2023
31.07.2023 02:01:51
Цитата
Владимир написал: , А на кой? Какое нам дело, что нам ХОТЯТ показать? Пусть показывают, что хотят, а мы будем торговать так, как МЫ хотим.
Согласен, "статистические методы бессильны". Но зачем "выдумывать нечто"? Всё уже украдено до нас (с). Естественно, "человек не сможет адекватно и быстро анализировать сразу несколько потоков" - для того и скрипт. он никогда не устаёт, всегда внимателен, умеет быстро и точно считать, у него крепкие нервы - что ещё надо? А вот предсказывать движение курса пока что никому не удавалось за всё время существования биржи.
Не могу ответить "на кой", пока не попробую. Как попробую - расскажу, поучилось или нет. Без нюансов и подробностей естественно:)
Пользователь
Сообщений: Регистрация: 29.04.2023
31.07.2023 02:07:53
Цитата
А вот предсказывать движение курса пока что никому не удавалось за всё время существования биржи.
Я не был бы так уверен!! Просто те, у кого это получилось, рассказывать об этом не будут. Ну я бы не стал. Любая стратегия на рынке имеет свои пределы. Если в нее загнать некое критическое количество трейдеров, она просто перестанет работать.
написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>),
Забыл сказать Вам ранее. 1) Существуют сделки, которых нет в стакане. 2) Для эксперимента можно сделать так. Синхронизируйте часы компьютера от сервера точного времени. При этом проверьте на сколько будет уходить время на Вашем компьютере. Реально получить 2-5 ms . Потом пишите стакан и сделки с метками компьютерного времени. Потом обработайте файл с оценкой разницы компьютерного времени и времени сделок. В итоге Вы получите, что сделки приходят к Вам с запозданием Сделки и срезы стаканов могут приходит в одном пакете. Количество изменений стакана в действительности всегда больше чем число совершенных сделок. Но выбор среза стакана очевидно определяется не моментом совершения сделок, либо не только. ----------------- В любом случае, если так сделаете, то узнаете много нового. =============== Прим: Когда-то давно привозили данные с биржи по сделкам для экспертизы в рамках одного уголовного дела. Там много чего есть интересного.
Спасибо, надо будет поинтересоваться. Пока же я буду просто использовать очередность сделок и кадров стакана. Разница по времени там небольшая будет. Те же 2-5 мс для меня не имеют особого значения, так как на сделку(отправка заявки на биржу и получение ответа по транзакции) уходит куда больше. До 250 мс.
написал: Решил сохранить историческую информацию о стаканах по отдельно взятому инструменту. Есть 2 обработчика: OnQuote и OnAllTrades. В обоих стоит фильтрация по инструменту. События из них кладутся в некий общий список(std::list<std::any>),
Забыл сказать Вам ранее. 1) Существуют сделки, которых нет в стакане. 2) Для эксперимента можно сделать так. Синхронизируйте часы компьютера от сервера точного времени. При этом проверьте на сколько будет уходить время на Вашем компьютере. Реально получить 2-5 ms . Потом пишите стакан и сделки с метками компьютерного времени. Потом обработайте файл с оценкой разницы компьютерного времени и времени сделок. В итоге Вы получите, что сделки приходят к Вам с запозданием Сделки и срезы стаканов могут приходит в одном пакете. Количество изменений стакана в действительности всегда больше чем число совершенных сделок. Но выбор среза стакана очевидно определяется не моментом совершения сделок, либо не только. ----------------- В любом случае, если так сделаете, то узнаете много нового. =============== Прим: Когда-то давно привозили данные с биржи по сделкам для экспертизы в рамках одного уголовного дела. Там много чего есть интересного.
Спасибо, надо будет поинтересоваться. Пока же я буду просто использовать очередность сделок и кадров стакана. Разница по времени там небольшая будет. Те же 2-5 мс для меня не имеют особого значения, так как на сделку(отправка заявки на биржу и получение ответа по транзакции) уходит куда больше. До 250 мс.
2-5 ms - это не задержка прихода, а ошибка синхронизации времени компьютера относительно времени биржи. Эта величина погрешности. Вы же не используете градусник у которого погрешность измерения 10 градусов. ----------------------------- На форуме я выкладывал результаты измерения запаздывания прихода сделок и свечей. Получались даже секунды, а для свечей десятки секунд. ---------------- Но если Вам все равно, но какой смысл вообще смотреть вчерашний день.
Пользователь
Сообщений: Регистрация: 25.09.2020
31.07.2023 09:33:23
Delv, Общее утверждение опровергается частным. Пример - в студию! Просто те, у кого это получилось, узнавали об этом ПОСЛЕ того как, а если не получалось, тем более молчали в тряпочку. А пределы моей стратегии настолько безграничны, что мне по гроб жизни хватит.
Цитата
на сделку (отправка заявки на биржу и получение ответа по транзакции) уходит куда больше. До 250 мс.
Оптимист! Если я правильно помню, мой личный рекорд по задержке 17 с половиной МИНУТ.