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

Q:提取所有主力合约一段时间的收盘价,其中合约代码为列名    

简述
这里提供一种快速建模实现的方式,借用矩阵的遍历运算方式完成,仅支持一次提取一个指标的情景。
  • 说明:
    矩阵遍历::运算中,mrow指当前行标值,mcol指当前列标值,mcell就是当前单元格的值,::就是一个双层循环遍历,对二维数组中的每个元素进行的遍历,然后利用这种方式,将日期存在行下标中,证券代码存在列下标中,对元素进行相关计算后赋值。

    PS:本案例中,用户可学习矩阵遍历的使用方法,积累同时处理两个变量的提取数据处理经验。

    具体实现:

    //-第一步:获取所有期货品种代码
      stocks:=getbk('期货品种代码');

    //-第二步:获取品种代码所对应的主力代码,一维代码序列
      stocks:= sselect distinct spec(base(708004),thisrow) from stocks end;
      stocks:= stocks minus array(nil,'');//去掉集合中为空或空字符串的代码
      sortarray(stocks,1);//想要结果好看些,给代码排个序

    //-第三步:取日线下的区间市场交易日序列,一维日期序列
      setsysparam(pn_cycle(),cy_day());
      Tarr:=MarketTradeDayQk(20100101T,20190101T);

    //-第四步:初始化数组(一个取指标的数组,一个拼日期的数组)
      T:=Zeros(Tarr,stocks);
      T2:=Zeros(Tarr,'Date');

    //-第五步:数组赋值
      //取指定日指定股票收盘价,可更改为其他指标
      T::=spec(specdate(close(),mrow),mcol);
      T2::=datetostr(mrow); //生成与T相同下标的对应日期的数组

    //-第六步:将日期序列合并到数组中
      T:= T2|T;
    //-第七步:将行下标更改为自然下标 ->若不介意的此步可省
      T:=ReIndex2(T,1);
      return T;

    返回结果: