FAQ > 金融建模 > 应用案例 > 数据提取

Q:如何提取多个基金的一段时间内的月度收益率并存放在一个表中    

简述
特点:数据是天软表格中的数据,主要是展示数据的摆放
  • A:需求分析:
    1、天软提供了基金的月度收益率数据,数据在表格617中。
    2、天软还提供了取一个基金在一段区间内的指定周期的收益率序列,取的数据源也是617中的,函数为:FundNAQk(BegT,EndT,Cy)

    结果展示方式:
    1、纵向合并,即返回: StockID、截止日、净值增长率(%)
    2、横向合并,即返回以基金代码为列名,截止日为行下标的净值增长率(%)表格数据

    实现分别如下:
    范例01:纵向合并的实现
    说明:直接批量提取表格数据即可-数据库中也是这么存放的

      stocks:=getbk('股票型')[0:9];//只取前10个基金,仅当案例展示,用户可变更为自己的基金代码组合
      dbegt:=20200101;//注意此处为整型,非日期,若为日期需要用datetoint进行转换
      dendt:=20220101;
      return select ['StockID'],['截止日'],['净值增长率(%)']
          from infotable 617 of stocks where
           ['开始日']>=dbegt and ['实际截止日']<=dendt
          Order by ['开始日']
          end ;

    结果展示:


    范例02:横向合并-横轴是基金代码,纵轴是日期
    说明:要按基金分别存放列,则需要一个个券进行处理,不适合批量提取。

      stocks:=getbk('股票型')[0:9];//只取前10个基金,仅当案例展示,用户可变更为自己的基金代码组合
      begt:=20200101T;//注意此处是日期
      endt:=20220101T;
      ret:=array();
      for i:=0 to length(stocks)-1 do
      begin
        setsysparam(pn_stock(),stocks[i]);
        t:=fundnaqk(begt,endt,cy_month())[:,array('截止日','净值增长率(%)')];
        for j:=0 to length(t)-1 do
          ret[t[j]['截止日']][stocks[i]]:=t[j,'净值增长率(%)'];
      end
      return ret;

    结果展示: