Skip to content
SuperMarioYLPublic

About

把你自己导出的基金持仓,变成一份普通人看得懂的风险体检报告

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

仓瞰 cangkan

[//]: # (cross-linked bilingual sibling — English version: README.en.md)

十二只基金跌起来一模一样,不是巧合。把自己导出的持仓变成看得懂的风险体检报告;指标可复算 · 数据不出本地 · 不构成投资建议

version 0.2.0 python 3.10+ MIT license ci status

仓瞰品牌主视觉:分散的基金持仓被一条命令收敛成一份白话风险体检报告

仓瞰把你自己导出的基金持仓文件变成一份中文风险体检报告:确定性计算重仓集中度、重复持仓、隐性费率、风格漂移与最大回撤,再把每个数字翻译成白话。持仓数据不出本地,不荐股,不预测——只帮你看懂你已经买了什么。

Important

仓瞰不构成任何投资建议:它只解读已持有资产的风险指标,不做买卖、申赎或调仓推荐,不预测收益。

为什么需要它

定投两三年后,多数人的支付宝里有十几只基金。账户绿了会点开看一眼,但没人回答得了这些问题:

  • 这 12 只基金里,有几只重仓着同一批股票?(名字不一样,跌起来一模一样)
  • 每年被管理费、托管费隐性吃掉多少收益?
  • 我的组合到底是"大盘成长"还是"小盘价值"?
  • 这套持仓在过去的行情里最大回撤是多少?

App 内置诊断只给一句黑盒评分——看不到口径、不能导出、更不会告诉你"费率太高"(代销平台没有动力劝你注意它赚钱的费率)。把持仓导出成 CSV 之后,没有任何工具能读它。仓瞰补的就是这一层:输入是你自己的持仓,输出是一份每个数字都能复算的体检报告。

10 分钟跑通

# 安装(任选其一)
pipx install cangkan
# 或
uvx cangkan --help

# 1. 生成手动模板(零依赖路径:任何渠道的持仓都能手填)
cangkan template --out 持仓.csv

# 2. 填好『基金代码』和『份额』两列(示例见 docs/sample_portfolio.csv)

# 3. 体检
cangkan check --file 持仓.csv

跑完你会看到:持仓清单与基础统计,外加四张确定性指标表 —— 重仓重叠(哪几只基金重仓同一批股票)、组合集中度、隐性费率合计(年化吃掉多少)、回撤波动(最大回撤 / 年化波动率 / 与沪深300 相关系数)。

公开基金数据(净值、季报重仓股、运作费率、沪深300 指数)经 akshare 拉取并在本地缓存 24 小时;你的持仓明细永远不离开本机。任何一项取数失败都会在对应表里明示"数据不足",不会用行业均值补齐。

录屏演示

终端录屏:cangkan check 导入 10 只基金的示例持仓,实时拉取净值并输出持仓清单表与基础统计(估算市值 10,672.56 元)

该录屏录制于 v0.1.0(当时只交付 m1:清单与基础统计)。v0.2.0 起的四张指标表见下方"能力与边界"。

录制日的完整输入输出与版本记录见 docs/demo-results.json。

它如何工作

你的持仓 CSV ──► 导入器(模板/支付宝,只读文件,无平台自动化)
                        │
                        ▼
              数据层(akshare · 本地缓存 · 失败明示跳过)
                        │
                        ▼
              指标层(纯函数:重叠/费率/风格/回撤,可单测可复算)
                        │
                        ▼
              报告层(Markdown 体检报告 + 免责声明)
                        └─► 解读层(国产大模型,只引用已算出的数字,禁止建议语气)

架构蓝图:持仓 CSV 经导入器进入数据层与指标层,报告层与解读层输出,持仓数据不出本地

使用

cangkan template --out 持仓.csv        生成手动持仓模板
cangkan check  --file 持仓.csv         体检:清单 + 基础统计 + 四张风险指标表
cangkan --version                      查看版本

导入器自动识别两种表头:手动模板(基金代码,份额,中英文列名皆可)与支付宝导出(尽力解析 基金代码/持有份额 等已知列名;官方格式若变化会明确提示转用模板,绝不猜数据)。支付宝导出里的「持有金额」是市值、不是买入成本,所以只取代码与份额。

取数失败的基金会明示跳过并标注原因,不会静默计入统计;--report / --explain 属 m3 里程碑,尚未实现,请求它们会以退出码 3 明确失败(不会假装生成了一份报告)。

能力与边界

能力(v0.2) 状态 说明
持仓导入(模板/支付宝) ✅ 只读用户手动导出的文件
持仓清单 + 基础统计 ✅ 只数、取数状态、估算市值
公开数据本地缓存 ✅ SQLite,24h TTL,有界重试(最坏 1.5s/次调用)
重仓重叠 + 组合集中度 ✅ 季报前十大重仓股 Jaccard + 按市值加权的个股合计占比
隐性费率合计 ✅ 管理费+托管费+销售服务费,按市值加权年化(来源:天天基金运作费用)
风格透视 ⚠️ 四象限口径已实现;个股快照接口不可达时明示"数据不足",不猜市值/估值
回撤波动 ✅ 组合合成净值的最大回撤、年化波动率、与沪深300 相关系数
白话解读 + Markdown 报告 🚧 m3 接口契约已就位(cangkan/llm/、report/)
买卖/调仓建议 ❌ 永远不做 产品红线
平台账号登录/自动抓取 ❌ 永远不做 只读手动导出的文件

风格透视的口径(公开在代码与单测里):总市值 ≥ 500 亿元为大盘、否则小盘;动态市盈率 ≥ 30 为成长、0 < 市盈率 < 30 为价值;市盈率缺失或为负(亏损股)记入"未分类"——既不猜市值也不猜风格。它依赖 akshare 的全市场快照接口,该接口在受限网络下可能不可达,此时本表会明示"数据不足"而不是给一个编出来的比例。

付费与商业化

CLI 与本地 Markdown 报告永久免费开源。规划中的付费面是 v0.3 的精排 PDF 体检报告(深度排版 + 历史对比页,按份 ¥9.9),开源功能不会收费——先看大家是否真需要可打印的精排版,再动手做支付页。

路线图

  • v0.1:持仓导入 + 清单与基础统计 + 本地缓存
  • v0.2(当前):m2 四大确定性指标引擎(重仓重叠 / 费率合计 / 风格透视 / 回撤波动)直接渲染在终端
  • v0.3:m3 白话解读层 + Markdown 体检报告 + 精排 PDF(付费)
  • v0.4+:历史对比("上季度 vs 本季度")、渠道合并盘点

常见问题

这算投资建议吗? 不算,也不打算算。仓瞰只解读已持有资产的风险指标,所有指标口径公开在代码与测试里,报告页脚带免责声明。

我的持仓数据安全吗? CSV 在你本地解析、指标在本地计算;只有公开的净值/季报重仓股/费率/指数数据经 akshare 拉取并缓存。可选的解读层调用你自己配置的模型 API key,不经过任何第三方服务器。

为什么费率表里有的基金显示"未取到"? 因为运作费率确实没取到。仓瞰不会用行业均值替它补齐——那会把"不知道"变成"看起来很低",低估你的真实成本。合计只在费率已知的市值上加权,标题里会写明覆盖了多少市值。

和 App 内置诊断有什么区别? 口径透明(每张表怎么算的都能查)、可导出、可跨渠道合并——以及没有"劝你少交费率"的利益冲突。

开发

git clone https://github.com/SuperMarioYL/cangkan && cd cangkan
pip install -e . pytest
python -m pytest -q     # 48 项离线单测,不依赖网络

MIT © 2026 SuperMarioYL

About

把你自己导出的基金持仓,变成一份普通人看得懂的风险体检报告

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages