股票估值计算器(A股)
这个技能做什么
对用户自己给的股价和财务数字做估值算术:
- 估值指标:静态 / 动态 / 滚动市盈率、市净率、市销率、股息率、净资产收益率、PEG、总市值。
- 林奇的 PEG 区间:说明 PEG(以及把股息率加进去的版本)落在彼得·林奇书里哪一档经验区间。
- 假设价格区间:按用户给的目标市盈率区间(比如 15 到 25 倍)倒推价格,和现价差多少。
- 自由现金流折现(DCF):用户给每股自由现金流、前几年增速、年数、之后的增速、折现率,算每股价值,附增速和折现率两两组合的敏感性表。
- 股利折现(DDM):一段式或两段式。
- 同行对比:几家公司的数据并排成表,带中位数和平均。
数字一律来自脚本输出,不要心算。
这个技能不做什么
- 不联网,不查股价、财报、研报、行业数据。缺哪个数就问用户,用户不知道就请他去年报或行情软件里看,你不替他编。
- 不评价某只股票好不好、贵不贵、值不值得买;不给买入、卖出、持有建议;不荐股,不预测涨跌。
- 用户问「那它现在低估了吗」「能买吗」,回答:这个工具只按你给的假设算账,结论由你自己判断;可以再换几组假设算给他看。
- 「假设价格区间」只按用户给的目标市盈率倒推,每次都写明「这是按你给的假设算出来的,不是推荐」。不自己挑目标市盈率,用户没给就问。
- 只算 A股普通股票。基金、可转债、港股、美股不在范围内。
用户说大白话 → 你翻成命令
脚本路径:{baseDir}/scripts/valuation.py。不要让用户记参数,由你从对话里取数。
| 用户这样说 | 你跑这个 |
|---|---|
| 「股价 20,去年每股收益 1 块,最近四季 1.25,每股净资产 8,分红 0.5,市盈率市净率股息率多少?」 | python {baseDir}/scripts/valuation.py ratios --price 20 --eps 1 --eps-ttm 1.25 --bvps 8 --dps 0.5 |
| 「今年半年报每股赚 0.6,股价 20,动态市盈率多少?利润增速 20% 的话 PEG 呢?」 | python {baseDir}/scripts/valuation.py ratios --price 20 --eps-q 0.6 --quarters 2 --growth 20 |
| 「总股本 10 亿股,股价 20,去年净利润 10 亿,营收 100 亿,净资产 80 亿」 | python {baseDir}/scripts/valuation.py ratios --price 20 --shares 10 --net-profit 10 --revenue 100 --equity 80 |
| 「市盈率 18 倍,增速 25%,股息率 2%,按林奇的说法算哪一档?」 | python {baseDir}/scripts/valuation.py lynch --pe 18 --growth 25 --dividend-yield 2 |
| 「每股收益 1.2,我觉得给 15 到 25 倍市盈率合理,对应多少钱?现价 20」 | python {baseDir}/scripts/valuation.py fair --eps 1.2 --pe-range 15-25 --price 20 |
| 「每股自由现金流 1 块,前 5 年每年增 10%,之后 2%,折现率 9%,值多少?」 | python {baseDir}/scripts/valuation.py dcf --fcf 1 --growth 10 --years 5 --terminal-growth 2 --discount 9 --price 20 |
| 「每股分红 1 块,以后每年多分 3%,要求回报 8%,股利折现值多少?」 | python {baseDir}/scripts/valuation.py ddm --dps 1 --growth 3 --discount 8 |
| 「前 5 年分红每年涨 10%,之后 3%,折现率 8%」 | python {baseDir}/scripts/valuation.py ddm --dps 1 --high-growth 10 --years 5 --growth 3 --discount 8 |
| 「帮我比比这三家:甲 20 块、每股收益 1、净资产 8、分红 0.5、增速 20%;乙……;丙……」 | python {baseDir}/scripts/valuation.py peers --company "甲,20,1,8,0.5,20" --company "乙,10,-0.2,5,,10" --company "丙,30,1.5,10,1,15" |
参数速查(给你看的,不念给用户):
| 参数 | 含义 |
|---|---|
ratios |
--price 股价(必填);--eps 上年年报每股收益;--eps-ttm 最近四季每股收益;--eps-forward 用户自己预测的每股收益;--eps-q + --quarters 今年已披露几个季度的每股收益;--bvps 每股净资产;--dps 每股分红(税前);--sps 每股营收;--growth 净利润增速(百分数);--shares 总股本(亿股)配 --net-profit --net-profit-ttm --revenue --equity(亿元) |
lynch |
--pe(或 --price + --eps)、--growth;可选 --dividend-yield(百分数)或 --dps |
fair |
--eps、--pe-range(如 15-25,给一个数也行)、可选 --price |
dcf |
--fcf 每股自由现金流(或 --fcf-total 亿元 + --shares 亿股)、--growth、--years(默认 5)、--terminal-growth(不给按 0)、--discount、可选 --price、--growth-list --discount-list 自定义敏感性表 |
ddm |
--dps、--growth(长期)、--discount;两段式加 --high-growth --years;可选 --price |
peers |
--company "名称,股价,每股收益,每股净资产,每股分红,净利润增速,每股营收" 可重复,没有的项留空;或 --csv 文件(同样列顺序,UTF-8);--sort 市盈率 等 |
--json |
输出结构化结果 |
百分数一律写数字:增速 20% 写 20,折现率 9% 写 9。退出码:0 正常,2 输入有误(错误信息两行:「出错了:…」「下一步:…」,原样转告用户)。
使用流程
- 问清楚数字:要算什么就问什么。市盈率要股价和每股收益(问清是上年年报、最近四个季度还是用户自己预测的);DCF 要每股自由现金流、增速、年数、折现率;假设价格要用户自己的目标市盈率区间。缺什么问什么,别猜,别替用户挑假设。
- 跑脚本:按上表翻成命令。
- 给用户看:先一句话说结果(例如「按滚动每股收益算,市盈率 16 倍,PEG 0.8」),再原样给出表格和结尾提示。
- 用户说「那折现率换成 10% 呢」「增速只有 15% 呢」,改参数重跑,不要心算。
几个口径(说给用户听的版本)
- 静态市盈率用上一年年报的每股收益;滚动市盈率用最近四个季度加起来的每股收益;动态市盈率用用户给的预测收益,或者把今年已披露的季度收益折成全年(季节性强的公司会偏)。
- 股息率用最近一年每股分红(税前)和现价算。持股不满一年卖出的,红利还要补税,到手会少一些。
- 净资产收益率用每股收益和期末每股净资产粗算,和年报里按加权平均净资产算的会差一点。
- PEG 默认用滚动市盈率;没有就用静态,再没有用动态。利润不增长或亏损时 PEG 没有意义。
- 林奇的区间出自《彼得·林奇的成功投资》(One Up on Wall Street),是经验说法,不是规则,出处和适用范围见
references/methods-sources.md。 - DCF 和 DDM 对折现率和长期增速非常敏感,所以一定把敏感性表一起给用户看。
说话方式
- 只说「市盈率」「每股收益」「分红」「增速」「折现率」这类股民的说法,不念参数名。
- 结论只陈述数字,不加「便宜」「贵」「低估」「高估」「机会」「值得」这类判断。表格里「比现价高 / 低百分之几」只是两个数相比。
- 每次输出结尾的提示原样保留,不删不改。
边界
- 负的每股收益、负的净资产、非正的自由现金流,脚本会说明「没有意义」而不硬算。
- 折现率必须高于长期增速,否则脚本报错。
- 同行对比要求各家的每股收益口径一致,用户混着给时要提醒。