99.7 难点通俗解释:市净率(PB)VS市盈率(PE)VS市销率(PS)VS股息率(DV)

0. 承前

如果想更加全面清晰地了解金融资产组合模型进化论的体系架构,可参考:
0. 金融资产组合模型进化全图鉴

1. 简述:四大估值指标对比

  • 描述市净率(PB)含义:市净率衡量股票价格相对于每股净资产的比率。链接
  • 描述市盈率(PE)含义:市盈率衡量股票价格相对于每股收益的比率。链接
  • 描述市销率(PS)含义:市销率衡量股票价格相对于每股销售收入的比率。链接
  • 描述股息率(DV)含义:股息率衡量每股分红相对于股票价格的比率。链接

2. 比喻:四大指标对比

2.1 简单对比

  • 市净率(PB)关注"值多少钱"
小明的母鸡实际价值:
品种价值:1000元
买入价格:2000元

PB = 买入价格2000元 ÷ 实际价值1000元 = 2倍
含义:花了实际价值2倍的钱买鸡
  • 市盈率(PE)关注"赚到的钱"
小明的母鸡一年:
卖蛋收入:365元
减去成本:165元
纯赚到了:200元

PE = 母鸡价格4000元 ÷ 纯赚200元 = 20倍
含义:要20年的纯利润才能赚回买鸡钱
  • 市销率(PS)关注"卖出的钱"
小明的母鸡一年:
卖蛋收入:365元
不管成本:不考虑饲料费

PS = 母鸡价格4000元 ÷ 收入365元 = 11倍
含义:要11年的总收入才能买下母鸡
  • 股息率(DV)关注"分到的钱"
小明的母鸡一年:
分到现金:100元(每年固定分钱)
买鸡价格:2000元

DV = 年分红100元 ÷ 买鸡价格2000元 = 5%
含义:每年能从买鸡钱中拿回5%

2.2 生动比喻

  • 市净率就像问:
"这只鸡买贵了多少倍?"
- 比较买入价和实际价值
- 就像问:"溢价了几倍?"
  • 市盈率就像问:
"这只鸡要多少年的'纯赚'才能回本?"
- 算的是扣除饲料钱后真正赚到的钱
- 就像问:"要攒多少年的私房钱才够?"
  • 市销率就像问:
"这只鸡要多少年的'卖蛋钱'才能买下?"
- 只算卖蛋的总收入,不管花销
- 就像问:"要有多少年的营业额才够?"
  • 股息率就像问:
"这只鸡每年能分到买鸡钱的百分之几?"
- 算的是固定能拿到手的钱
- 就像问:"租金回报率是多少?"

2.3 区别要点

  • 主要区别
市净率(PB):看溢价程度
- 关注资产价值
- 比较购买溢价
- 适合评估购买性价比

市盈率(PE):看赚钱能力
- 考虑成本和开销
- 关注实际赚到的钱
- 适合评估盈利能力

市销率(PS):看卖货能力
- 不考虑成本开销
- 只关注卖出总额
- 适合评估市场占有率

股息率(DV):看分红能力
- 关注实际分到手的钱
- 类似租金回报
- 适合评估固定收益

3. 实际应用

3.1 选择建议

看价值投资用PB:
- 像买二手母鸡
- 要看是不是溢价太高
- 要有安全边际

看成熟企业用PE:
- 像养老母鸡
- 能稳定下蛋赚钱
- 预期比较稳定

看成长企业用PS:
- 像养小母鸡
- 还在成长期
- 暂时可能不赚钱

看稳定收益用DV:
- 像租出去的母鸡
- 能固定收租金
- 适合要稳定现金流

4. 总结

关注点:

  • PB看"买贵了没有"
  • PE看"要多久能回本"
  • PS看"卖货能力如何"
  • DV看"分红回报多少"

就像买母鸡:

  • PB看是不是溢价太多
  • PE看实际赚钱能力
  • PS看卖蛋总收入
  • DV看固定现金回报

5. 实现代码

def get_pb_data(ts_code=None, trade_date=None, start_date=None, end_date=None):
    """
    获取股票的市净率(PB)数据
    
    参数:
    ts_code (str): 股票代码,如'600230.SH'
    trade_date (str): 交易日期,如'20180726'
    start_date (str): 开始日期,如'20180701'
    end_date (str): 结束日期,如'20180731'
    
    返回:
    pandas.DataFrame: 包含股票代码、交易日期和PB值的数据框
    """
    try:
        # 初始化pro接口
        pro = ts.pro_api()
        
        # 设置要获取的字段
        fields = 'ts_code,trade_date,pb'
        
        # 根据不同的参数组合调用接口
        if ts_code and trade_date:
            df = pro.daily_basic(ts_code=ts_code, trade_date=trade_date, fields=fields)
        elif ts_code and start_date and end_date:
            df = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date, fields=fields)
        elif trade_date:
            df = pro.daily_basic(trade_date=trade_date, fields=fields)
        else:
            raise ValueError("请提供有效的参数组合")
            
        return df
        
    except Exception as e:
        print(f"获取PB数据时发生错误: {str(e)}")
        return None

def get_pe_data(ts_code=None, trade_date=None, start_date=None, end_date=None, pe_type='pe'):
    """
    获取股票的市盈率(PE)数据
    
    参数:
    ts_code (str): 股票代码,如'600230.SH'
    trade_date (str): 交易日期,如'20180726'
    start_date (str): 开始日期,如'20180701'
    end_date (str): 结束日期,如'20180731'
    pe_type (str): PE类型,'pe'为普通市盈率,'pe_ttm'为滚动市盈率
    
    返回:
    pandas.DataFrame: 包含股票代码、交易日期和PE值的数据框
    """
    try:
        # 初始化pro接口
        pro = ts.pro_api()
        
        # 确保pe_type是有效的选项
        if pe_type not in ['pe', 'pe_ttm']:
            raise ValueError("pe_type必须是'pe'或'pe_ttm'")
        
        # 设置要获取的字段
        fields = f'ts_code,trade_date,{pe_type}'
        
        # 根据不同的参数组合调用接口
        if ts_code and trade_date:
            df = pro.daily_basic(ts_code=ts_code, trade_date=trade_date, fields=fields)
        elif ts_code and start_date and end_date:
            df = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date, fields=fields)
        elif trade_date:
            df = pro.daily_basic(trade_date=trade_date, fields=fields)
        else:
            raise ValueError("请提供有效的参数组合")
            
        return df
        
    except Exception as e:
        print(f"获取PE数据时发生错误: {str(e)}")
        return None
       
def get_ps_data(ts_code=None, trade_date=None, start_date=None, end_date=None, ps_type='ps'):
    """
    获取股票的市销率(PS)数据
    
    参数:
    ts_code (str): 股票代码,如'600230.SH'
    trade_date (str): 交易日期,如'20180726'
    start_date (str): 开始日期,如'20180701'
    end_date (str): 结束日期,如'20180731'
    ps_type (str): PS类型,'ps'为普通市销率,'ps_ttm'为滚动市销率
    
    返回:
    pandas.DataFrame: 包含股票代码、交易日期和PS值的数据框
    """
    try:
        # 初始化pro接口
        pro = ts.pro_api()
        
        # 确保ps_type是有效的选项
        if ps_type not in ['ps', 'ps_ttm']:
            raise ValueError("ps_type必须是'ps'或'ps_ttm'")
        
        # 设置要获取的字段
        fields = f'ts_code,trade_date,{ps_type}'
        
        # 根据不同的参数组合调用接口
        if ts_code and trade_date:
            df = pro.daily_basic(ts_code=ts_code, trade_date=trade_date, fields=fields)
        elif ts_code and start_date and end_date:
            df = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date, fields=fields)
        elif trade_date:
            df = pro.daily_basic(trade_date=trade_date, fields=fields)
        else:
            raise ValueError("请提供有效的参数组合")
            
        return df
        
    except Exception as e:
        print(f"获取PS数据时发生错误: {str(e)}")
        return None

def get_dividend_yield_data(ts_code=None, trade_date=None, start_date=None, end_date=None, div_type='dv_ratio'):
    """
    获取股票的股息率数据
    
    参数:
    ts_code (str): 股票代码,如'600230.SH'
    trade_date (str): 交易日期,如'20180726'
    start_date (str): 开始日期,如'20180701'
    end_date (str): 结束日期,如'20180731'
    div_type (str): 股息率类型,'dv_ratio'为普通股息率,'dv_ttm'为滚动股息率
    
    返回:
    pandas.DataFrame: 包含股票代码、交易日期和股息率值的数据框
    """
    try:
        # 初始化pro接口
        pro = ts.pro_api()
        
        # 确保div_type是有效的选项
        if div_type not in ['dv_ratio', 'dv_ttm']:
            raise ValueError("div_type必须是'dv_ratio'或'dv_ttm'")
        
        # 设置要获取的字段
        fields = f'ts_code,trade_date,{div_type}'
        
        # 根据不同的参数组合调用接口
        if ts_code and trade_date:
            df = pro.daily_basic(ts_code=ts_code, trade_date=trade_date, fields=fields)
        elif ts_code and start_date and end_date:
            df = pro.daily_basic(ts_code=ts_code, start_date=start_date, end_date=end_date, fields=fields)
        elif trade_date:
            df = pro.daily_basic(trade_date=trade_date, fields=fields)
        else:
            raise ValueError("请提供有效的参数组合")
            
        return df
        
    except Exception as e:
        print(f"获取股息率数据时发生错误: {str(e)}")
        return None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI量金术师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值