用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/zyukyunman/vortex_quant --skill dividend-yield-strategy命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
用户明确要求发飞书时,直接发送文本消息到默认接收人;失败后再说明原因。支持发送、配置校验和故障排查。
通知与手机触达流程。适用场景: 需要设计或判断哪些运行阻塞、交易异常、审批、研究结论应该推送到飞书,以及通知内容和升级策略。
业绩预告漂移策略每日自动执行巡检技能。Use when: 检查 earnings-forecast auto-run 当日是否正常拉数、生成目标、提交 QMT、成交回报、未成交、ST 清理、任务状态与账户持仓是否一致。
基于 SOC 职业分类
| name | dividend-yield-strategy |
| description | 高股息之家"股息率模式"投资策略。Use when: 实现红利/高股息策略、股息率计算、4进3出选股规则、分红可持续性筛选、红利组合构建与再平衡。 |
| argument-hint | 描述股息率策略相关需求,如选股规则实现、股息率计算、组合构建等 |
| tags | ["vortex","vortex/skill","vortex/strategy-domain"] |
| obsidian_links | ["[[实例策略开发流程]]","[[策略域设计说明书]]","[[用户场景与体验增强设计]]"] |
来源:雪球用户「高股息之家」(老杜)系列文章 核心理念:股息率是低估的指示牌,不是为了图高股息本身
重要提示:股息率计算是整个策略的核心,必须严格按照以下规则执行,才能保证选股和买卖信号的准确性。任何偏离都可能导致策略失效。在使用高股息率策略时,务必确保股息率的计算符合以下规范:不要盲目使用数据源提供的股息率,而是要根据以下规则自行计算。
股息率 = 上年每股分红 / 当前股价
有送转股(配股/转增)时,需区分除权除息日前后:
| 时点 | 计算方法 |
|---|---|
| 除权除息日之前 | 正常计算:原每股分红 / 当前股价 |
| 除权除息日之后 | 调整每股分红:分红总额 / (原股数 + 送转股数),股价已自动除权 |
示例(万盛股份 2020 年报方案"10转4股派4元"):
全A股高股息率排名
→ 淘汰:连续分红不足 5 年
→ 淘汰:高分红不可持续(一次性收益、变卖资产等)
→ 淘汰:季报亏损
→ 淘汰:季报扣非净利润同比下滑 > 10%
→ 淘汰:ROE 异常(过低或过高需进一步分析)
→ 剩余为候选池
| 操作 | 条件 |
|---|---|
| 买入 | 股息率 ≥ 4% |
| 卖出 | 股息率 < 3%,或季报恶化(扣非净利润同比下滑 > 10%) |
股息率从 4% 降至 3%,对应股价涨幅 = 33.33%:
买入价 = 每股分红 / 4% = 0.4 / 0.04 = 10.00 元
卖出价 = 每股分红 / 3% = 0.4 / 0.03 = 13.33 元
涨幅 = 13.33 / 10.00 - 1 = 33.33%
买入条件是股息率 4% 以上,实际安全边际更大。年化收益率目标:15%。
高股息率本身即安全边际。若股息率优于无风险利率,股价通常跌无可跌。
季报扣非净利润如果开始以 10% 以上速度同比负增长,是危险信号。
原因:股价下跌的同时分红也会下降,股息率可能维持表面高位,具有欺骗性。
股息率 = 分红 / 股价,自带择时功能:
不根据技术形态择时,不根据大盘走势择时。只要符合条件,随时买入。
把投资当黑匣子,股息率就是那个"开关"。
长年高股息率基本保证了:
例外情况用组合方式降低影响。坚持单因子,学习是为了增加判断力,不是搅乱投资框架。
持股守息,等待过激;若无过激,持股守息。
| 概念 | 含义 |
|---|---|
| 守息 | 以股息为根本出发点和安全垫;股息是最基础的收益和财富增长源泉 |
| 过激 | 价格趋势性上涨,甚至远超内在价值——可遇不可求 |
实际投资报酬率 = ROE / PB
银行类比:净资产 100 元,ROE 5%,若以 PB=2(200 元)买入,实际回报 = 5/200 = 2.5%。
PE = PB / ROE = 1 / 实际投资报酬率
| 基准 | 收益率 |
|---|---|
| 一年定期存款 | 1.75% |
| 五年定期存款 | 2.75% |
| 十年期国债 | ~3.28% |
| 投资安全标准 | ≥ 国债收益率 × 2 ≈ 7% |
| 数据项 | 用途 | 频率 |
|---|---|---|
| 年度分红明细 | 计算每股分红(全年汇总) | 年报发布后更新 |
| 除权除息信息 | 送转股后调整每股分红 | 事件触发 |
| 日收盘价 | 计算实时股息率 | 日频 |
| 季度财报(扣非净利润) | 季报原则筛查 | 季频 |
| 连续分红年数 | 选股池过滤 | 年频 |
| 行业分类 | 行业仓位限制 | 低频 |
def calc_dividend_yield(stock, date):
"""计算静态股息率"""
# 获取最近已公布年报的完整年度
report_year = get_latest_annual_report_year(date)
# 汇总该年度所有分红(年报+中报+季报分红)
total_dps = sum_all_dividends_in_year(stock, report_year)
# 处理送转股:除权除息日后需调整
if has_ex_rights_after(stock, report_year, date):
total_dps = adjust_for_bonus_shares(total_dps, stock, report_year)
price = get_close_price(stock, date)
return total_dps / price
def screen_universe(date):
"""构建候选池"""
candidates = get_all_a_shares()
# 连续分红 ≥ 5 年
candidates = [s for s in candidates if consecutive_dividend_years(s) >= 5]
# 淘汰季报亏损 & 扣非净利润同比下滑 > 10%
candidates = [s for s in candidates if not quarterly_deteriorated(s, threshold=-0.10)]
# 淘汰高分红不可持续
candidates = [s for s in candidates if dividend_sustainable(s)]
# 按股息率排序
candidates.sort(key=lambda s: calc_dividend_yield(s, date), reverse=True)
return candidates
def generate_signals(portfolio, universe, date):
"""生成买卖信号"""
signals = []
# 卖出信号
for stock in portfolio:
dy = calc_dividend_yield(stock, date)
if dy < 0.03 or quarterly_deteriorated(stock, threshold=-):
signals.append(Signal(stock, ))
sell_count = ( s signals s.action == )
buy_candidates = [s s universe s portfolio]
buy_candidates = [s s buy_candidates calc_dividend_yield(s, date) >= ]
stock buy_candidates[:sell_count]:
signals.append(Signal(stock, ))
signals
Q: 连续5年分红需要每年股息率都在4%以上吗? A: 不需要。只要连续5年有分红即可,不考虑每年股息率高低。
Q: 季报负增长是同比还是环比? A: 同比(与去年同期比较),看扣非净利润增速。
Q: 4进3出会不会买在高点卖在低点? A: 有可能。个别标的可能亏损,这就是为什么要做组合——保证整体盈利。系统是"容错"的,不追求百发百中。
Q: 为什么不是5进4出或5进3.5出? A: A股中股息率稳定 > 5% 的标的较少,4% 是实用的平衡点。
Q: 直接买红利ETF是否更好? A: 作者另有专文分析,非简单替代关系。
Q: 用静态股息率还是TTM? A: 静态。"本系统用的是静态股息率,一般不算滚动的。"
投资收益增长率 = ROE × (1 - 分红率) + (分红率 / PB) × ROE
| 项 | 含义 | 经济学解释 |
|---|---|---|
| 第一项: ROE × (1 - 分红率) | 内生增长率(g) | 留存收益再投资产生的净资产增长,即公司不靠外部融资、自我滚动的增速 |
| 第二项: (分红率 / PB) × ROE | 分红再投资回报率 | 投资者将分红按当前市价买回股票所获得的增量回报 |
1) 内生增长率 g = ROE × 留存率 = ROE × (1 - d) 其中 d = 分红率
2) 股息率 = 每股分红 / 股价 = (EPS × d) / (BPS × PB)
= ROE × d / PB (因为 EPS/BPS = ROE)
3) 分红再投资回报 = 股息率 × ROE/PB 的隐含杠杆
简化: (d / PB) × ROE 即以低于净资产的价格(PB<1)或溢价(PB>1)买回产生的回报差异
4) 投资收益增长率 = g + 分红再投资回报
= ROE × (1 - d) + (d / PB) × ROE
此公式是检验"高股息是否真正创造价值"的核心工具:
def calc_investment_return_growth(roe: float, payout_ratio: float, pb: float) -> float:
"""
计算投资收益增长率
Parameters
----------
roe : float
净资产收益率 (例如 0.15 表示 15%)
payout_ratio : float
分红率/股利支付率 (例如 0.30 表示 30%)
pb : float
市净率
Returns
-------
float
投资收益增长率
"""
if pb <= 0:
return float('nan')
g_internal = roe * (1 - payout_ratio)
g_reinvest = (payout_ratio / pb) * roe
return g_internal + g_reinvest
核心矛盾: 当公司通过提高分红率来维持表面高股息率,而非通过盈利增长驱动时, 投资者看到的"高股息"是一种统计幻觉。
陷阱链条:
盈利增速放缓 → 管理层提高分红率(d↑)维持股东回报预期
→ 留存收益减少 → 净资产增速放缓 → BPS增长停滞
→ ROE因分母(净资产)增长慢而表面稳定甚至上升
→ 股息/股价 看似很高,但公司内在价值已停止增长
→ 一旦盈利进一步恶化,分红也将被迫下调 → 戴维斯双杀
| 指标 | 表象 | 实质 |
|---|---|---|
| ROE | 维持 25%+ 高位 | 依靠提高分红率压低净资产增速实现,而非盈利能力提升 |
| 分红率 | 从 50% 逐步提升至 70-100% | 留存收益大幅减少,内生增长率 g = ROE×(1-d) 大幅缩水 |
| 股息率 | 4-6% 看似诱人 | 股价持续下跌推高的被动式高股息率,非主动分红增长 |
| 营收 | 增速从 15%+ 降至个位数 | 消费降级 + 库存压力 + 渠道价格倒挂 |
| 净利润 | 仍在增长但增速骤降 | 提价空间收窄,量价齐升逻辑被破坏 |
假设某白酒龙头:
情景A (2019年 高速增长期):
ROE = 30%, 分红率 = 51.9%, PB = 10
g = 0.30 × (1 - 0.519) + (0.519 / 10) × 0.30
= 0.1443 + 0.01557 = 15.99%
→ 高增长,第一项主导(内生增长14.4%),PB高但增速够
情景B (2025年 增速放缓期):
ROE = 28%, 分红率 = 75%, PB = 6
g = 0.28 × (1 - 0.75) + (0.75 / 6) × 0.28
= 0.07 + 0.035 = 10.5%
→ 增长率从16%降至10.5%,内生增长率从14.4%骤降至7%
→ 若分红率继续提高至100%: g = 0 + (1/6)×0.28 = 4.67%
→ 几乎全靠分红再投资,公司本身不再增长
分红率趋势性上升,同时营收/净利润增速趋势性下降
ROE 稳定但 ΔROE 的驱动力变化
投资收益增长率逐年下降
股息率上升主要来自股价下跌而非分红增加
行业基本面恶化信号
# 在选股管道中增加高股息陷阱检测
def is_dividend_trap(ts_code, ds, date) -> bool:
"""
检测是否为高股息陷阱
Returns True 如果:
1) 分红率连续2年上升 AND 扣非净利润增速连续2年下降
2) 投资收益增长率连续3年递减
"""
# 获取最近3年数据
periods = get_latest_n_annual_periods(date, n=3)
payout_trend = get_payout_ratio_series(ts_code, periods)
profit_growth_trend = get_deducted_profit_yoy_series(ts_code, periods)
irg_trend = get_investment_return_growth_series(ts_code, periods)
# 条件1: 分红率↑ + 盈利增速↓
if is_monotone_increasing(payout_trend) and is_monotone_decreasing(profit_growth_trend):
return True
# 条件2: 投资收益增长率连续递减
if is_monotone_decreasing(irg_trend) and len(irg_trend) >= 3:
return True
return False
高股息率本身不构成买入理由。只有当高股息率伴随稳定或增长的内在价值时, 才是真正的安全边际。用投资收益增长率公式验证: 若增长率持续递减,则"高股息"是接飞刀,不是捡便宜。