跳转到内容

获取报表

拿到 Reference Code 后,调用 GetStatement 下载完整报表。

https://ndcdyn.interactivebrokers.com/AccountManagement/FlexWebService/GetStatement

常见参数:

参数中文说明
tFlex Token。
qReference Code,不是 Query ID。
v版本号。
import requests
url = "https://ndcdyn.interactivebrokers.com/AccountManagement/FlexWebService/GetStatement"
params = {
"t": "YOUR_FLEX_TOKEN",
"q": "REFERENCE_CODE_FROM_SENDREQUEST",
"v": "3",
}
response = requests.get(url, params=params, timeout=60)
response.raise_for_status()
xml_text = response.text
print("downloaded_bytes=", len(xml_text))

真实报表里可能包含账户、成交、现金流水和税务字段。程序日志建议只记录下载状态、字节数、报表日期和脱敏后的请求编号,不要直接打印完整 XML。

import xml.etree.ElementTree as ET
root = ET.fromstring(xml_text)
status = root.findtext(".//Status")
if status == "Fail":
error_code = root.findtext(".//ErrorCode")
error_message = root.findtext(".//ErrorMessage")
raise RuntimeError(f"Flex report failed: {error_code} {error_message}")
for trade in root.findall(".//Trade"):
symbol = trade.attrib.get("symbol")
quantity = trade.attrib.get("quantity")
trade_price = trade.attrib.get("tradePrice")
print(symbol, quantity, trade_price)

不同 Flex Query 返回的节点和属性不同。上面的 Trade 只是成交报表示例;实际解析时应先按自己的 Query 字段建立映射。

注意 Query ID 和 Reference Code 的区别

Section titled “注意 Query ID 和 Reference Code 的区别”
名称用在哪一步
Query IDSendRequest,用来生成报表。
Reference CodeGetStatement,用来下载这次生成的报表。
项目建议
XML 解析使用标准 XML 解析库,不要靠字符串切割。
字段缺失Flex Query 没勾选的字段不会出现。
大报表使用流式解析或保存文件后再处理。
时间字段明确时区和格式后再入库。