FAQ > 金融建模 > 数据提取 > 天软指标数据的提取

Q:取数Demo-取一段时间内多个股票的指标值    

  • A:在实际提取指标数据过程中,由于需要实时计算,所以不能进行批量提取,需要循环调用才可实现。

    下面我们给三个非常常用的取数案例(用户可对照返回的结果样示找自己合适的):
    范例1:取一段时间内A股个股的每日流通市值
    逻辑:外层股票循环,内层时间循环,指定股票,指定时间取指标值。
    数据结果存放:以时间为行标,证券代码为列标进行存储,优点是取数方便,缺点是一次只能存放一个指标值。

      begt:=20210101t;
      endt:=20210201t;
      bkName:='A股';
    //上面三个变量可封装为参数
      stocks:=getbk(bkName); //获取股池
      setsysparam(pn_cycle(),cy_day()); //周期
      dayList:= markettradedayqk(begt,endt); //取区间时间序列
      data:=array();
      for i:=0 to length(stocks)-1 do //股票循环
      begin
        setsysparam(pn_stock(),stocks[i]); //设置当前证券代码
        IPO:=firstday();
        for j:=0 to length(dayList)-1 do //时间循环
        begin
          dayEnd:=dayList[j];
          if IPO>dayEnd then //剔除掉还未上市的
            continue;
          //获取指标值-股票流通市值
          data[datetoint(dayEnd),stocks[i]]:=StockMarketValue(dayEnd);
        
        end;
      end;
      return data;


    结果展示:


    范例2:取一段时间内A股个股的每日涨幅与收盘价等指标
    逻辑:外层股票循环,内层股票交易日序列的时间循环,取指定股票指定日的指标值
    数据存放:行标为自增序列,列标为各指标名,优点是可同时存放多个指标的数据

    begt:=20210101t;
      endt:=20210112t;
      bkName:='A股';
      stocks:=getbk(bkName); //获取股池
      setsysparam(pn_cycle(),cy_day()); //周期
      data:=array();
      k:=0;
      for i:=0 to length(stocks)-1 do //股票循环
      begin
        setsysparam(pn_stock(),stocks[i]); //设置当前证券代码
        dayList:= stocktradedayqk(begt,endt); //取当前证券的交易时间序列
        for j:=0 to length(dayList)-1 do //时间循环
        begin
          dayEnd:=dayList[j];
          setsysparam(pn_date(),dayEnd);//设置当前时间,给不需要时间参数的指标提供指定日
          data[k]['StockID']:=stocks[i];
          data[k]['StockName']:=stockName(stocks[i]);
          data[k]['Date']:=datetostr(dayEnd);
          //获取多个指标值
          data[k,'收盘价']:=close();
          data[k,'成交量']:=vol();
          data[k,'涨幅(%)']:=stockzf3();
          data[k,'总市值']:=StockTotalValue(dayEnd);

          //还可以继续添加其它指标
          //data[k,'xxx']:=funcxxx(...);
          k++;
        end;
      end;
      return data;


    范例3:取一段时间内每日A股个股的每日涨幅与收盘价等指标。
    特点:成份股与指定日有关
    逻辑:外层市场交易日循环,内层指定日成份股循环,取指定日指定市场成份股的指标值
    数据存放:行标为自增序列,列标为各指标名,优点是可同时存放多个指标的数据

    begt:=20210101t;
      endt:=20210112t;
      bkName:='A股';
      setsysparam(pn_cycle(),cy_day()); //周期
      dayList:=Markettradedayqk(begt,endt); //取市场交易时间序列
      data:=array();
      k:=0;
      for i:=0 to length(dayList)-1 do //时间循环
      begin
        dayEnd:=dayList[i];
        setsysparam(pn_date(),dayEnd);//设置当前时间,给不需要时间参数的指标提供指定日
        stocks:=getAbkbydate(bkName,dayEnd); //获取指定日股池--只支持A股等,其它板块通过指数成份股提取
        for j:=0 to length(stocks)-1 do //股票循环
        begin
          stockid:=stocks[j];
          setsysparam(pn_stock(),stockid); //设置当前证券代码
          data[k]['StockID']:=stockid;
          data[k]['StockName']:=stockName(stockid);
          data[k]['Date']:=datetostr(dayEnd);
          //获取多个指标值
          data[k,'收盘价']:=close();
          data[k,'涨幅(%)']:=stockzf3();
          data[k,'总市值']:=StockTotalValue(dayEnd);
          //还可以继续添加其它指标
          //data[k,'xxx']:=funcxxx(...);
          k++;
        end;
      end;
      return data;