Portfolio Performance

一个建立在 IBKR 数据之上的独立只读报告层:将投资组合查看从券商交易会话中分离出来,并根据明确的受众与使用场景配置报告体验。

当数据能够离开原有界面,报告方式才可以真正围绕使用者设计。

IBKR 已经提供成熟的投资组合分析、可配置报表、分享工具和多种业绩指标。这里的机会并不是重复这些能力,而是利用其结构化报告基础,建立一个独立的信息系统。

不同使用者需要不同的报告语境。个人投资者可能更关注年度结果与现金流;投资组合经理可能优先查看时间加权收益率和归因;顾问或家族办公室则可能需要另一套信息层级。独立报告层使访问方式、指标选择、视觉组织与披露策略可以按需求配置,同时不改变券商的事实记录。

01

将投资组合查看与券商交易执行分离

私有实现将身份验证、报告访问与券商连接划分为不同边界。用户通过 Google 完成身份验证;应用经由 Repository 接口读取投资组合记录;IBKR Flex 仅由 GitHub Actions Worker 访问,并按计划任务或获授权的手动请求导入报表。浏览器路由不连接 IBKR,也不具备下单能力。

导入过程中,处理管线解析并标准化报表,在数据库事务开始前核对指定区段总计与账户快照关系;写入前检查失败时,现有记录保持不变。独立的 CI 测试用于保护会计恒等关系与固定测试数据的确定性。这些机制检查的是自建报告链路,不是对券商源数据的外部认证。

当前访问模型为单用户。由于身份、数据访问、领域计算与呈现层彼此分离,这套架构未来可以扩展至基于角色的视图、选择性披露,并在增加账户级数据分区后支持多账户报告。

同步流程将计划性的时效检查与 Settings 中获授权的手动请求统一交给同一个 Worker。流程依次验证运行环境、检查数据库状态、获取 PostgreSQL advisory lock、以有限退避轮询 IBKR、解析并核对返回的 XML、提交幂等导入、执行写入后回读检查、更新归档并释放锁。并发任务会安全退出;对账失败只记录经过清理的失败状态,最近一次成功的投资组合数据保持不变。

展示身份验证、IBKR 报告、导入自动化、受管理数据、共享领域逻辑与私有 Dashboard 边界的系统架构图
系统边界:IBKR 保持为事实记录来源,身份、导入写入、领域计算与界面呈现彼此分离。
打开完整尺寸工程图
展示触发、advisory lock、IBKR 轮询、解析、对账、数据库发布、归档与失败路径的同步流程图
同步控制:由同一个 Worker 协调并发、导入检查、数据库发布、写后回读、归档与经过清理的失败记录。
打开完整尺寸工程图
02

同一数据来源,不同报告需求

报告界面是对信息优先级的配置,而不是一套适用于所有人的固定答案。当前实现把我最常查看的内容组织为一条阅读路径:从账户状态进入业绩、归因、敞口与每日历史。其他角色可以沿用相同的记录与领域模型,同时为指标和视图建立不同的信息层级。

Portfolio Performance 概览,展示账户指标与可配置的业绩时间轴
报告层级从整合后的账户概览开始,再进入各类专门分析视图。
围绕账户价值、资金流与收益配置的投资组合时间轴
围绕账户价值、资金流与收益配置的业绩视图。
账户层面的盈亏归因分析
账户层面归因
证券层面的贡献分析
证券层面归因
投资组合敞口 Treemap 与配置视图
将敞口组织为可视化投资组合地图。
年度业绩热力图与选定月份日历
将长期模式与每日细节组织为不同阅读层级。
03

把机器可读记录转化为报告语言

券商记录主要面向账户报表与机器处理。构建独立界面需要增加一层语义模型:原始区段被转化为具有明确日期与定义的账户快照、现金流、持仓、业绩序列和归因模型。

界面构成第二次转译:它决定哪些指标应当同时出现、哪些概念需要独立视图、数字需要什么语境,以及细节如何逐层展开。因此,这项工作把数据建模与面向受众的信息设计结合在同一系统中,而不是把可视化当作计算结束后的装饰。

以信息设计呈现的系统工程项目。

Portfolio Performance 是对一个更普遍命题的可运行实现:结构化金融数据可以支撑一个独立报告层,其访问策略、语义模型与视觉层级均围绕明确受众进行设计。

系统将数据导入、领域建模、会计检查、界面架构与受控呈现连接为一条可运行链路。项目的核心成果,是建立从券商事实记录到受治理阅读体验的清晰边界,并以工程证据持续约束这条边界。

Portfolio Performance

一个建立在 IBKR 数据之上的独立只读报告层:将投资组合查看从券商交易会话中分离出来,并根据明确的受众与使用场景配置报告体验。