连接 API 到 kdb 数据库

Connect API to kdb database

简单的问题 - 我已经使用 Python 3.6 成功连接到 Coinbase API 并在我的控制台中接收 BTC buy/sell 价格。

我想将其连接到 kdb 数据库并开始创建报价数据的 HDB,但我对如何构建此设置有点困惑,即将获取请求推送到数据库贮存。我的 python 代码看起来像...

api_key = 'XXXXX'
api_secret = 'XXXXX'
from coinbase.wallet.client import Client
import time, requests


client = Client(api_key, api_secret)


starttime = time.time()
while True:
    buy_price = client.get_buy_price(currency_pair = 'BTC-USD')
    sell_price = client.get_sell_price(currency_pair = 'BTC-USD')
    time.sleep(10.0)
    print(buy_price)
    print(sell_price)
    print("=-=-=-=-=-=")

控制台打印提要,看起来像...

{
  "amount": "8034.79",
  "base": "BTC",
  "currency": "USD"
}
{
  "amount": "7875.67",
  "base": "BTC",
  "currency": "USD"
}
=-=-=-=-=-=
{
  "amount": "8034.80",
  "base": "BTC",
  "currency": "USD"
}
{
  "amount": "7875.97",
  "base": "BTC",
  "currency": "USD"
}
=-=-=-=-=-=

有关在本地存储此数据的任何指导都会有所帮助。如果您需要任何其他信息,请告诉我。

提前致谢!

您可以使用 PyQ:

>>> from pyq import q
>>> p = {
...   "amount": "8034.79",
...   "base": "BTC",
...   "currency": "USD"
... }
>>> q.set(':x', [p])
k('`:x')
>>> q.upsert(':x', p)
k('`:x')
>>> q.get(':x').show()
amount  base currency
---------------------
8034.79 BTC  USD
8034.79 BTC  USD

对于像 Coinbase 这样的简单 API,您实际上可以非常简单地直接在 KDB 中下载数据,使用 .Q.hg for downloading and .j.k 解析 JSON。例如,这里有一个示例 "feedhandler":

/q feed.q [host]:port[:user:pwd]
\t 30000

h:hopen `$":",$[count .z.x;.z.x 0;":6000"]; //open handle to TP, use first arg or default to :6000

//define timer function to run every 30 seconds & retrieve prices, send to TP
.z.ts:{
  a:{@[(.j.k .Q.hg`$":https://api.coinbase.com/v2/prices/BTC-USD/",x)`data;`typ;:;x]}'[("buy";"sell";"spot")];
  t:select time:1#.z.N,sym:first `$(base,'currency),
           bid: "F"$first amount where typ like "sell",
           ask: "F"$first amount where typ like "buy" ,
           spot:"F"$first amount where typ like "spot"
  from a;
  h(`.u.upd;`btc;get first t);
 }

此脚本使用 KDB 计时器 运行 每 30 秒一次(您可以在第一行调整频率 - 当前为 30000 毫秒)并从 Coinbase 下载买入、卖出和现货价格 API,并将它们发送到 tickerplant(其中端口在加载脚本时指定为第一个参数,或者默认为端口 6000)。结果 table 如下所示:

:3002>btc
time                          sym    bid     ask     spot
------------------------------------------------------------
2017.11.20D21:32:48.697085000 BTCUSD 8164.23 8329.17 8246.5
2017.11.20D21:33:20.376192000 BTCUSD 8164.27 8331.69 8246.5
2017.11.20D21:33:50.709364000 BTCUSD 8164.27 8331.69 8247.27
2017.11.20D21:34:21.544488000 BTCUSD 8166.71 8331.69 8249

tick.q 的架构(默认名称 sym.q)应如下所示:

btc:([]time:`timespan$(); sym:`g#`symbol$(); bid:`float$(); ask:`float$(); spot:`float$())

需要注意的一件事是,由于此 API 使用 HTTPS,您将需要设置 SSL 证书,您可以这样做(来自 code.kx.com):

$ curl https://curl.haxx.se/ca/cacert.pem > $HOME/certs/cabundle.pem
$ export SSL_CA_CERT_FILE=$HOME/certs/cabundle.pem

我还制作了此脚本的一个版本,它与 TorQ 集成,AquaQ Analytics 发布的免费 KDB 框架(免责声明:我为 AquaQ 工作)。该版本可在此处获得:

https://github.com/jonathonmcmurray/TorQ-Coinbase

此版本包含一个启动脚本,用于下载必要的 SSL 证书并如上所述设置 SSL_CA_CERT_FILE。此设置允许您启动一组进程(tickerplant、rdb、hdb 等)来处理和存储从 feed 返回的数据。