FAQ > 金融建模 > 建模问题 > 股票相关

Q:平台上的市盈率、市净率、市现率、市销率函数很多,分别是怎么处理的    

  • A:
    一、不同函数算法比较
    市盈率相关函数
     计算个股市盈率常用的模型有StockPE、StockPE_II、StockPE_III、StockPE_IV、StockPE_VI、StockPE3、StockPE3_II、StockPE3_V、StockPE3_VI。
    算法:
      市盈率=总市值/净利润
    参数DataType说明:
     其参数DataType表明分母净利润是否采用扣非净利润,其取值说明:
    DataType值净利润取值
    0归属于母公司所有者净利润(46078),默认值,历史版本取值模式
    1扣除非经常性损益后的净利润

    不同模型计算市盈率时取的数据可能会有差异,具体如下:
     1)StockPE(EndT,DataType):与当前股票有关。
      指定日市盈率(最新年度报告)=指定日总市值/最新年度报告的净利润
      PS:StockPE3(DataType)等同于StockPE(sp_time(1),DataType),与当前股票、时间有关。

     2)StockPE_II(EndT,DataType):与当前股票有关。
      市盈率(指定财务数据加权)=指定日总市值/(指定日最新报告期的净利润*加权系数)
      其中,加权系数的计算方法:最新报告期Rdate对应的月份m,加权系数=12/m。
      PS:StockPE3_II(DataType)等同于StockPE_II(sp_time(1),DataType),与当前股票、时间有关。

     3)StockPE_III(EndT,RDate,DataType):与当前股票有关。
      市盈率(指定财务数据加权)=指定日总市值/(指定报告期的净利润*加权系数)
      注:与StockPE_II(EndT,DataType)的差别在于StockPE_III的报告期RDate是作为参数传入的,而StockPE_II取的是Endt对应的最新报告期。

     4)StockPE_IV(EndT,DataType):与当前股票有关。
      指定日市盈率(专用)=指定日总市值/(指定日当年三季报净利润/3*2+指定日当年中报净利润)
      PS:StockPE3_IV(DataType)等同于StockPE_IV(sp_time(1),DataType),与当前股票、时间有关。

     5)StockPE_VI(EndT,DataType):与当前股票有关。
      市盈率(最近12个月)=指定日总市值/最近12个月净利润(按公布日)
      PS:1、当DataType为空或者0时,
       (1)StockPE_V(EndT,DataType)兼容历史版本StockPE_V(EndT),但已被废弃;
       (2)StockPE3_V(DataType)兼容历史版本StockPE3_V();
       2、StockPE_V(EndT,DataType)等同于StockPE_VI(EndT,DataType),与当前股票有关;
       3、StockPE3_V(DataType)等同于StockPE_VI(sp_time(1),DataType),与当前股票、时间有关。


    范例一:

      // 获取平安银行2020-06-29最新年度报告的市盈率,净利润为归属母公司的净利润
      EndT:=20200629T;
      SetSysParam(PN_Stock(),'SZ000001'); 
      SetSysParam(PN_ChangedDateMode(),0);//指定日的股本考虑公布日
      return StockPE(EndT,0);//8.809922


    股票不同市净率函数算法比较
     计算市净率常用的模型有StockPNA、StockPNA_II、StockPNA_III、StockPNA_VI、StockPNA3、StockPNA3_II、StockPNACutGW_I、StockPNACutGW_II、StockPNACutGW_III、StockPNACutGW3_I、StockPNACutGW3_II、StockPNACutGW3_III。
     每个模型计算的市净率取的数据不同。计算数据及方法如下:
     1)StockPNA(EndT):与当前股票有关。
      指定日市净率(最新年度报告)=指定日总市值/最新年度报告净资产
      PS:StockPNA3()等同于StockPNA(sp_time(1)),与当前股票、时间有关。

     2)StockPNA_VI(EndT):与当前股票有关。
      指定日市净率(最新财务数据,按公布日)=指定日总市值/最近报告期净资产
      PS:1、StockPNA_II(EndT)等同于StockPNA_VI(EndT),但已被废弃;
       2、StockPNA3_II()等同于StockPNA_VI(sp_time(1)),与当前股票、时间有关。


     3)StockPCF3_III(EndT,RDate):与当前股票有关。
      指定日市净率(指定财务数据)=指定日总市值/指定报告期净资产

     4)StockPNACutGW_I(EndT):与当前股票有关。
      指定日市净率I(扣除商誉、最新年度报告)=指定日总市值/指定日最新年度报告(净资产-商誉)
      净资产取指定日最新年度报告的归属母公司股东权益合计。
      PS:StockPNACutGW3_I()等同于StockPNACutGW_I(sp_time(1)),与当前股票、时间有关。

     5)StockPNACutGW_II(EndT):与当前股票有关。
      指定日市净率II(扣除商誉、最新财务数据)=指定日总市值/指定日最近报告期(净资产-商誉)
      净资产取最近报告期的归属母公司股东权益合计-按公布日
      PS:StockPNACutGW3_II()等同于StockPNACutGW_II(sp_time(1)),与当前股票、时间有关。

     6)StockPNACutGW_III(EndT,RDate):与当前股票有关。
      指定日市净率III(扣除商誉、指定财务数据)=指定日总市值/指定报告期(净资产-商誉)
      净资产取指定报告期的归属母公司股东权益合计。
      PS:StockPNACutGW3_III(RDate)等同于StockPNACutGW_III(sp_time(1),RDate),与当前股票、时间有关。

    范例二:

      // 获取平安银行2020-06-29指定财务数据的扣除商誉的市净率
      EndT:=20200629T;
      RDate:=20200331;
      SetSysParam(PN_Stock(),'SZ000001');
      SetSysParam(PN_Date(),EndT);
      return StockPNACutGW3_III(RDate);//0.720432


    股票不同市现率函数算法比较
     计算市现率常用的模型有StockPCF、StockPCF_II、StockPCF_III、StockPCF_VI、StockPCF3、StockPCF3_II、StockPCF3_V。
     每个模型计算的市现率取的数据不同。计算数据及方法如下:
     1)StockPCF(EndT):与当前股票有关。
      指定日市现率(最新年度报告)=指定日总市值/指定日最新年度报告经营活动产生的现金流量净额
      PS:StockPCF3()等同于StockPCF(sp_time(1)),与当前股票、时间有关。

     2)StockPCF_II(EndT):与当前股票有关。
      指定日市现率(最新财务数据加权)=指定日收盘价/指定日(最近一期每股经营现金流量*加权系数)
      =指定日总市值/指定日(最近一期经营活动产生的现金流量净额*加权系数)

      PS:StockPCF3_II()等同于StockPCF_II(sp_time(1)),与当前股票、时间有关。

     3)StockPCF_III(EndT,RDate):与当前股票有关。
      指定日市现率(指定财务数据加权)=指定日总市值/(指定报告期经营活动产生的现金流量净额*加权系数)

     4)StockPCF_VI(EndT):与当前股票有关。
      指定日市现率(最近12个月,按公布日) =指定日总市值/指定日最近12个月经营活动产生的现金流量净额
      PS:1、StockPCF_V(EndT)等同于StockPCF_VI(EndT),但已被废弃。
       2、StockPCF3_V()等同于StockPCF_VI(sp_time(1)),与当前股票、时间有关。


    范例三:

      // 获取平安银行2020-06-29最近12个月经营活动产生的现金流量净额的市现率
      EndT:=20200629T;
      SetSysParam(PN_Stock(),'SZ000001');
      return StockPCF_VI(EndT);// -3.302257


    股票不同市销率函数算法比较
     计算市现率常用的模型有StockPMI、StockPMI_II、StockPMI_III、StockPMI_VI、StockPMI3、StockPMI3_II、StockPMI3_V。
     每个模型计算的市销率取的数据不同。计算数据及方法如下:
     1)StockPMI(EndT):与当前股票有关。
      指定日市销率(最新年度报告)=指定日总市值/指定日最新年度报告主营收入
      PS:StockPMI3()等同于StockPMI(sp_time(1)),与当前股票、时间有关。

     2)StockPMI_II(EndT):与当前股票有关。
      指定日市销率(最新财务数据加权)=指定日总市值/指定日(最近一期主营收入*加权系数)
      PS:StockPMI3_II()等同于StockPMI_II(sp_time(1)),与当前股票、时间有关。

     3)StockPMI_III(EndT,RDate):与当前股票有关。
      指定日市销率(指定财务数据加权)=指定日总市值/(指定报告期主营收入*加权系数)

     4)StockPMI_VI(EndT):与当前股票有关。
      指定日市销率(最近12个月,按公布日) =指定日总市值/指定日最近12个月主营收入
      PS:1、StockPMI_V(EndT)等同于StockPMI_VI(EndT),但已被废弃。
       2、StockPMI3_V()等同于StockPMI_VI(sp_time(1)),与当前股票、时间有关。


    范例四:

      // 获取平安银行2020-06-29最新财务数据加权的市销率
      EndT:=20200629T;
      SetSysParam(PN_Stock(),'SZ000001');
      SetSysParam(PN_Date(),EndT);
      return StockPMI3_II();// 1.637371


    二、对StockTotalValue函数2019-04-15使用影响的特别说明
     2019-04-15 主要对2个底层函数GetNShares和StockShares进行了升级,新增一个系统参数PN_ChangedDateMode(),对旧模型进行兼容,详见FAQ:2019-04-22-数据更新-数据更新019:关于股本函数的升级说明
     天软提供的旧模型,主要通过变动日进行判断,获取在EndT前最后一次变动的股本数据。旧模型没有考虑数据的公布日。
     获取股本数据时,
     (1)升级前,仅考虑变动日;
     (2)升级后,同时考虑变动日和公布日,并兼容“仅考虑变动日”的情况。
     提供股本及相关函数的使用说明,即在调用股本及相关函数前先设置语句:
     (1)“仅考虑变动日”:setsysparam(PN_ChangedDateMode(),1)
     (2)“考虑变动日和公布日”:setsysparam(PN_ChangedDateMode(),0)
     升级后,默认设置为“考虑变动日和公布日”

     由于市盈率、市净率、市现率、市销率指标涉及到StockTotalValue的使用,2019年升级后对部分数据结果可能受影响,用户应注意PN_ChangedDateMode()的使用。

    三、不再进行维护的函数,历史版本特别说明(2017-11-14之前的版本)
    函数名称函数别名接口算法说明

    StockPE_V
    指定日市盈率(最近12个月)EndT,DataType=指定日(总市值/最近12个月净利润),与当前股票有关。
    等同于StockPE_VI(EndT,DataType)

    StockPNA_II
    指定日市净率(最新财务数据)EndT=指定日(总市值/最近报告期净资产),与当前股票有关,净资产为归属母公司股东权益合计
    等同于StockPNA_VI(EndT)

    StockPCF_V
    指定日市现率(最近12个月)EndT=指定日(总市值/最近12个月经营活动产生的现金流量净额),与当前股票有关
    等同于StockPCF_VI(EndT)

    StockPMI_V
    指定日市销率(最近12个月)EndT=指定日(总市值/最近12个月主营收入),与当前股票有关
    等同于StockPMI_VI(EndT)