pd.DataFrame(res['result'][pair]) 上的 PyKrakenAPI KeyError

PyKrakenAPI KeyError on pd.DataFrame(res['result'][pair])

pykrakenapi 0.1.8版本存在该问题,0.1.9已修复

当将 Kraken 的 REST API 与 pykrakenapi 一起使用时,一些交易对(例如非常流行的 XBTUSD)会产生 KeyError,即使 exists in Kraken's Asset Pair endpoint .

例如下面的代码

import krakenex
from pykrakenapi import KrakenAPI

timestamp = 1546300800000000000
pair = 'XBTUSD'

trades = k.get_recent_trades(pair=pair, since=timestamp, ascending=True)

导致以下错误:

File "C:\Users\TimStack\PycharmProjects\Kraken\lib\site-packages\pykrakenapi\pykrakenapi.py", line 704, in get_recent_trades
trades = pd.DataFrame(res['result'][pair])
KeyError: 'XBTUSD'

XBTUSD 对确实出现在 AssetPairs 端点中,但是:

此问题是由于 Kraken 使用不同的交易对名称造成的。在 XBTUSD 的情况下,这是 XXBTZUSD。这可以说明如下:

>>> trades = api.query_public("Trades", {'pair': 'XBTUSD', 'since': 1546300800000000000, 'ascending': True})
>>> print(trades)
{'error': [], 'result': {'XXBTZUSD': [['3690.90000', '0.00400000', 1546300800.4732, 's', 'l', ''], ...

在正在调用的 pykrakenapi.py 函数中构造数据帧时产生错误:

def get_recent_trades(self, pair, since=None, ascending=False):
    ...
    ...
    # create dataframe
    trades = pd.DataFrame(res['result'][pair])
    ...

可以通过将 pair 的值更改为正确的键来解决此问题:

def get_recent_trades(self, pair, since=None, ascending=False):
    ...
    ...
    # create dataframe
    pair = list(res['result'].keys())[0]
    trades = pd.DataFrame(res['result'][pair])
    ...

其中 list(res['result'].keys())[0] 等于 result 键下字典的第一个键。