簡體   English   中英

在 Python 中使用 krakenex 訪問交易歷史

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM