获取报表
拿到 Reference Code 后,调用 GetStatement 下载完整报表。
请求地址结构
Section titled “请求地址结构”https://ndcdyn.interactivebrokers.com/AccountManagement/FlexWebService/GetStatement常见参数:
| 参数 | 中文说明 |
|---|---|
t | Flex Token。 |
q | Reference Code,不是 Query ID。 |
v | 版本号。 |
Python 示例
Section titled “Python 示例”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.textprint("downloaded_bytes=", len(xml_text))真实报表里可能包含账户、成交、现金流水和税务字段。程序日志建议只记录下载状态、字节数、报表日期和脱敏后的请求编号,不要直接打印完整 XML。
XML 解析示例
Section titled “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 ID | SendRequest,用来生成报表。 |
| Reference Code | GetStatement,用来下载这次生成的报表。 |
| 项目 | 建议 |
|---|---|
| XML 解析 | 使用标准 XML 解析库,不要靠字符串切割。 |
| 字段缺失 | Flex Query 没勾选的字段不会出现。 |
| 大报表 | 使用流式解析或保存文件后再处理。 |
| 时间字段 | 明确时区和格式后再入库。 |