如何从bitfinex.com获取限制的历史数据?

时间:2018-01-18 07:39:57

标签: api bitcoin

我正在使用从bitfinex.com通过简单的API查询提取的数据绘制图表。结果,我将需要渲染一张图表,该图表将显示过去两年BTCUSD的历史数据。 文档可在此处获取:https://bitfinex.readme.io/v2/reference#rest-public-candles 除了检索数据的限制外,一切正常。

这是我的要求: https://api.bitfinex.com/v2/candles/trade:1h:tBTCUSD/hist?start=1514764800000&sort=1

可以在此处看到结果,或者您可以将请求复制到浏览器:https://docs.google.com/document/d/1sG11Ro0X21_UFgUtdqrlitcCchoSh30NzGCgAe6M0u0/edit?usp=sharing

问题是无论我使用什么日期或参数,我都会收到蜡烛只有5天。如果我将limit参数添加到字符串中,我可以获得更多蜡烛。但是,我仍然无法获得超过1100-1000支蜡烛。我甚至从服务器得到500错误:

服务器错误:GET https://api.bitfinex.com/v2/candles/trade:1h:tBTCUSD/hist?limit=1100&start=1512086400000&end=1516233600000&sort=1导致500 Internal Server Error响应:\ n [“错误”,10020,“限制:无效”]。什么应该是有效限制?文档中没有此类信息。

本主题的作者有同样的问题,但没有给出解决方案。最后一个答案没有做出重大改变:Bitfinex data api

如何在两年内获得所需的数据量?我不想将我的查询分解成更小的部分并逐步进行。它看起来很难看。

1 个答案:

答案 0 :(得分:0)

从外观上看,该限制设置为1000。如果您需要1000多个历史条目,则可以解析响应的最后一个时间戳,并创建另一个请求,直到达到所需的结束时间为止。

请记住,您只能执行10-90个对等分钟的请求。因此,对每个请求执行某种睡眠机制6秒钟之类的时间是很聪明的。

import json
import time

import requests

start = 1512086400000
end = 1516233600000
timestamp = start
last_timestamp = None

url = 'https://api.bitfinex.com/v2/trades/tBTCUSD/hist/'
historical_data = []

while timestamp <= end and timestamp != last_timestamp:
    print("Requesting "+str(timestamp))
    params = {'start': timestamp, 'limit': 1000, 'sort': 1}
    response = requests.get(url, params=params)
    trades = json.loads(response.content)
    historical_data.extend(trades)

    last_timestamp = timestamp
    id, timestamp, amount, price = trades[-1]