【Python量化实战全攻略 #09】估值因子手册:PE、PB、PS 怎么取、怎么用(附代码)
摘要:【Python量化实战全攻略 #09】估值因子手册:PE、PB、PS 怎么取、怎么用(附代码) 手册定位:模块二「选股因子实战」第 1 篇。估值因子是最经典的价值因子——PE/PB/PS。本篇讲因子怎么从接口数据算出
手册定位:模块二「选股因子实战」第 1 篇。估值因子是最经典的价值因子——PE/PB/PS。本篇讲因子怎么从接口数据算出来、怎么标准化、怎么用。
数据来源复用模块一:市值取实时行情(#01/#02),净利润/净资产/营收取财务三表(#04)。接口不重复罗列。
1. 你将得到什么
- PE(市盈率)、PB(市净率)、PS(市销率)的计算公式与取数字段;
- 把原始财务+行情整理成估值因子表的函数;
- 用分位数对估值因子做标准化的雏形;
- 估值因子的 4 个坑(负值、周期股、口径、极端值)。
2. 取数约定(复用)
| 因子 | 分子/分母 | 来源端点 | 见 |
|---|---|---|---|
| PE | 总市值 / 归母净利润 | 市值=实时行情;净利润=利润表 | #01 #04 |
| PB | 总市值 / 归母净资产 | 市值=实时行情;净资产=资产负债表 | #01 #04 |
| PS | 总市值 / 营业收入 | 市值=实时行情;营收=利润表 | #01 #04 |
3. 数据来源(复用,不重复罗列端点)
- 行情/市值:
/hs/real/ssjy/{代码}、/hs/fin/capital/{代码}.{市场}(详见 #01、#04) - 财务:利润表
/hs/fin/income、资产负债表/hs/fin/balance(详见 #04)
4. 核心模板函数(自包含可跑)
import pandas as pd
_MOCK = True
def build_valuation(df):
out = df.copy()
out["PE"] = out["总市值"] / out["归母净利润"].replace(0, pd.NA)
out["PB"] = out["总市值"] / out["归母净资产"].replace(0, pd.NA)
out["PS"] = out["总市值"] / out["营业收入"].replace(0, pd.NA)
return out
def quantile_score(s, ascending=True):
return s.rank(ascending=ascending, pct=True)
def run_check():
universe = pd.DataFrame([
{"代码": "600519", "总市值": 2.0e12, "归母净利润": 7.5e10, "归母净资产": 7.5e11, "营业收入": 1.5e11},
{"代码": "000001", "总市值": 3.0e11, "归母净利润": 3.0e10, "归母净资产": 4.0e11, "营业收入": 1.3e11},
{"代码": "600036", "总市值": 9.0e11, "归母净利润": 1.4e11, "归母净资产": 9.0e11, "营业收入": 3.0e11},
])
v = build_valuation(universe)
assert (v["PE"] > 0).all() and (v["PB"] > 0).all() and (v["PS"] > 0).all()
v["PE_score"] = quantile_score(v["PE"], ascending=True)
assert v["PE_score"].between(0, 1).all()
print("校验通过 | 样本PE:", v["PE"].round(1).tolist())
return v
if __name__ == "__main__":
run_check()
5. 跑通示例
v = run_check()
cheap = v[v["PE_score"] <= 0.34].sort_values("PE")
print(cheap[["代码", "PE", "PB", "PS"]])
6. 坑与注意事项
- 负盈利:亏损股 PE 为负无意义,要单独剔除或换用 PB/PS。
- 周期股陷阱:周期股在盈利高点 PE 极低,估值因子要结合行业中性。
- 口径统一:市值、净利润口径全样本统一。
- 极端值:微利股 PE 会爆高,标准化前先 winsorize 再排名。
7. 小结与下一篇预告
估值因子就位。下一篇讲成长因子——用营收/利润增速刻画高成长,是价值+成长的经典互补。
下一篇预告:《【Python量化实战全攻略 #10】成长因子手册:营收、利润增速因子构建(附代码)》
8. 免责声明
本文为因子构建方法示例,演示数据为虚构,不构成投资建议。
关于数据来源:本文因子所需的财务与行情数据均来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #01、#04),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲成长因子。
想亲自试一下?免费获取证书