根据某板块龙头估值体系的分析方法论

分析标的:

        中信证券 600030

选取原因:

  1. 是券商板块的龙头
  2. 对应是沪指指数走势
  3. 市场的开启最受利益红利是券商板块

分析角度:

以标的股票每年最后一个交易日的股价作为分析基准,对比那一年的年度发表财务报表的净资产(bps),通过 股价/净资产 得出对应年度的市净率(PB),基于多年的市净率(PB)来分析趋势。

获取数据:

import tushare as ts
import pandas as pd
import datetime

token='你的token'
ts.set_token(token)
pro=ts.pro_api()

导入需要的库,这里使用的是tushare 获取股票历史数据,由于需要获取上市公司财务指标数据和获取A股月线数据,用户需要至少2000积分才可以调取。

各位用户可以通过 https://tushare.pro/register?reg=486428  这里注册tushare会员获取对应积分。

1. 我们要获取股票的财务报表数据,使用 pro.fina_indicator( )函数

df = pro.fina_indicator(ts_code='600030.SH',start_date='20081231',end_date='20230807',fields='ts_code,end_date,bps')
df

这里的数据是显示了季度与年度数据,而我们需要的是年度报表数据,所以要进行下一步数据筛选

df = pro.fina_indicator(ts_code='600030.SH',start_date='20081231',end_date='20230807',fields='ts_code,end_date,bps')
#日期格式转换
df['end_date'] = pd.to_datetime(df['end_date'])
#筛选年底的数据
df.drop_duplicates(subset=['end_date'],keep='first',inplace=True)
mask = df['end_date'].apply(lambda x: (x.month == 12) & (x.day == 31))
df1 = df[mask].reset_index(inplace=False, drop=True)
df1

 2. 我们要获取股票的年度最后一个交易日数据,使用 pro.monthly( )函数

df2 = pro.monthly(ts_code='600030.SH', start_date='20081231', end_date='20230807',fields='ts_code,trade_date,close')
df2['trade_date'] = pd.to_datetime(df2['trade_date'])
#筛选年底最后一个月数据
mask = df2['trade_date'].apply(lambda x: (x.month == 12))
df2 = df2[mask].reset_index(inplace=False, drop=True)
df2

3. 用df1的列bps 除以 df2的列close 计算 对应的 PB

df1['trade_date']=df2['trade_date']
df1['close']=df2['close']
df1['PB']=df1['close'].truediv(df1['bps'])
df1=df1.round({'PB': 2})
df1=df1.loc[:,['ts_code','end_date','PB']]
df1

 整体代码:

import tushare as ts
import pandas as pd
import datetime

token='你的token'
ts.set_token(token)
pro=ts.pro_api()

ts_code='600030.SH'
start_date='20081231'
today = datetime.datetime.today()
today = today.strftime('%Y%m%d')
end_date=today


def get_stockPB(ts_code,start_date,end_date):
    #获取股票年度每股净资产
    df = pro.fina_indicator(ts_code=ts_code,start_date=start_date,end_date=end_date,fields='ts_code,end_date,bps')
    df['end_date'] = pd.to_datetime(df['end_date'])
    df.drop_duplicates(subset=['end_date'],keep='first',inplace=True)
    mask = df['end_date'].apply(lambda x: (x.month == 12) & (x.day == 31))
    df1 = df[mask].reset_index(inplace=False, drop=True)
    #获取股票最后一个交易日股价
    df2 = pro.monthly(ts_code=ts_code, start_date=start_date, end_date=end_date,fields='ts_code,trade_date,close')
    df2['trade_date'] = pd.to_datetime(df2['trade_date'])
    mask = df2['trade_date'].apply(lambda x: (x.month == 12))
    df2 = df2[mask].reset_index(inplace=False, drop=True)
    #获取股票年度市净率
    df1['trade_date']=df2['trade_date']
    df1['close']=df2['close']
    df1['PB']=df1['close'].truediv(df1['bps'])
    df1=df1.round({'PB': 2})
    df1=df1.loc[:,['ts_code','end_date','PB']]
    return df1

get_stockPB(ts_code,start_date,end_date)

分析总结:

根据历史数据过往15年,估值较高的年份是2009年、2014年,对应PB分别是3.42、3.77;估值较低年份是2011年、2018年、2022年,对应PB分别是1.23、1.27、1.24

综上

  1. 在2009、2014的时候,券商龙头的PB估值可以来到3以上的 较高 区域。
  2. 在2011、2018、2022的时候,券商龙头的PB估值可以来到1.2附近的 较低 区域。
  3. 剔除2009、2011、2014、2018、2022的年份,其余年份的估值我们算一个平均值:(1.72+2.09+1.90+1.46+1.36+1.69+1.60+1.70+1.78+2.16)除以10,等于1.74,大约是1.7左右
  4. 以今天中信证券 收盘价 与第一季度bps 计算 截止2023年8月任7日的PB 为 24.77/16.5106 = 1.50

最后如果这波是行情,那剩下的5个月其对应的PB要到3以上,至少价格要到48以上。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇文终君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值