连接 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 返回的数据。
简单的问题 - 我已经使用 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 返回的数据。