本篇主要讲解如何利用 FINANCE 指标计算市盈率,其他市净率等指标可以参考此文实现。
获取历史财务字段信息
调用 sm.get_history_finance_all_fields() 方法获取历史财务信息对应字段的索引号和名称
In [2]: sm.get_history_finance_all_fields()
Out[2]:
[(0, '基本每股收益'),
(1, '扣除非经常性损益每股收益'),
(2, '每股未分配利润'),
(3, '每股净资产'),
(4, '每股资本公积金'),
(5, '净资产收益率'),
(6, '每股经营现金流量'),
(7, '资产负债表_货币资金'),
(8, '资产负债表_交易性金融资产'),
(9, '资产负债表_应收票据'),
(10, '资产负债表_应收账款'),
(11, '资产负债表_预付款项'),
(12, '资产负债表_其他应收款'),
(13, '资产负债表_应收关联公司款'),
(14, '资产负债表_应收利息'),
(15, '资产负债表_应收股利'),
(16, '资产负债表_存货'),
(17, '资产负债表_消耗性生物资产'),
(18, '资产负债表_一年内到期的非流动资产'),
静态市盈率
公式:PE=股价/每股收益率=总市值/净利润
通常是将当前股价除以过去12个月的每股收益。如果公司准确披露了收益数据,那么这样计算的P/E是客观真实的。但历史市盈率也有不足之处,毕竟历史并不能完全代表未来。而且,如果公司遇到重大事件导致股价显著波动,则历史市盈率就不太能反映出这些变化。
首先计算“过去12个月的每股收益” :
In [17]: EPS = FINANCE(0) # 或者 FINANCE("基本每股收益")
In [18]: EPS.set_param("only_year_report", True) # 只获取年报中的基本每股收益
现在,我们可以定义静态市盈率的公式:
In [19]: PE = CLOSE / EPS
来看看,平安银行的 PE 结果:
In [20]: k = get_kdata("sz000001", Query(-500))
In [21]: PE(k).plot()
动态市盈率
动态市盈率的计算公式分母为未来一年的预测净利润,比如说该股票已经发布第一季度财报,这时我们的公式分母就要×4,半年度财报,这时我们的公式分母就要×2,三季度财报,这时我们的公式分母就要×4/3。
历史财务信息中记录的是上市公式的历史财务报表,而A股上市公司的财务报表披露分为:一季报、半年报、三季报和年报。此时,通过计算动态市盈率分母中的每个收益时,需要使用 FINANCE 中的参数 “dynamic”,该参数将按一季报值 x4,半年报 x2, 三季报 x4/3 的方式计算。
现在完成动态市盈率计算公式:
In [22]: EPS2 = FINANCE(0)
In [23]: EPS2.set_param("dynamic", True)
In [24]: PE2 = CLOSE / EPS2
将平台银行的静态市盈率和动态市盈率一起画出来看看
In [29]: PE(k).plot(label="静态市盈率", legend_on=True)
In [30]: PE2(k).plot(label="动态市盈率", legend_on=True, new=False)