Flex 报表服务
Flex Web Service 是 IBKR 用来生成和下载报表的 HTTP 接口。它适合拉取已经配置好的活动报表、成交记录、流水、持仓、现金变动和审计数据。
它不是实时交易接口,也不是实时行情接口。如果你的目标是实时下单、监听订单状态或请求历史 K 线,应优先看 TWS API 或 Web API。
| 场景 | 是否适合 | 原因 |
|---|---|---|
| 下载日终活动报表 | 适合 | Flex 本来就是报表系统。 |
| 拉取成交、流水、费用、现金变动 | 适合 | 可以在 Flex Query 里选择字段。 |
| 对账、审计、财务系统同步 | 适合 | 报表结构稳定,适合批处理。 |
| 实时行情 | 不适合 | 它不是行情流接口。 |
| 实时下单 | 不适合 | 它不能替代 placeOrder() 或订单 endpoint。 |
| 高频轮询账户变化 | 不适合 | 报表数据不适合秒级轮询。 |
简单说:Flex Web Service 更像“自动下载报表”,不是“实时交易 API”。
官方 Flex 流程通常分成两步:
- 在 Client Portal 里创建 Flex Query,选择要导出的报表类型和字段。
- 程序调用 Flex Web Service,先请求生成报表,再用返回的 reference code 下载报表内容。
典型链路可以这样理解:
Client Portal 中配置 Flex Query ↓获得 query id 和 token ↓调用 SendRequest 生成报表 ↓拿到 reference code ↓调用 GetStatement 下载报表这和 TWS API 的请求/回调模型完全不同。Flex 是 HTTP 报表请求,TWS API 是 Socket 连接和回调消息。
| 字段 | 中文解释 | 注意点 |
|---|---|---|
t / token | Flex Web Service token,用来授权请求。 | 不要写进前端页面或公开仓库。 |
q / query id | 在 Client Portal 中创建的 Flex Query ID。 | 不同报表配置会有不同 ID。 |
v / version | Flex Web Service 版本参数。 | 按官方文档当前要求填写。 |
| reference code | SendRequest 返回的报表引用码。 | 第二步用它调用 GetStatement。 |
| report format | 报表格式,例如 XML。 | 解析时要按实际格式处理。 |
新手最容易误解的是:Flex 请求不是“随便传一个账户号就能拿所有数据”。你需要先在 Client Portal 配置好 Flex Query,并拿到对应 token 和 query id。
请求结构示意
Section titled “请求结构示意”下面是结构示意,不直接作为可运行代码使用。真实请求前,需要先在自己的 IBKR Client Portal 中创建 Flex Query 并取得 token。
SendRequest:https://ndcdyn.interactivebrokers.com/AccountManagement/FlexWebService/SendRequest ?t=<你的 Flex Token> &q=<你的 Query ID> &v=3如果请求成功,服务会返回一个 reference code。然后再请求:
GetStatement:https://ndcdyn.interactivebrokers.com/AccountManagement/FlexWebService/GetStatement ?t=<你的 Flex Token> &q=<Reference Code> &v=3这里第二步的 q 不再是原始 Query ID,而是第一步返回的 reference code。这个细节很容易写错。
和 TWS API 的区别
Section titled “和 TWS API 的区别”| 对比项 | Flex Web Service | TWS API |
|---|---|---|
| 主要用途 | 报表、对账、流水、审计 | 行情、账户、订单、合约、实时回调 |
| 协议 | HTTP 请求 | TCP Socket |
| 前置配置 | Client Portal 创建 Flex Query | TWS / IB Gateway 登录并开启 API |
| 返回形式 | 报表文件或 XML 内容 | 回调函数持续返回数据 |
| 实时性 | 不适合实时交易 | 适合实时交易和行情订阅 |
| 下单能力 | 无 | 有 |
如果你只需要每天同步成交和费用,Flex 很合适。如果你要写策略、下单、撤单、看订单状态,Flex 不合适。
| 问题 | 常见原因 | 排查方向 |
|---|---|---|
| 请求没有数据 | Flex Query 没选对应字段或日期范围。 | 回到 Client Portal 检查 Query 配置。 |
| token 无效 | token 复制错误、过期或权限不对。 | 重新生成或确认 Flex Web Service 权限。 |
| 第二步下载失败 | 把 Query ID 当成 reference code 使用。 | GetStatement 要用第一步返回的 reference code。 |
| 数据不是实时的 | Flex 本来不是实时接口。 | 实时需求改用 TWS API 或 Web API。 |
| 解析失败 | XML/CSV 格式和代码解析逻辑不匹配。 | 先保存原始报表,再按实际字段解析。 |
什么时候选 Flex
Section titled “什么时候选 Flex”选择 Flex Web Service 的典型情况:
- 每天自动下载成交记录。
- 把 IBKR 活动报表导入自己的财务或对账系统。
- 需要审计流水、费用、现金变动和历史记录。
- 不需要实时行情或实时下单。
不要选择 Flex 的情况:
- 你要实时交易。
- 你要订阅行情。
- 你要监听订单状态。
- 你要在网页里做即时调试。
- 你还没有在 Client Portal 配置 Flex Query。
官方 Flex Web Service 文档说明,用户需要先配置 Flex Query,再通过 SendRequest 请求生成报表,并使用返回的 reference code 调用 GetStatement 下载报表。官方也将 Flex 放在报表和账户数据方向,而不是实时交易接口方向。
官方入口:Flex Web Service