nxt
nxt личный блог
15 февраля 2016, 18:22

Бесплатная тиковая база данных (CME)

Всем привет.

Решил выложить в открытый доступ базу данных тиков с 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:

  1. public class Tick
  2. {
  3. public DateTime Time { get; set; }
  4. public int Price { get; set; }
  5. public int Volume { get; set; }
  6. public int BidPrice { get; set; }
  7. public int AskPrice { get; set; }
  8. public int BidSize { get; set; }
  9. public int AskSize { get; set; }
  10. public TickSide TickSide { get; set; } //Enum — TickSide.Ask, TickSide.Bid
  11. }


Далее читаем файл через BinaryReader:

  1. using(BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)))
  2. {
  3.  
  4. while (reader.BaseStream.Position != reader.BaseStream.Length)
  5. {
  6. int seconds = reader.ReadInt32();
  7. DateTime tickTime = currentDate.Date.AddSeconds(seconds);
  8.  
  9. if (tickTime.Date != currentDate.Date)
  10. break;
  11.  
  12. int milliseconds = reader.ReadInt32();
  13. int price = reader.ReadInt32();
  14. int volume = reader.ReadInt32();
  15. sbyte bid = reader.ReadSByte();
  16. sbyte ask = reader.ReadSByte();
  17. int bidSize = reader.ReadInt32();
  18. int askSize = reader.ReadInt32();
  19. tickTime = tickTime.AddMilliseconds(milliseconds);
  20.  
  21. Tick tick = new Tick
  22. {
  23. Time = tickTime,
  24. Price = price,
  25. Volume = volume,
  26. BidPrice = bid,
  27. AskPrice = ask,
  28. BidSize = bidSize,
  29. AskSize = askSize,
  30. };
  31.  
  32. GetTickSide(tick);
  33. }
  34. }


Метод GetTickSide:

  1. private void GetTickSide(Tick tick)
  2. {
  3. if (tick.BidPrice <= 0)
  4. tick.TickSide = TickSide.Bid;
  5. else if (tick.AskPrice <= 0)
  6. tick.TickSide = TickSide.Ask;
  7. }

Чтобы получить читабельные цены bestBidPrice и bestAskPrice:

  1. int readableAskPrice = tick.price + (tick.AskPrice * priceStep);
  2. 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:
Просьба Тимофею Мартынову — сделайте пожалуйста подсветку кода на смартлабе.

Поставьте пожалуйста плюс чтобы вышло на главную! 

83 Комментария
  • Андрей К
    15 февраля 2016, 19:21
    Спасибо
  • Niktesla (бывш. Бабёр-Енот)
    15 февраля 2016, 19:33
    Спасибо)
  • helk3rn
    15 февраля 2016, 19:54
    Спасибо!
  • Дед Нечипор
    15 февраля 2016, 19:57
    Спасибо
  • Антон Ш
    15 февраля 2016, 20:11
    Мне не надо, но все равно большое спасибо! Так как знаю как тяжело достать подобные данные.  
  • Мурен(а)
    15 февраля 2016, 20:30
    А можно выложить в обычном формате?
      • Мурен(а)
        15 февраля 2016, 23:33
        nxt, жаль. У меня нет компилятора С. И я не — программист 
        • Roman Ivanov
          15 февраля 2016, 23:35
          Идущий по воде, не C, а C#. Вот годная IDEшечка https://sourceforge.net/projects/sharpdevelop/?source=directory
  • rutrader
    15 февраля 2016, 20:43
    а откуда данные — кто провайдер и чем писали
    надо понимать степень доверия к выложенным данным 
    в любом случае спасибо 
  • Ага
    15 февраля 2016, 21:08
      • Ага
        15 февраля 2016, 21:17
        nxt, ХЗ )
    • Vitty
      16 февраля 2016, 09:54
      Ага, ну а если включить голову и подумать?
      это относится к сайту ge.tt, куда выкладывают все кто что ни попадя и хром проявляет чудеса тупости. впрочем, скачать торрент хром не даст. при том, что сам .torrent файл в принципе никакого вреда причинить не может. короче, не ведитесь на бредни хрома.
    • AnCh
      15 февраля 2016, 21:58
      nxt, 403 forbidden. Залейте пожалуйста еще куданибудь.
  • okolorynok.ru
    15 февраля 2016, 21:37
    тиковая база данных хорошо звучит :)
  • Lafert
    15 февраля 2016, 22:12
    спасибо. Редко когда кто-то столь щедр.

    Вижу, что была попытка сделать формат хранения эффективным)

    К стати, если хотите сделать реально эффективный бинарный формат, то или смотрите в сторону ФАСТ, и реализуйте упрощенную реализацию с дельтами, или сравнивайте две последовательных структуры, как массивы байт, и передавайте дельты + обязательное использование битовых масок)
      • dvoris
        20 февраля 2016, 16:27

        nxt, спасибо за данные. 

        Это разовая раздача или постоянная и будет обновляться?

        Есть ли пропуски в данных? 

        Тоже храню данные в бинарном формате, используя struct[].

        При этом можно запись и загрузку cделать одной операцией, читая/записывая целиком файл как byte[] и преобразуя его в/из struct[]. Очень быстро получается.

         

  • Roman Ivanov
    15 февраля 2016, 23:06
    Пожалуй, поддержу раздачу :)
    Прям бигдата какая-то
  • MyProfit
    15 февраля 2016, 23:20
    Молодчина!!!
  • Ivor
    15 февраля 2016, 23:56
    Красава!
  • Спасибо. Tozhe kachal kazhdyi den' napryamuyu s CME web site. Ne vsegda udavalos' poluchit' polnye  dannye — sboi s vykladyvaniem dannyh na web site
  • ALEKKO
    16 февраля 2016, 05:08
    nxt, Спасибо БОЛЬШОЕ.
    Посмотри пожалуйста, архивы  начиная  с  6A\03-15\20150317.zip и до 6A\03-15\20150321.zip имеют нулевой размер.  Их действительно нет? 
  • torrent stuck at 53.7% — no seeds
  • Murad Muslimov
    16 февраля 2016, 09:00
    Спасибо. Плюсанул бы, если мог.
  • Vitty
    16 февраля 2016, 09:59
    спасибо огромное!
     по фтп кста сильно было бы быстрее если б все зипы в один архив потом еще завернуть. фтп в силу своей сущности тормозит на тысячах файлов
    • ch5oh
      16 февраля 2016, 10:26
      Vitty, TotalCommander или FileZilla в помощь… ;-)
      • Vitty
        16 февраля 2016, 12:11
        ch5oh, причем тут FileZilla?  суть древнего как говно мамонта протокола FTP ущербна, он открывает новое соединение на каждый файл; десятки тысяч файлов в любой программе будут качаться на порядок медленнее чем если б это был монолитный архив.
        • ch5oh
          16 февраля 2016, 12:56
          Vitty, =) хотел бы подчеркнуть, что лучше не ворчать "почему формат файлов лично мне неудобный", а поблагодарить господина nxt за то, что он выложил в паблик архив данных  рыночной стоимостью порядка $1-3k (или даже больше).
          • Vitty
            16 февраля 2016, 12:59
            ch5oh, во1ых, поблагодарил сразу. во2ых, неудобный всем, в том числе и ему (нагрузка на его сервер лишняя, если начнут качать массово, натуральный DDOS получится)

            если вы в чем-то не разбираетесь, лучше помолчите.
            • ch5oh
              16 февраля 2016, 13:10

              Vitty, а как ему делать «ежедневное обновление» потом?

              Весь зип перепаковывать?

              К вечеру у Вас весь архив выкачается — вот возьмите и перепакуйте.

              Заодно можете в нормальный CSV конвертнуть (с указнием времени по MSK желательно).

              Вам люди тоже плюсов наставят.

  • ch5oh
    16 февраля 2016, 10:26

    Плюс в профиль однозначно!

    Напишите, пожалуйста, сразу в тексте новости с какой даты собраны данные?

    Хотя бы по основным фьючерсам ES, YM...

  • ch5oh
    16 февраля 2016, 10:28
    Всё! Теперь придется писать утилиту, чтобы автоматически скачивала каждый день обновления. ;-)
      • Sergey F
        16 февраля 2016, 15:12
        nxt, подскажите тикеры rs* это с московской биржи?
  • ch5oh
    16 февраля 2016, 10:37

    А расскажите, пожалуйста, ещё про логику именования директорий?

    Я что-то не улавливаю системы… =(

    Ну, кроме разбиения по тикерам, естетственно.

    • Sergey F
      16 февраля 2016, 11:50
      ch5oh, судя по всему тикер\дата экспирации\дата торгов.зип
      • Sergey F
        16 февраля 2016, 11:52
        автору мегареспект!
      • ch5oh
        16 февраля 2016, 12:57
        Тунеядец, спасибо! Похоже, так и есть. =)
  • Антон Денисков (Fry)
    16 февраля 2016, 14:47
    Автору спасибо от души.
    Люди добрые, кто уже скачал торрент, встаньте на раздачу, пожалуйста. Всего-то три с половиной гига, всякой муры раздают, а тут реально ценная инфа — и никого!

    Инструкция для тех, у кого браузеры выкаблучиваются и блокируют торрент:
    есть такая штука… Блин, забыл… Вертится на языке… А! Вспомнил! Майкрасофт интернет эксплорер! Во! Из него можно скачать =)
    • Remarka
      16 февраля 2016, 15:49
      Fry (Антон)



      автору спасибо, но никогда я столько не ругался — 2 ссылки не скачивают ни одним браузером мира
      может кто тупо выложит торрент-файл на файлообменник да и все?
        • Remarka
          16 февраля 2016, 16:23

          nxt, даже самая последняя версия хрома дает красный экран

          ну не сложно же на мейл-облако кому-нибудь выложить?)

            • Remarka
              16 февраля 2016, 16:32
              nxt, спасибо!
  • destr
    16 февраля 2016, 16:49
    и обновляется по итогу дня.
    Вы будете выкладывать обновления?
    • Антон Денисков (Fry)
      16 февраля 2016, 17:35
      destr, очевидно если на ftp логин сохранится, то можно будет там скачивать.
      Только вот я до сих пор ничего не получил. Торент не качается. К ftp подключение идёт неадекватное (что-то от меня утекает, ко мне ничего). Лень смотреть что же там не так, но по факту нет никаких котировок пока.
      Жду раздачу на торренте.
      • destr
        16 февраля 2016, 17:53
        Fry (Антон), у меня тоже торрент всё ещё  не качается
  • Анна Ф
    16 февраля 2016, 17:33
    Ничего не поняла, но альтруизм — это круто. 
  • ch5oh
    16 февраля 2016, 19:22

    В идеале ссылку на торрент надо бы на РуТрекер кинуть...

    Без трекера насколько понимаю юзерам довольно сложно друг про друга узнать...

    ПС Ещё раз респект и благодарность.

    Особенно если будут обновления регулярные...

     

    ППС Утилитку для скачивания по TCP можно по идее на тот же FTP Сервер кинуть для полноты картины...

  • Sergey Lisicin
    16 февраля 2016, 22:51
    nxt, Спасибо )
  • OlegPypkin
    17 февраля 2016, 00:08
    Большое спасибо, а можно расшифровку по продуктам? Файлик или здесь выложить.
      • OlegPypkin
        17 февраля 2016, 17:55
        nxt, ну что значит каждое сокращение, какой продукт подразумевается под сокращением, спасибо!
  • Remarka
    17 февраля 2016, 17:02

    уже два дня как застыл, может кто виноват, а главное что делать?

     

  • Petr
    18 февраля 2016, 14:30
    Кто-то смог докачать до 100 %?
  • Кто смог докачать до 100 %?
  • OlegPypkin
    21 февраля 2016, 18:26
    я с FTP все за раз забрал.
    Выложите пожалуйста расшифровку по инструментам, спасибо!
  • eliteclub
    19 сентября 2016, 21:33


    Подскажите, плз, как разобрать данные, беру этот файл \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

    Что-то тут не то, секунды, цены прыгают на порядок.

    Формат данных действительно указан верно?
    Кто-то разбирал эти бинарники?
  • eliteclub
    26 сентября 2016, 22:26
    Блин, вот я дурень — спасибо!
  • Сергей
    20 июля 2018, 13:33
    я так понимаю тема умерла, может кто подскажет где историю  e-mini sp500 найти?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн