Всем привет.
Решил выложить в открытый доступ базу данных тиков с CME, которая накапливалась за последние годы, и обновляется по итогу дня.
FTP доступ:
85.25.211.62
login: smartlab
pass: smartlabpass
Ссылки на торрент: http://ge.tt/1Ql8j3Y2
№2: app.box.com/s/h0dhmkif0fhnvlpzdp8ma89c1ysv876t
Формат данных:
seconds (int32) — кол-во секунд с начала суток по Чикаго.
milliseconds (int32)
price (int32)
volume (int32)
bestBidPrice (sbyte) — расстояние в тиках между price и реальной ценой BidPrice
bestAskPrice (sbyte) - расстояние в тиках между price и реальной ценой AskPrice
bestBidSize (int32) — доступно с июня 2015
bestAskSize (int32) - доступно с июня 2015
Ниже код для чтения бинарных файлов (На C#).
Создаем класс Tick:
- public class Tick
- {
- public DateTime Time { get; set; }
- public int Price { get; set; }
- public int Volume { get; set; }
- public int BidPrice { get; set; }
- public int AskPrice { get; set; }
- public int BidSize { get; set; }
- public int AskSize { get; set; }
- public TickSide TickSide { get; set; } //Enum — TickSide.Ask, TickSide.Bid
- }
Далее читаем файл через BinaryReader:
- using(BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)))
- {
-
- while (reader.BaseStream.Position != reader.BaseStream.Length)
- {
- int seconds = reader.ReadInt32();
- DateTime tickTime = currentDate.Date.AddSeconds(seconds);
-
- if (tickTime.Date != currentDate.Date)
- break;
-
- int milliseconds = reader.ReadInt32();
- int price = reader.ReadInt32();
- int volume = reader.ReadInt32();
- sbyte bid = reader.ReadSByte();
- sbyte ask = reader.ReadSByte();
- int bidSize = reader.ReadInt32();
- int askSize = reader.ReadInt32();
- tickTime = tickTime.AddMilliseconds(milliseconds);
-
- Tick tick = new Tick
- {
- Time = tickTime,
- Price = price,
- Volume = volume,
- BidPrice = bid,
- AskPrice = ask,
- BidSize = bidSize,
- AskSize = askSize,
- };
-
- GetTickSide(tick);
- }
- }
Метод GetTickSide:
- private void GetTickSide(Tick tick)
- {
- if (tick.BidPrice <= 0)
- tick.TickSide = TickSide.Bid;
- else if (tick.AskPrice <= 0)
- tick.TickSide = TickSide.Ask;
- }
Чтобы получить читабельные цены bestBidPrice и bestAskPrice:
- int readableAskPrice = tick.price + (tick.AskPrice * priceStep);
- int readableBidPrice = tick.price — (tick.BidPrice * priceStep);
… где priceStep это шаг цены. Например шаг цены для ES = 25 (а не 0.25), Для GC/CL = 1 (а не 0.1/0.01) и так далее.
Все цены хранятся в int32, так как меньше весят, поэтому, чтобы получить цены с точкой, необходимо tick.price / (10 * кол-во знаков после точки).
P/s:
Просьба Тимофею Мартынову — сделайте пожалуйста подсветку кода на смартлабе.
Поставьте пожалуйста плюс чтобы вышло на главную!
надо понимать степень доверия к выложенным данным
в любом случае спасибо
это относится к сайту ge.tt, куда выкладывают все кто что ни попадя и хром проявляет чудеса тупости. впрочем, скачать торрент хром не даст. при том, что сам .torrent файл в принципе никакого вреда причинить не может. короче, не ведитесь на бредни хрома.
Вижу, что была попытка сделать формат хранения эффективным)
К стати, если хотите сделать реально эффективный бинарный формат, то или смотрите в сторону ФАСТ, и реализуйте упрощенную реализацию с дельтами, или сравнивайте две последовательных структуры, как массивы байт, и передавайте дельты + обязательное использование битовых масок)
Lafert, спасибо. Идей масса, руки не доходят пока.
Вроде и так быстро читается, хотя можно сделать в 40-60 раз быстрее.
nxt, спасибо за данные.
Это разовая раздача или постоянная и будет обновляться?
Есть ли пропуски в данных?
Тоже храню данные в бинарном формате, используя struct[].
При этом можно запись и загрузку cделать одной операцией, читая/записывая целиком файл как byte[] и преобразуя его в/из struct[]. Очень быстро получается.
Прям бигдата какая-то
Посмотри пожалуйста, архивы начиная с 6A\03-15\20150317.zip и до 6A\03-15\20150321.zip имеют нулевой размер. Их действительно нет?
по фтп кста сильно было бы быстрее если б все зипы в один архив потом еще завернуть. фтп в силу своей сущности тормозит на тысячах файлов
если вы в чем-то не разбираетесь, лучше помолчите.
Vitty, а как ему делать «ежедневное обновление» потом?
Весь зип перепаковывать?
К вечеру у Вас весь архив выкачается — вот возьмите и перепакуйте.
Заодно можете в нормальный CSV конвертнуть (с указнием времени по MSK желательно).
Вам люди тоже плюсов наставят.
Vitty, поэтому залил торрент. FTP согласен, что фигня полная.
Плюс в профиль однозначно!
Напишите, пожалуйста, сразу в тексте новости с какой даты собраны данные?
Хотя бы по основным фьючерсам ES, YM...
А расскажите, пожалуйста, ещё про логику именования директорий?
Я что-то не улавливаю системы… =(
Ну, кроме разбиения по тикерам, естетственно.
Люди добрые, кто уже скачал торрент, встаньте на раздачу, пожалуйста. Всего-то три с половиной гига, всякой муры раздают, а тут реально ценная инфа — и никого!
Инструкция для тех, у кого браузеры выкаблучиваются и блокируют торрент:
есть такая штука… Блин, забыл… Вертится на языке… А! Вспомнил! Майкрасофт интернет эксплорер! Во! Из него можно скачать =)
автору спасибо, но никогда я столько не ругался — 2 ссылки не скачивают ни одним браузером мира
может кто тупо выложит торрент-файл на файлообменник да и все?
Remarka, может стоит поставить google chrome?
ge.tt и есть файлообменник.
nxt, даже самая последняя версия хрома дает красный экран
ну не сложно же на мейл-облако кому-нибудь выложить?)
Только вот я до сих пор ничего не получил. Торент не качается. К ftp подключение идёт неадекватное (что-то от меня утекает, ко мне ничего). Лень смотреть что же там не так, но по факту нет никаких котировок пока.
Жду раздачу на торренте.
В идеале ссылку на торрент надо бы на РуТрекер кинуть...
Без трекера насколько понимаю юзерам довольно сложно друг про друга узнать...
ПС Ещё раз респект и благодарность.
Особенно если будут обновления регулярные...
ППС Утилитку для скачивания по TCP можно по идее на тот же FTP Сервер кинуть для полноты картины...
уже два дня как застыл, может кто виноват, а главное что делать?
Самый лучший трейдер смартлаба, да. это успокаивает
Выложите пожалуйста расшифровку по инструментам, спасибо!
Подскажите, плз, как разобрать данные, беру этот файл \85.25.211.62_CME\CL\09-16\20160811.zip, далее:
while (reader.BaseStream.Position != reader.BaseStream.Length)
{
var seconds = reader.ReadInt32(); // кол — во секунд с начала суток по Чикаго.
var milliseconds = reader.ReadInt32();
var price = reader.ReadInt32();
var volume = reader.ReadInt32();
var bestBidPrice = reader.ReadSByte(); // расстояние в тиках между price и реальной ценой BidPrice
var bestAskPrice = reader.ReadSByte(); // расстояние в тиках между price и реальной ценой AskPrice
var bestBidSize = reader.ReadInt32(); // доступно с июня 2015
var bestAskSize = reader.ReadInt32(); // доступно с июня 2015
...,
результат:
seconds: 559903
milliseconds: 0
price: -571736060
volume: -1256416249
bestBidPrice: -43
bestAskPrice: 0
bestBidSize: -882470416
bestAskSize: -1680396875
seconds: 1813515707
milliseconds: 1662566810
price: 135300620
volume: 793540541
bestBidPrice: -90
bestAskPrice: -124
bestBidSize: 134494738
bestAskSize: -1869111003
seconds: 635984848
milliseconds: 658657460
price: -2078014960
volume: -197326826
bestBidPrice: 26
bestAskPrice: 122
bestBidSize: 2130969167
bestAskSize: 1319022063
seconds: -288566662
milliseconds: -1646338850
price: -541122783
volume: -134513891
bestBidPrice: -45
bestAskPrice: 104
bestBidSize: -750349772
bestAskSize: 1090969396
Что-то тут не то, секунды, цены прыгают на порядок.
Формат данных действительно указан верно?
Кто-то разбирал эти бинарники?