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 Комментария

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

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