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

使用IB_insync的accountvalues()获取'SettledCash'返回None求助

问题排查与解决建议

你的代码逻辑本身没问题,但返回None说明没有找到符合tag="SettledCash"且currency="USD"的账户条目,可以从以下几个方向排查:

1. 先确认账户数据里是否真的存在SettledCash

在调用函数前,先打印所有账户值的标签、货币和数值,确认目标条目是否存在:

# 先打印所有账户数据,排查可用标签
for item in ib.accountValues():
    print(f"标签: {item.tag}, 货币: {item.currency}, 值: {item.value}")

如果输出里没有SettledCash(或者是带空格的Settled Cash),那就是标签名称不对,需要用实际存在的标签名。

2. 检查是否订阅了账户更新

IB的API需要主动订阅账户数据才会返回完整的实时信息,如果没调用过ib.reqAccountUpdates(True),accountValues()可能只返回缓存的部分数据。在你的函数开头加上这行代码试试:

def returnAccountValue(tag="SettledCash", currency="USD"):
    ib.reqAccountUpdates(True)  # 开启账户数据订阅
    accountValues = ib.accountValues()
    for a in accountValues:
        if a.tag == tag and a.currency == currency:
            return float(a.value)

3. 处理标签名称的大小写/空格差异

有些情况下,API返回的标签可能带空格(比如Settled Cash)或者大小写不同,你可以修改匹配逻辑,忽略这些差异:

def returnAccountValue(tag="SettledCash", currency="USD"):
    ib.reqAccountUpdates(True)
    target_tag = tag.strip().lower()
    accountValues = ib.accountValues()
    for a in accountValues:
        if a.tag.strip().lower() == target_tag and a.currency == currency:
            return float(a.value)
    # 没找到时打印所有可用标签,方便排查
    print("可用标签列表:")
    for a in accountValues:
        print(f"- {a.tag} ({a.currency})")
    return None

4. 账户类型限制

部分账户类型(比如某些地区的现金账户)可能不会返回SettledCash字段,这种情况下你需要用IB提供的对应账户字段来替代。

内容的提问来源于stack exchange,提问作者OffensiveName

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:25:20