Guest User

Download Kraken trades

a guest
May 12th, 2018
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.35 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import krakenex
  4. import os
  5. import h5py
  6. import numpy as np
  7. import time
  8. import datetime
  9.  
  10. k = krakenex.API()
  11. c = krakenex.Connection()
  12.  
  13. until = np.uint64(1525564800000000000) # 2018-05-06 00:00:00 GMT
  14.  
  15. def download_trades(pair):
  16.   path = "download/%s.h5" % pair
  17.  
  18.   if os.path.exists(path):
  19.     print("%s already exists, appending" % path)
  20.   else:
  21.     print("Creating %s" % path)
  22.  
  23.   h5 = h5py.File(path, "a")
  24.  
  25.   last = np.uint64(0)
  26.  
  27.   if "last" in h5.attrs.keys():
  28.     last = h5.attrs.get("last")
  29.   else:
  30.     h5.attrs.create("last", last, dtype=np.uint64)
  31.  
  32.   size = 0
  33.   if ("time_price_vol" in h5.keys()):
  34.     size = h5["time_price_vol"].shape[0]
  35.  
  36.   h5.close()
  37.  
  38.   # main download loop
  39.   while (last < until):
  40.     while True:
  41.       try:
  42.         q = k.query_public("Trades", { "pair": pair, "since": last }, c)
  43.         if ("error" in q.keys()):
  44.           if (len(q["error"]) == 0):
  45.             if ("result" in q.keys()):
  46.               break
  47.           else:
  48.             print("Error: ", q["error"])
  49.             time.sleep(5)
  50.       except ValueError as err:
  51.         print("Exception: ", err)
  52.  
  53.       time.sleep(1)
  54.  
  55.     res = q["result"]
  56.     ts = res[pair]
  57.  
  58.     n = len(ts)
  59.  
  60.     h5 = h5py.File(path, "a")
  61.  
  62.     time_price_vol = h5.require_dataset("time_price_vol", shape=(size, 3),
  63.         dtype=np.float64, chunks=(1000, 3), maxshape=(None, 3),
  64.         compression="gzip", compression_opts=7)
  65.  
  66.     buy_market = h5.require_dataset("buy_market", shape=(size, 2),
  67.         dtype=np.bool_, chunks=(1000, 2), maxshape=(None, 2),
  68.         compression="gzip", compression_opts=7)
  69.  
  70.     time_price_vol.resize((size + n, 3))
  71.     buy_market.resize((size + n, 2))
  72.  
  73.     time_price_vol[size:,0] = [float(t[2]) for t in ts]
  74.     time_price_vol[size:,1] = [float(t[0]) for t in ts]
  75.     time_price_vol[size:,2] = [float(t[1]) for t in ts]
  76.     buy_market[size:,0] = [t[3] == "b" for t in ts]
  77.     buy_market[size:,1] = [t[4] == "m" for t in ts]
  78.  
  79.     last = np.uint64(res["last"])
  80.     h5.attrs.modify("last", last)
  81.  
  82.     h5.close()
  83.  
  84.     datestr = datetime.datetime.utcfromtimestamp(last/1e9).strftime('%Y-%m-%d %H:%M:%S GMT')
  85.     print("Downloaded %s up to %s (%lu)" % (pair, datestr, last))
  86.     size = size + n
  87.  
  88. f = open("pairs", "r")
  89. pairs = [l.strip() for l in f.readlines()]
  90.  
  91. for pair in pairs:
  92.   download_trades(pair)
Add Comment
Please, Sign In to add comment