You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用krakenex调用Kraken API获取历史资金收支记录时遭遇404错误的问题求助

krakenex调用Kraken API获取历史资金收支记录时遭遇404错误的问题求助

嘿,我一眼就瞅出问题出在哪啦!你的代码里犯了两个关键小错误,才导致了404和数据解析的问题,我帮你梳理并修正下:

核心问题分析

  1. API端点名称写错:Kraken私有API中,获取账本记录的正确端点是**Ledgers(复数形式)**,而你代码里用的是单数Ledger——这直接导致请求的URL路径错误,触发了404。
  2. 返回结果解析错误:Kraken的Ledgers接口返回的账本数据,是嵌套在result['ledger']字段下的,你原来直接遍历result['result']是拿不到正确数据的。

修正后的完整代码

import krakenex
import pandas as pd
import datetime

k = krakenex.API(API_KEY, API_SECRET)

def get_funding_rates(start_time=None, end_time=None):
    """Retrieves funding rate history from Kraken.

    Args:
        start_time: Optional start time (datetime object or timestamp). Defaults to 7 days ago.
        end_time: Optional end time (datetime object or timestamp). Defaults to now.

    Returns:
        pandas.DataFrame: DataFrame containing funding rate history, or None if error.
    """

    if end_time is None:
        end_time = datetime.datetime.utcnow()  # 当前UTC时间
    if start_time is None:
        start_time = end_time - datetime.timedelta(days=7)  # 默认取7天内数据

    # 转换时间为时间戳格式
    if isinstance(start_time, datetime.datetime):
        start_time = int(start_time.timestamp())
    if isinstance(end_time, datetime.datetime):
      end_time = int(end_time.timestamp())

    try:
        params = {"start": start_time, "end": end_time}
        # 修正:使用正确的复数端点名Ledgers
        result = k.query_private('Ledgers', params)  

        if result['error']:
            print(f"Kraken API调用出错: {result['error']}")
            return None

        # 修正:从正确的嵌套字段获取账本条目
        ledger_entries = result['result']['ledger']
        funding_entries = []

        for entry in ledger_entries.values():
            if entry['type'] == 'funding':  # 筛选资金类收支记录
                funding_entries.append(entry)

        df = pd.DataFrame(funding_entries)

        if not df.empty:
            # 转换时间戳为可读日期格式
            df['time'] = pd.to_datetime(df['time'], unit='s')
            df = df.set_index('time')  # 设置时间为索引
            df = df.sort_index()  # 按时间排序
            return df
        else:
            print("指定时间段内没有找到资金收支数据。")
            return pd.DataFrame()  # 返回空DataFrame

    except Exception as e:
        print(f"程序运行出错: {e}")
        return None

补充说明

Kraken的API文档里其实是有明确说明Ledgers接口的,可能你之前看的时候漏看了~这个接口就是专门用来获取用户账本(包含资金收支、交易手续费等各类记录)的,只要筛选type为funding的条目,就能拿到你要的历史资金收支数据啦。

备注:内容来源于stack exchange,提问作者sems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:38:02