[英]Accessing trades history using krakenex in Python
我想在行業歷史上加載使用復仇- GBP交易krakenex
在Python 3.6.9。 我目前在最近的一些交易中加載如下:
# Load in my private key
k = krakenex.API()
k.load_key('mykraken.key')
# Trade pair
tradePair = 'XETHZGBP'
# Get a list of the most recent trades
recentTrades = k.query_public('Trades',{'pair':tradePair})
# Cast to numeric
recentTrades[0] = pd.to_numeric(recentTrades[0], errors='coerce')
recentTrades[1] = pd.to_numeric(recentTrades[1], errors='coerce')
recentTrades[2] = pd.to_numeric(recentTrades[2], errors='coerce')
這似乎為我提供了價格、數量和日期戳列表中的最后 1000 筆交易。 但是我怎么能得到超過1000呢? 無論我做什么,我似乎都無法使其正常工作,而且我不確定krakenex
行為是否與 kraken API 文檔完全匹配。
默認情況下,kraken.com API 僅提供最近 1000 筆交易。 您需要指定since
查詢參數以接收較舊的數據。
來源:kraken.com API 文檔https://docs.kraken.com/rest/#operation/getRecentTrades
krakenex 軟件包似乎不支持此參數。
如前所述,Kraken API 將getRecentTrades
端點限制為 1000 getRecentTrades
交易。 要繞過此限制,您可以循環遍歷某個時間范圍,直到檢索到所有訂單。 請注意,以下代碼未實現錯誤檢查和處理。
使用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.