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;

    结果展示: