FAQ > 金融建模 > 数据提取 > 基本面数据

Q:通过模型计算获取主要财务指标(42)的指标值    

  • A:股票主要财务指标(42)表采集自股票的财报,该表主要记录定期报告的公布日及扣除非经常性损益后的净利润字段数据,其它指标属于非必须公布的数据,即若公告中有公布则采集,若无公布则记录为0。
    因此,如“每股收益”等字段的数据会存在为0的情况,天软一般建议这类指标通过天软计算模型获取。
    这类通过基础财务数据实时计算出来的指标模型天软做成了扩展指标列表(指标ID由990开头),用户可通过reportofall(指标ID,Rdate)的方式快速计算得到。

    指标对应关系如下:
    指标名称42表指标ID计算模型ID计算模型函数
    每股收益(摊薄)420029900000FAQ:EPS
    每股收益(扣除,摊薄)420049900001FAQ:EPSCut
    每股净资产420069900003FAQ:NetAssetsPerShare
    每股经营活动现金流量净额420089900005FAQ:CashPerShares
    每股资本公积金420099900018FAQ:CapitalFundPerShares
    每股未分配利润420109900021FAQ:RetainedProfit
    每股现金净流量420119900010FAQ:CashandCashEquivalentsPerShares
    净资产收益率(摊薄)(%)420129900100FAQ:NetEquityReturn
    净资产收益率(扣除,摊薄)(%)420159900101FAQ:NetEquityReturnCut

    其中,计算模型指标可以通过ReportOfAll调用计算模型ID或调用计算模型函数获取,二者结果一样。而42表中数据从公告中采集,与模型计算结果存在误差属于正常现象。
    取数示例:通过以上三种方式获取SZ000001在20240331的每股净资产
      setsysparam(pn_stock(),"SZ000001");
      setsysparam(pn_date(),20240630t);
      rdate:=20240331;
      v1:=report(42006,rdate);
      v2:=reportofall(9900003,rdate);
      v3:=NetAssetsPerShare(rdate);
      return array("公告数据":v1,"计算模型ID结果":v2,"计算模型函数结果":v3);

    结果:


    为了能取到每期的指标值,用户可以直接通过模型计算,或在取42表字段为0时,用模型计算补充。
    以下通过两种方式实现扩展财务指标对股票主要财务指标表的补充,用户可根据需求参考:
    1.直接用财务扩展指标拟合类主要财务指标(42)表;
    2.主要财务指标(42)表未公布的字段用扩展指标补充。

    方法一:直接用模型计算股票主要财务指标(42)表中每期的指标
    实现模型:TSDN_ExpendIndicators42
    使用前导入模型:附件:TSDN_ExpendIndicators42.fun
    模型源码:
    Function TSDN_ExpendIndicators42(stocks,begt,endt);
    Begin
    {
      说明: 通过天软扩展实时计算的财务指标合成股票主要财务指标表
      参数:
        stocks:string/array 个股/股票组合
        begt:datetime 开始日期
        endt: datetime 截止日期
      返回:数值,财务指标表
    }
      ov:=BackupSystemParameters2();
      dbegt:=DateToInt(begt);
      dendt:=DateToInt(endt);
      rt:=array();
      nI:=0;
      stocks:=ifstring(stocks)?array(stocks):stocks;
      for i,stock in stocks do
      begin
        SetSysParam(pn_stock(),stock);
        name:=StockName(stock);
        info:=select ["截止日"],["公布日"],["扣除非经常性损益后的净利润"]
           from infotable 42 of stock where ["截止日"]>=dbegt and ["截止日"]<=dendt end;
        for j in info do
        begin
          setsysparam(pn_date(),IntToDate(info[j,"公布日"]));
          rdate:=info[j,"截止日"];
          rt[nI,"StockID"]:=stock;
          rt[nI,"StockName"]:=name;
          rt[nI,"截止日"]:=rdate;
          rt[nI,"公布日"]:=info[j,"公布日"];
          rt[nI,"每股收益"]:=ReportOfAll(9900000,rdate);
          rt[nI,"每股收益(扣除)"]:=ReportOfAll(9900001,rdate);
          rt[nI,"每股净资产"]:=ReportOfAll(9900003,rdate);
          rt[nI,"每股经营活动现金流量净额"]:=ReportOfAll(9900005,rdate);
          rt[nI,"每股资本公积金"]:=ReportOfAll(9900018,rdate);
          rt[nI,"每股未分配利润"]:=ReportOfAll(9900021,rdate);
          rt[nI,"每股现金净流量"]:=ReportOfAll(9900010,rdate);
          rt[nI,"净资产收益率(%)"]:=ReportOfAll(9900100,rdate);
          rt[nI,"净资产收益率(扣除)(%)"]:=ReportOfAll(9900101,rdate);
          rt[nI,"扣除非经常性损益后的净利润"]:=info[j,"扣除非经常性损益后的净利润"];
          nI++;
        end
      end
      return rt;
    End;

    调用范例:获取SZ000001,SH600004一段时间的主要财务指标数据
      stocks:=array("SZ000001","SH600004");
      begt:=20230101t;
      endt:=20241210t;
      return TSDN_ExpendIndicators42(stocks,begt,endt);

    部分结果:

    方法二:获取股票主要财务指标(42)表,部分指标不公布的用扩展指标补充
    实现模型:TSDN_Infotable42
    使用前导入模型:附件:TSDN_Infotable42.fun
    模型源码:
    Function TSDN_Infotable42(stocks,begt,endt);
    Begin
    {
      说明:获取股票主要财务指标表,部分指标不公布的用扩展指标填充
      指标如下:
        指标名称           扩展指标ID
        每股收益(摊薄)        9900000
        每股收益(扣除,摊薄)      9900001
        每股净资产          9900003
        每股经营活动现金流量净额   9900005
        每股资本公积金        9900018
        每股未分配利润        9900021
        每股现金净流量        9900010
        净资产收益率(摊薄)(%)     9900100
        净资产收益率(扣除,摊薄)(%)  9900101
      参数:
        stocks:string/array 个股/股票组合
        begt:datetime 开始日期
        endt: datetime 截止日期
      返回:数值,股票主要财务指标表
    }
      ov:=BackupSystemParameters2();
      SetSysParam(pn_date(),endt);
      dbegt:=DateToInt(begt);
      dendt:=DateToInt(endt);
      rt:=array();
      nI:=0;
      stocks:=ifstring(stocks)?array(stocks):stocks;
      for i,stock in stocks do
      begin
        SetSysParam(pn_stock(),stock);
        info:=select *,IntToDate(["公布日"]) as "gbr" from infotable 42 of stock where ["截止日"]>=dbegt and ["截止日"]<=dendt end;
        update info set ["每股收益(摊薄)"]=["每股收益(摊薄)"]?:specdate(ReportOfAll(9900000,["截止日"]),["gbr"]),
                ["每股收益(扣除,摊薄)"]=["每股收益(扣除,摊薄)"]?:specdate(ReportOfAll(9900001,["截止日"]),["gbr"]),
                ["每股净资产"]=["每股净资产"]?:specdate(ReportOfAll(9900003,["截止日"]),["gbr"]),
                ["每股经营活动现金流量净额"]=["每股经营活动现金流量净额"]?:specdate(ReportOfAll(9900005,["截止日"]),["gbr"]),
                ["每股资本公积金"]=["每股资本公积金"]?:specdate(ReportOfAll(9900018,["截止日"]),["gbr"]),
                ["每股未分配利润"]=["每股未分配利润"]?:specdate(ReportOfAll(9900021,["截止日"]),["gbr"]),
                ["每股现金净流量"]=["每股现金净流量"]?:specdate(ReportOfAll(9900010,["截止日"]),["gbr"]),
                ["净资产收益率(摊薄)(%)"]=["净资产收益率(摊薄)(%)"]?:specdate(ReportOfAll(9900100,["截止日"]),["gbr"]),
                ["净资产收益率(扣除,摊薄)(%)"]=["净资产收益率(扣除,摊薄)(%)"]?:specdate(ReportOfAll(9900101,["截止日"]),["gbr"])
        end;
        deletefield(info,"gbr",1);
        rt&=info;
      end
      return rt;
    End;

    调用范例:获取SZ000001,SH600004一段时间的主要财务指标数据
      stocks:=array("SZ000001","SH600004");
      begt:=20230101t;
      endt:=20241210t;
      return TSDN_Infotable42(stocks,begt,endt);

    部分结果:
    下图中,如“每股收益(摊薄)”与“每股净资产”等进行了补充,而“每股收益(扣除,加权)”与"每股净资产(调整)"没有进行补充,效果如下: