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

Q:如何提取指定日哪些公司发布了财务报告    

  • A:天软数据采集好后,是直接入库到各证券相关的数据表格中的,若需要筛选出某一天哪些证券有发布财务公告,则需要通过对数据的公布日进行筛选得到。
    实现举例:
    本文以股票的财报为例,通过对业绩预测表(40)、业绩快报表(41)、定期财务报表(42)数据进行筛选,提取出在今日与历史某日哪些证券发布了相关公告。

    说明:
    下面两个范例中,用到了两种实现方式,
    其中,范例一比较高效,但它只适合筛选出今日最新公告的情况。
    范例二适应所有情况,即既支持历史日的筛选,也支持今日的筛选,若同一日公布了多个数据,则会返回多个记录。
    若有其它类似的需求,如基金的相关表格的公告的时候,也可以采用范例二的实现方式。
    目标的实现可有多种方式,下面提供一种笔者认为较优的方式进行举例,供用户参考。

    范例01:今日发布了财务公告的公司
    注:通过base(公布日字段id)方式提取指定表中最新的公布日数据。
    //--取出所有股票今日的最新公布日
     t:= select thisrow as '代码',spec(base(42001),thisrow) as '定期-公布日',
       spec(base(41002),thisrow) as '快报-公布日',
        spec(base(40001),thisrow) as '预测-公布日'
       from getbk("A股") end;
    //--筛选出今日公布了数据的证券--三个公布日有一个满足即可
     dendt:=datetoint(today());
     return select * from t where ['定期-公布日']=dendt or ['快报-公布日']=dendt
         or ['预测-公布日']=dendt end;


    返回:(运行结果的日期是20240710日,公布日为0说明无相关公告,公布日等于今日则为今日发布了该公告)


    范例02:历史指定日发布了财务公告的公司
    注:只能通过infotable对逐个表格进行筛选公布日符合指定日的记录
    endt:=20240706T;
    stocks:=getAbkbydate("A股",endt);
    dendt:=datetoint(endt);
    t0:= select ["StockID"],["公布日"],["截止日"],"预测" as "公告" from infotable 40 of stocks
        where ['公布日']=dendt end;
    t1:= select ["StockID"],["公布日"],["截止日"],"快报" as "公告" from infotable 41 of stocks
        where ['公布日']=dendt end;
    t2:= select ["StockID"],["公布日"],["截止日"],"定期" as "公告" from infotable 42 of stocks
        where ['公布日']=dendt end;
    return t0 union t1 union t2;

    返回: