如前所述,Kraken API 将getRecentTrades
端点限制为 1000 笔交易。要绕过此限制,您可以循环某个时间范围,直到检索到所有订单。请注意,以下代码未实现错误检查和处理。
使用pykrakenapi 包,输出是按降序排列的 Pandas DataFrame。
import time
import krakenex
from pykrakenapi import KrakenAPI
from datetime import datetime, timezone, timedelta
def nano_after_epoch(t):
"""Converts DateTime object to int nanoseconds after epoch"""
return int(t.replace(tzinfo=timezone.utc).timestamp() * 1000000000)
# Connect to the kraken API
api = krakenex.API(key=<<key>>,
secret=<<optional>>)
api = KrakenAPI(api)
"""Specify requirements"""
# Start and end time for which period to retrieve data
start_time = nano_after_epoch(datetime(2021, 10, 12))
end_time = nano_after_epoch(datetime.utcnow())
leeway = 180 * 1000000000 # Seconds * nanoseconds converter
pair = 'XETHZGBP'
# Loop until the last retrieved date is within X seconds of the desired end date to account
# for a lack of recent trades. If set too strictly, loop will continue until a new trade has been made
df = None
while start_time < end_time - leeway:
print(f"Retrieving data from {datetime.fromtimestamp(start_time // 1000000000)}...")
qry = api.get_recent_trades(since=start_time, pair=pair)
# Append new data to dataframe
df = qry[0] if df is None else qry[0].append(df)
# Determine last retrieved date
start_time = df.index[0]
# New 'retrieve from' date is latest_time + 1 nanosecond
start_time = nano_after_epoch(start_time) + 1
# Sleep to avoid being rate limited
time.sleep(1.8)
print(df)
输出:
Retrieving data from 2021-10-12 02:00:00...
Retrieving data from 2021-10-12 17:53:38...
Retrieving data from 2021-10-13 16:31:48...
price volume ... market_limit misc
dtime ...
2021-10-13 19:15:17.854300022 2580.07 0.004000 ... limit
2021-10-13 19:13:12.930500031 2580.07 1.380691 ... limit
2021-10-13 19:08:06.569099903 2578.75 0.016780 ... limit
2021-10-13 19:04:16.453200102 2575.33 0.190738 ... market
2021-10-13 19:04:16.452300072 2575.70 0.001800 ... market
... ... ... ... ... ...
2021-10-12 00:03:43.447799921 2593.58 0.084000 ... limit
2021-10-12 00:03:05.378900051 2591.09 0.004732 ... limit
2021-10-12 00:03:03.912699938 2593.58 0.084077 ... limit
2021-10-12 00:02:38.695899963 2603.86 1.120000 ... limit
2021-10-12 00:00:20.313299894 2604.47 0.014493 ... limit
[2286 rows x 6 columns]