从拿到一份评分公式 Excel,到交付一个免安装、双击即用的本地工具,全程记录这次「港股综合股筛选」项目的落地过程与真实成果。
一、起因:一张公式复杂的 Excel
朋友递来一份《港股分析.xls》,里面有一套两层结构的港股评分体系:
第一层(核心指标,按此排名):扣现市净率、扣非净资产收益率、扣非投资收益率、2年周息率、扣现总资产负债率
第二层(常规指标):市净率、净资产收益率、投资收益率、周息率、总资产负债率
思路很朴素:把"现金含量"算清楚——剔除现金后看估值(扣现市净率)、看赚钱能力(扣非ROE)、看负债水平(扣现负债率),再用股息率兜底。
公式不难,但问题来了:数据从哪来?港股没有免费的统一接口,财报口径五花八门,人民币/美元报表还得折算成港元。总不能每只股票手动翻报表填进 Excel——那要 99 只股票的话,得干到明年。
于是决定:写一个程序,把这个过程自动化。
二、方案:四个模块,全部免费数据源
先看整体设计(数据流程与文件结构):


核心思路:
清单驱动:watchlist.txt维护自选股(当前为恒生指数 93 只成分股 + 手工补充,共 99 只),想筛什么股就加一行。
多源兜底抓取:股价用腾讯行情;财务报表以 etnet 经济通为主源,个别股票没数据时自动切换东方财富港股 F10 接口;汇率走新浪外汇,人民币/美元报表实时折算成港元口径。
评分引擎:严格按示例 Excel 的公式复刻两层 10 项指标,并且每项得分都带完整的计算过程说明。
展示与导出:Flask 网页呈现排名,一键导出带公式说明的 Excel。
开发的时候使用Deepseek API Key,使用全程不需要任何 API Key,零费用,免费公开接口就能跑。。
三、落地:几个关键工程细节
真正动手后,踩坑点比想象中多:
1. 口径必须统一
港股财报里,内银、中移动、中芯、金沙这些公司用人民币或美元报表。如果直接拿原始数字和港元股价做除法,算出来的全是错的。所以抓回来后先按实时汇率折算为港元,再进评分引擎。
2. 免费源没有的字段,怎么处理?
「归母公平值变动」「一次性盈亏」「递延税项」这些细项,免费数据源里没有,按 0 处理,同时提供overrides.json支持按代码人工修正。规则透明,而不是假装精确。
3. 缓存与增量更新
首次抓全量 99 只约 4~6 分钟,之后 12 小时内直接读缓存;新增或失败的股票用「⚡ 只更新新增」几秒搞定,不用每次全量重抓。
4. 悬浮看公式
网页上鼠标悬停任意一个分数,会弹出这该项得分的完整代入过程,比如美丽华酒店的扣现市净率:
悬浮公式提示

分数不是黑盒,每一分都算得明明白白。
四、成果:恒指成分股综合评分 Top 10
跑完 99 只股票后的真实结果(数据时间 2026-08-07,第一层总分满分约 200):
评分排名图
说明:第一层是核心排名依据。美丽华酒店现金充足触发「现金≥总负债 → 15 分」等特殊规则拿高分;金沙中国、港交所因每股现金超过每股净资产触发高分规则。数据来自免费公开接口,评分公式复刻示例文件,仅作研究参考,不构成投资建议。
网页主界面长这样——顶部是 Top 10 卡片,一眼看到总分和五项分解:

下面是完整的明细表,所有 99 只股票、两层 10 项指标的分值与数值,支持按任意列排序:

点一下「📥 下载Excel」,导出 51 列的结果文件,每只股票都带逐项计算逻辑说明,还附一张评分规则表:
Excel 导出

五、分享:零安装,发给谁都能用
做完之后发现,工具要真正有用,得让家里人、朋友也能跑起来。所以做了两件事:
便携版打包:内置 Python 运行时,一键打包成约 80MB 的 zip,对方解压后双击start.bat就能用,不需要装任何软件。
局域网共享:改一行配置,同一 Wi-Fi 下所有人打开http://你的IP:8765就能看同一份排名,数据共享、不用各自抓取。
一个 Excel 公式,变成了一套可以随手转发、开箱即用的工具。
六、一点复盘
公式有价值,但落地靠工程:评分逻辑本身不难,难的是数据获取、口径统一、容错兜底这些脏活累活。
免费的源也能攒出完整数据链:腾讯 + etnet + 东财 + 新浪,四个公开接口拼出了完整管线。
工具要"能分享"才算完成:便携版 + 局域网,让程序真正被用起来。
如果你也对港股筛选、数据抓取、本地工具开发感兴趣,欢迎交流。
彩蛋:我在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5.2 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平,通过我的邀请链接注册即可获得 2000万Tokens 大礼包,期待和你一起在 BigModel 上畅享卓越模型能力。链接:https://www.bigmodel.cn/invite?icode=nQBVHnDaNoL9rwNseDBeZGczbXFgPRGIalpycrEwJ28%3D
夜雨聆风