本文是一次「用 Agent 从零搭建跨市场量化筛选管道」的完整实践复盘:覆盖数据源选型、指标口径设计、可视化对齐的数学推导,以及 44 只标的的筛选结果。

互动版报告(含 44 张双轴图表 + 阈值调节器)点击打开完整 HTML 报告

⚠️ 全文数据与判断仅为方法论演示,不构成任何证券买卖建议。

00 建设目标

要解决的问题

「找出股价处于历史低位、且分红持续稳定、股息率超过 5% 的股票」——这是一个看似简单、实际难以用现成工具完成的需求,卡点有三个:

  • 跨市场:A 股、港股、美股三地,主流看盘软件的选股器互不相通,口径也不一致。
  • 「持续稳定」无法用单一字段表达:所有平台给的都是当期股息率(TTM),但一个公司去年砍了一半分红、今年因为股价腰斩反而算出 8% 的股息率,这类标的会被排在最前面。
  • 「历史低位」不等于便宜:低位往往是基本面恶化的结果,需要把价格位置与分红趋势放在一起判断,而不是分开看两个数字。

预期效果

目标可验证的交付标准
覆盖面三地市场各扫描 100+ 只候选,各产出十几只待选
可甄别陷阱能自动区分「股价跌但分红涨」与「股价分红同步跌」
估值可比每只标的给出 PE / PS / PB / 分红率,并标注失真情形
判断可视化一张图内同时读出价格趋势、分红趋势、当时股息率水位

01 技术选型

业界方案

获取跨市场行情与分红数据,主流有四类路径,成本与可控性呈明显梯度:

类别代表覆盖市场历史分红明细成本
商业金融终端Wind / Bloomberg / Choice全球完整年费数万起
付费 APITushare Pro / AlphaVantage / Polygon单市场为主较完整按调用量计费
免费公开接口Yahoo Finance / AkShare / baostockYahoo 覆盖三地有除息事件流0
页面抓取东方财富 / 雪球 / 同花顺按站点需解析0,但易失效

自建方案

最终选择 Yahoo Finance 公开接口 + 本地 Python 计算,理由是它是唯一能用同一套代码同时覆盖三地市场的零成本方案(A 股 .SS/.SZ、港股 .HK、美股裸代码),且返回逐笔除息事件而非聚合后的股息率——这是判断「分红是否稳定」的前提。

维度优点缺点
覆盖一套代码通吃三地,代码后缀即可切换A 股部分小盘股财务字段缺失
数据粒度10 年月线 + 逐笔除息金额与日期基本面只回溯 4 个财年
成本零成本、无需注册无 SLA,接口随时可能变更
可控性指标口径完全自定义,可针对行业特例处理需自行承担口径正确性

方案对比

方案优点缺点本次是否采用
商业终端数据权威、口径统一、有客服兜底成本高;导出受限,难以脚本化批量处理
付费 API有 SLA,文档规范多为单市场,跨三地需拼接多家、口径需二次对齐
Yahoo 公开接口零成本、跨市场、有除息事件流接口不稳定(本次实测多个端点已被封禁),需自行兜底
页面抓取可拿到平台加工后的成品指标反爬、DOM 易变、维护成本最高

02 技术方案

整体拆成四层,每层只解决一件事:取数 → 算指标 → 视觉对齐 → 口径兜底

2.1 取数层:可用接口的实测结论

Yahoo 的接口在近年经历多轮收紧,本次实测有效结论如下(对做类似工具的人应该最有参考价值):

端点状态说明
v7/finance/quote❌ Unauthorized已封禁
v10/finance/quoteSummary❌ Invalid Crumb需 cookie+crumb 握手
v8/finance/chart✅ 可用行情 + 除息事件的主力来源
ws/fundamentals-timeseries✅ 可用财务数据,无需 crumb

行情与分红一次取全:

GET /v8/finance/chart/{symbol}?interval=1mo&range=10y&events=div|split
  → meta.regularMarketPrice        现价
  → events.dividends               逐笔除息金额 + 时间戳
  → indicators.quote[0].close      10 年月线收盘序列

财务数据用 timeseries,注意两个坑:只返回最近 4 个财年;返回数组顺序不固定,必须靠 meta.type[0] 判断类型而非下标。

GET /ws/fundamentals-timeseries/v1/finance/timeseries/{symbol}
    ?symbol={symbol}&type=annualTotalRevenue,annualDilutedEPS,
     annualBasicAverageShares,annualStockholdersEquity&merge=false
  → result[i][type][j].reportedValue.raw

另外 quarterlyPeRatio / quarterlyPsRatio 这类现成估值字段返回空(只有 meta 无数据),PE/PS 必须自己算。

2.2 指标层:把「持续稳定」翻译成可计算的量

核心设计是不用单一股息率,而是把除息流按年聚合后,抽出四个正交指标:

指标算法作用
10 年区间分位(现价 − 10年最低) / (10年最高 − 10年最低)量化「历史低位」
TTM 股息率近 365 天除息金额之和 ÷ 现价当期收益水平
削减次数2020–2025 中「每股分红同比降幅 > 15%」的年份数识别高股息陷阱的关键
派息 CAGR首尾年每股分红的复合增长率分红趋势方向

其中「削减次数」是整个方案里最有价值的一个字段。只看股息率排序时,欧派家居、方大特钢、海螺水泥都会排在很前面;加上这个字段后立刻暴露——方大特钢每股分红从 1.1 元砍到 0.03 元,属于典型的分子萎缩型伪高息。

估值指标全部用「现价 ÷ 最新年报每股指标」的静态口径自行计算:

PE = 现价 ÷ annualDilutedEPS
PS = 现价 ÷ (annualTotalRevenue ÷ annualBasicAverageShares)
PB = 现价 ÷ (annualStockholdersEquity ÷ annualBasicAverageShares)
分红率 = 最近年度每股分红 ÷ EPS

2.3 视觉层:让两条线的交点自带语义

这是本次方案最值得单独说的一部分。需求是「股价折线 + 每股分红放在同一张图」,双 Y 轴的常规做法是各自 auto-scale,但那样两条线的相对位置没有任何含义——纯粹取决于两轴的缩放比例。

改进思路:让两轴保持同一线性映射,交点就自带语义。设阈值为 th(默认 6%),约束为:

y1.min = y.min × th
y1.max = y.max × th

此时对任意时点,分红点的相对高度为 (dv − lo·th) / (th·(hi − lo)),股价点为 (px − lo) / (hi − lo),两者相等当且仅当 dv / px = th

结论:两条线的交叉点恰好等于阈值股息率,无需再画额外参考线。黄线在蓝线上方即「当时股息率 > 6%」,下方即「< 6%」。顶部滑块调整 th 时,44 张图同步重算。

推导过程中有两点容易想错:

  • 不必强制 0 起点。第一版让两轴都从 0 起,虽然满足比例关系,但把高价股的价格波动压成了一条平线。实际上 0 起点只是充分条件,必要条件仅仅是上式的线性映射,起点可任意。改为「股价区间 ∪ 分红区间÷th」后,44 张图里 38 张变成非 0 起点,形态清晰得多。
  • 阈值调低会导致分红线出框。若固定左轴上界,右轴上界 = max × th 会随阈值变小而收缩,分红线被裁掉。实测阈值降到 3% 时有 69 张图出框。修法是存原始四个端点而非合成后的最大值,每次调阈值时用 Math.max(pxHi, dvHi / th) 现算上界。

2.4 兜底层:三类必须特殊处理的口径失真

指标算出来只是第一步,直接展示会误导。本次识别出三类必须显式标注的失真:

失真类型成因处理方式命中标的
PE 无意义最新财年因大额减值转亏回退到最近盈利年度并标注「参考」领展、GIS、KHC、ARE
分红率虚高至 130%–470%REIT 的 EPS 含大额折旧摊销,本应看 FFO卡片加黄色警示条,说明口径不适用CCI、UHT、BFS、HIW、STWD 等
股息率 / 分红率虚高当年含一次性特殊分红展示逐年分红序列供交叉核对五粮液 360%、和记电讯香港 6241%

03 实施效果

3.1 量化交付

指标结果
候选池扫描量A 股 187 只 + 港股 113 只 + 美股 265 只 = 565 只
最终入选A 股 15 + 港股 14 + 美股 15 = 44 只
入选者中 6 年零削减A 股 13/15、港股 9/14、美股 11/15,合计 33/44(75%)
平均 TTM 股息率A 股 6.1%、港股 6.7%、美股 7.2%
识别出的口径失真11 处,全部显式标注
图表数量44 张双轴联动图,1%–15% 阈值区间内比例误差 0、出框 0

3.2 筛选条件

  • 低位:10 年月线区间分位 ≤ 50%(多数入选者 ≤ 20%)
  • 高股息:TTM 股息率 ≥ 5%(A 股放宽至 4.5%,因整体水平偏低)
  • 持续稳定:连续派息 ≥ 3 年,削减次数 0 者优先

3.3 各市场入选名单

A 股(15 只,按 10 年分位升序)

代码名称行业股息率10年分位PEPB削减评级
603833欧派家居家居7.63%1.7%10.11.050
601186中国铁建基建4.86%3.0%5.20.280
601668中国建筑基建5.99%5.7%4.80.380中高
600741华域汽车汽车零部件6.26%7.5%7.00.750
000895双汇发展食品5.81%9.6%16.94.051
000858五粮液白酒6.77%15.2%33.02.470
002867周大生黄金珠宝6.96%16.5%12.72.161
601818光大银行银行5.74%16.9%5.30.340中高
601098中南传媒出版5.24%21.9%11.81.161中高
601169北京银行银行5.53%22.5%6.40.340
600970中材国际建材工程6.08%28.6%7.20.901中高
601318中国平安保险5.06%34.3%7.20.940中高
600887伊利股份食品5.26%35.9%14.33.040中高
601166兴业银行银行5.81%38.3%5.70.460中高
000651格力电器家电7.38%41.5%7.81.551中高

港股(14 只)

代码名称行业股息率10年分位PEPB削减评级
0384中国燃气城燃/公用8.80%1.8%11.40.540
1193华润燃气城燃/公用5.96%3.8%10.30.832
0874白云山医药6.12%5.3%8.50.671
0390中国中铁基建5.30%5.7%4.20.260
0215和记电讯香港电信6.40%10.7%失真0.621
1186中国铁建基建7.49%11.2%3.90.210
2688新奥能源城燃/LNG6.39%11.5%8.81.100中高
1052越秀交通基建高速公路7.01%11.9%11.20.501中高
0003香港中华煤气公用5.13%14.0%22.62.140
0823领展房产基金REIT6.47%14.1%5.7*0.681
0762中国联通电信7.30%36.2%9.40.530中高
0576浙江沪杭甬高速公路7.11%36.5%7.10.750
2318中国平安保险5.38%39.7%7.61.000中高
3311中国建筑国际基建7.44%41.1%4.80.550中高

美股(15 只)

代码名称行业股息率10年分位PEPB削减评级
CCICrown Castle通信 REIT5.63%0.0%74.81
TUTelus电信12.34%0.8%18.81.310中高
KHCKraft Heinz食品6.32%4.1%11.2*0.720
CMCSAComcast媒体/宽带5.12%4.3%4.70.940
AREAlexandria RE生命科学 REIT7.00%5.1%27.6*0.550中高
CPBCampbell's食品6.77%5.5%11.51.760
GISGeneral Mills食品6.61%5.6%9.0*2.690中高
UHTUniversal Health Realty医疗 REIT6.98%7.7%33.63.870
PFEPfizer医药6.43%9.7%19.71.760中高
UPSUPS物流6.28%16.0%15.95.470
KRCKilroy Realty办公 REIT5.69%19.1%16.40.830
BFSSaul Centers零售 REIT6.94%22.1%31.22.670中高
SNYSanofi医药5.57%27.7%13.61.490
STWDStarwood Property抵押 REIT11.67%38.9%14.30.850
HIWHighwoods办公 REIT6.36%39.2%21.71.430中高

标 * 者为最新财年亏损、PE 取最近盈利年度参考值。

3.4 结构性发现

把 44 只标的横向对照,有几个不看数据不会注意到的现象:

  • 高股息集中在三个板块,且成因完全不同。港股是城燃 / 基建 / 高速(接驳费下滑但顺价修复中);A 股是银行 / 基建 / 食品饮料(估值压缩);美股是包装食品(GLP-1 减肥药冲击)+ 办公与生命科学 REIT(空置率上升)。同样 6% 的股息率背后是三套完全不同的风险。
  • 本轮高股息主要由「股价下跌」而非「分红增长」推动。把阈值调到 5% 可以看到,绝大多数标的的分红线是在近两年才刚刚越过股价线的。以中国建筑为例:2017-02 股价 6.57 元、股息率仅 2.34%;2026-08 股价 4.54 元、股息率 5.99%——分红从 0.15 涨到 0.27(分子在涨),但股息率翻倍主要来自分母腰斩。
  • 分红率已进危险区的有 5 只:双汇发展 95%、伊利股份 92.9%、中国燃气 100%、香港中华煤气 116%、UPS 100%。盈利再降一档就必须砍分红。
  • 分红安全垫最厚的是 Comcast:PE 4.7、PS 0.74,分红率仅 22.6%,自由现金流覆盖分红 3 倍以上。它同时处在 10 年区间 4.3% 分位。
  • 估值最便宜的一批集中在中资基建:港股中国铁建 PE 3.9 / PB 0.21、中国中铁 PE 4.2 / PB 0.26,A 股中国建筑 PE 4.8 / PB 0.38。核心变量都是化债推进后的应收账款回款。
  • BDC / mREIT 的两位数股息率不可与实业横比。这类标的分红来自利息收入,NAV 会随信用周期缩水,本质是不同的风险收益结构,报告中已单独标注行业。

3.5 验证方式

图表的正确性没有靠肉眼确认,而是用几何断言:取两条线的真实像素坐标,与算出的股息率做交叉校验。

const yPx = ch.scales.y.getPixelForValue(px);   // 像素 y 越小越靠上
const yDv = ch.scales.y1.getPixelForValue(dv);
(yDv < yPx) === (dv / px * 100 > threshold)     // 必须恒为 true

在 1% / 3% / 6% / 12% 四档阈值下遍历全部 44 张图,比例误差 0、几何断言错 0、出框 0。

这里踩过一个断言本身的坑:初版在 6% 档报了 2 处错,追查发现是中国铁建 2025-08 与越秀交通 2021-05 的股息率恰好等于 6.000000%,两条线像素完全重合——这正是「交点」的定义,是断言用了 >= 未处理边界,实现本身无误。


04 演进方向

方向具体做法解决什么
用 FFO 替代 EPS 处理 REIT接入 annualDepreciationAndAmortization,算 FFO = 净利润 + 折旧摊销 − 资产处置收益本次 8 只 REIT 的分红率只能标注「不适用」,无法真正评估其安全性
剔除特殊分红识别单笔金额显著偏离历史中位数的除息事件,拆分为「常规 + 特殊」两条序列五粮液、江铃汽车、白云山的股息率目前会虚高
补充自由现金流覆盖率FCF ÷ 分红总额,替代 EPS 口径的分红率分红的真实来源是现金而非会计利润,UPS 这类高资本开支公司差异明显
接入股息率历史分位逐月计算股息率序列,给出「当前股息率处于近 10 年 X% 分位」比价格分位更直接地衡量「便宜程度」
定时重跑 + 变更告警用定时任务周跑,对「削减次数增加」「分红率突破 90%」触发提醒目前是一次性快照,无法感知分红政策变化
数据源冗余Yahoo 为主,AkShare(A 股)+ 港交所披露易做交叉校验本次已实测 2 个端点被封禁,单一数据源有断供风险

附录

互动版报告

全球高股息 · 历史低位股筛选(完整 HTML,含 44 张双轴图表与阈值调节器)

报告内每只标的包含:PE / PS / PB / 分红率、10 年区间分位、距 10 年高点跌幅、削减次数、派息 CAGR、逐年分红序列、双轴联动图,以及低位证据与发展预期的定性分析。顶部滑块可调整股息率阈值,全部图表同步响应;鼠标悬停任意时点可读出该时点的收盘价、每股分红绝对值与当时股息率。

数据来源

  • 行情与除息事件:Yahoo Finance v8/finance/chart
  • 财务数据:Yahoo Finance ws/fundamentals-timeseries
  • 数据截止:2026-08-10
  • 图表库:Chart.js 4.4.1

免责声明

本文所有数据取自公开接口,定性判断基于公开资料整理,可能存在滞后或错误。文中提及的所有标的仅为方法论演示样本,不构成任何证券买卖建议。「历史低位」仅为价格统计位置,不代表估值便宜——低位往往对应基本面恶化。投资决策及风险请自行判断与承担。