FAQ > 金融建模 > 建模问题 > 平台使用

Q:调用QueryWithPeriod模型时报错,提示:“证券时间序列专家返回的数据点过多......”    

  • A:模型QueryWithPeriod是天软客户端中数据时间序列专家中的专用取数模型,为了避免造成误取过量数据导致客户端卡死或等待过长的问题,该模型中对返回结果集的数据大小设置了限制,不能超过150万个数据点数,否则就会报该错误,用户需按照提示降低取数点数(缩小取数时间区间或减少证券样本数量等)可避免。
    报错示例
    获取20年A股的部分行情字段数据。
      setsysparam(pn_begt(),inttodate(20060101));
      setsysparam(pn_endt(),inttodate(20260101));
      setsysparam("TimeIndex",1);
      return
      QueryWithPeriod("A股","",@True,"",
      "开盘价",@open(),
      "收盘价",@close(),
      "最高价",@high(),
      "最低价",@low(),
      "开盘价",@open(),
      "成交量",@vol(),
      "成交金额",@amount());

    结果:数据点过多,报错
    解决方式
    使用两重循环获取指标该限制,取数方式参考:FAQ:Q:取数Demo-取一段时间内多个股票的指标值
    实现代码
      begt:=inttodate(20060101);
      endt:=inttodate(20260101);
      setsysparam(pn_cycle(),cy_day()); //周期
      stocks:=getbk("A股"); //获取股池
      data:=array();
      k:=0;
      for i:=0 to length(stocks)-1 do //股票循环
      begin
        echo i," ",stocks[i];
        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,'开盘价']:=open();
          data[k,'最高价']:=high();
          data[k,'最低价']:=low();
          data[k,'收盘价']:=close();
          data[k,'成交量']:=vol();
          data[k,'成交金额']:=amount();
          k++;
        end;
      end;
      return data;

    部分结果: