· 8 years ago · Feb 21, 2018, 05:36 PM
1import gdax
2
3from pprint import pprint
4import datetime
5import sqlite3
6import time
7
8def init_store():
9 db = sqlite3.connect('candles.db')
10 with db:
11 db.execute('''
12 CREATE TABLE IF NOT EXISTS candles(
13 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
14 time DATE UNIQUE,
15 low INTEGER,
16 high INTEGER,
17 open INTEGER,
18 close INTEGER,
19 volume INTEGER
20 )
21''')
22 return db
23
24def client():
25 return gdax.PublicClient()
26
27def store(db, client, product):
28 now = datetime.datetime.now()
29 prev = now - datetime.timedelta(hours=1)
30 now_i = now.isoformat()
31 prev_i = prev.isoformat()
32 candles = client.get_product_historic_rates(product, start=prev_i, end=now_i)
33 # => [1518087960, 6998, 6999.01, 6999.01, 6998.01, 3.21047378]...
34 query = '''
35 INSERT OR IGNORE INTO candles(time, low, high, open, close, volume)
36 values (?, ?, ?, ?, ?, ?)
37 '''
38 with db:
39 db.executemany(query, candles)
40 print(">", query)
41 pprint(candles[:-10])
42 return db
43
44# gdax : () -> gdax
45# store: db -> gdax -> db'
46# view : db -> string
47# tick : () -> string -> IO string
48# ----
49# gdax | db | view | tick
50
51def view(storer):
52 with storer() as db:
53 db.execute('''SELECT * from candles''')
54 return '\n'.join('> {}'.format(candle)
55 for candle
56 in db.cursor().fetchall())
57
58def tick(view, PAUSE=10):
59 while True:
60 print(view())
61 print(datetime.datetime.now().isoformat(), f'pause of {PAUSE}')
62 time.sleep(PAUSE)
63
64def main():
65 product = "BTC-EUR"
66 db = init_store()
67 g = client()
68 s = lambda: store(db, g, product)
69 v = lambda: view(s)
70 tick(v)
71
72if __name__ == '__main__':
73 main()