A:股票主要财务指标(42)表采集自股票的财报,该表主要记录定期报告的公布日及扣除非经常性损益后的净利润字段数据,其它指标属于非必须公布的数据,即若公告中有公布则采集,若无公布则记录为0。
因此,如“每股收益”等字段的数据会存在为0的情况,天软一般建议这类指标通过天软计算模型获取。
这类通过基础财务数据实时计算出来的指标模型天软做成了扩展指标列表(指标ID由990开头),用户可通过reportofall(指标ID,Rdate)的方式快速计算得到。
指标对应关系如下:
其中,计算模型指标可以通过
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);
部分结果:
下图中,如“每股收益(摊薄)”与“每股净资产”等进行了补充,而“每股收益(扣除,加权)”与"每股净资产(调整)"没有进行补充,效果如下: