调用Coinbase API查询账户返回货币列表缺失自有持仓币种
问题原因及解决方法
- API密钥权限未配置正确:你在Coinbase后台创建API密钥时,必须勾选
wallet:accounts:read权限,未开启该权限的情况下,get_accounts()接口只会返回公共的零余额空账户列表,不会加载你个人的持仓数据。你可以登录Coinbase后台进入API设置页,核对当前密钥的权限配置。 - 接口版本不匹配持仓账户类型:你当前调用的是旧版Coinbase Wallet API的
get_accounts()接口,该接口默认仅返回Coinbase Wallet托管账户的资产,如果你持仓在Coinbase Advanced Trade(原Coinbase Pro)账户中,旧版接口无法拉取对应数据,需要改用Coinbase Advanced Trade v3版API的账户查询接口。 - 分页未遍历完整:
get_accounts()接口默认开启分页,单次最多返回25条账户记录,如果你名下账户(含零余额账户)总数超过25,第一页返回的大概率是无持仓的冷门货币账户,你的持仓账户在后续分页中。你可以调用接口时添加limit参数调大单次返回条数,示例:accounts = client.get_accounts(limit=300),或者根据返回的pagination参数遍历所有分页即可拉取全部账户。 - 账户区域不匹配:如果你使用的是Coinbase International、Coinbase Japan等区域站点的账户,默认全局API只会拉取Coinbase主站数据,你需要在初始化Client时指定对应区域的API端点。
修正后测试代码示例
from coinbase.wallet.client import Client from coinbase.wallet.error import AuthenticationError import config class API: def auth(): try: client = Client(config.API_KEY, config.API_SECRET) # 调大分页limit,避免漏掉持仓账户 accounts = client.get_accounts(limit=300) for wallet in accounts.data: # 只打印有余额的账户,过滤零值空账户 if float(wallet['balance']['amount']) > 0: print(f"{wallet['balance']['currency']}: {wallet['balance']['amount']}") except AuthenticationError: print("Login failed!")
内容的提问来源于stack exchange,提问作者Simon2215
相关产品推荐
相关产品推荐

