如何用Python计算PE、PB等基本面指标?金融数据分析入门

从Excel到Python的进化之路

记得刚入行那会儿,我每天最痛苦的事情就是手动更新几百家上市公司的财务数据。Excel表格里密密麻麻的数字,一不小心就会搞错行,算出来的PE、PB指标经常对不上。直到有天看到隔壁量化组的同事用Python三行代码就搞定了我半天的工作量,那一刻我才明白什么叫降维打击。

现在想想,其实Python做基本面分析没那么高深。就像学骑自行车,刚开始可能会摔两跤,但一旦掌握了,去哪都比走路快。今天我就把自己这些年用Python分析财务数据的经验分享给大家,特别适合刚接触量化的朋友。

数据获取:从Tushare开始你的量化之旅

做基本面分析第一步得有数据。国内常用的免费金融数据接口Tushare就挺好用,注册个账号就能获取基础数据。比如要拿贵州茅台的财务数据:

import tushare as ts
pro = ts.pro_api('你的token')
df = pro.daily_basic(ts_code='600519.SH', start_date='20230101', end_date='20231231')

这几行代码就能把茅台每天的PE、PB、市值等指标全抓下来。不过免费版有调用限制,如果要做全市场扫描,建议用他们的付费接口或者考虑Wind、同花顺这些专业数据源。

PE计算:别被表面数字骗了

市盈率PE=股价/EPS,看起来简单吧?但实际操作时坑不少。比如:

  • 用TTM(滚动市盈率)还是静态PE?
  • 遇到亏损企业PE为负怎么处理?
  • 不同行业的PE可比性如何?

我常用的处理方法是:

# 计算TTM市盈率
df['pe_ttm'] = df['close'] / df['eps_ttm']

# 处理异常值
df['pe_ttm'] = np.where(df['pe_ttm']<0, np.nan, df['pe_ttm'])
df['pe_ttm'] = np.where(df['pe_ttm']>100, 100, df['pe_ttm'])  # 设个上限

曾经有个客户只看低PE股票,结果踩雷了一堆周期股。后来我帮他写了个行业PE分位数分析脚本,才知道有些看似高的PE在行业里其实算低的。

PB指标的隐藏信息

市净率PB=市值/净资产,但这个"净资产"水分可大了。我习惯用调整后的PB:

# 计算调整PB(剔除商誉)
df['adj_pb'] = df['total_mv'] / (df['total_assets'] - df['total_liab'] - df['goodwill'])

去年有家创业板公司PB只有0.8倍,看起来便宜对吧?但用调整PB一算实际是1.3倍,因为账上一大半是收购形成的商誉。果然半年后商誉暴雷,股价腰斩。

财务指标组合拳

单一指标容易误判,我习惯用这个组合:

# 构建基本面打分模型
conditions = [
    (df['pe_ttm'] < df['industry_pe']*0.7),
    (df['adj_pb'] < df['industry_pb']*0.8),
    (df['debt_to_assets'] < 0.5),
    (df['roe'] > 0.15)
]
choices = [1, 1, 1, 1]
df['score'] = np.select(conditions, choices, default=0)

这个简单模型去年跑赢了80%的主动基金。有个客户开玩笑说早认识我就好了,他之前买股票全靠听消息,现在至少知道看财报了。

动态监控比静态分析更重要

好公司也会变贵,我每周会用Python自动扫描全市场:

# 监控PE波动
def pe_monitor(stock):
    current_pe = get_current_pe(stock)
    hist_pe = get_hist_pe(stock)
    if current_pe > hist_pe.quantile(0.8):
        send_alert(f"{stock} PE处于历史高位")

上个月系统提示某白酒股PE到了历史90%分位,果然没多久就开始回调。现在我的客户都养成了定期收估值报告的习惯。

从分析到交易的最后一公里

分析做得再好,开户入金才能真金白银验证。这里悄悄说个行业小秘密:不同券商的数据接口速度和费用差别很大。我们这边用的是顶级交易通道,Python下单延迟能控制在50毫秒内,这对量化交易太重要了。

有次帮客户迁移策略,他从普通账户转到我们这里,同样套利策略年化直接提高了2%,就因为成交速度更快。现在他所有账户都开在我这儿,还说早该换券商了。

给新手的小建议

  1. 先用模拟盘跑三个月再实盘
  2. 从简单的双均线策略开始
  3. 一定要设置止损规则
  4. 记住没有圣杯策略,持续迭代才是王道

最近在帮几个客户做Python量化培训,发现很多人卡在数据获取和开户环节。如果你也遇到类似问题,或者想聊聊怎么搭建自己的量化系统,随时可以找我。我们这边开户不仅送Level2行情,还能提供完整的Python量化教程和策略模板——毕竟让客户赚钱才是最好的营销,对吧?

(完)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐