FAQ > 金融建模 > 建模问题 > 股票相关

Q:如何提高191因子的计算效率?    

  • A:利用天软techcachedo技术指标缓存,提升191因子运算效率。
    参考:FAQ:2021-11-26-量化数据-因子研究03:191因子算法及其计算说明(更新版)
    优化示例
    返利说明:获取300个股票30天8个191因子数据。
    优化结果:效率得到了显著提升
    优化前执行耗时:约61秒
    优化后执行耗时:约13秒
    优化前代码
    EndT:=20260410T;
    StockArr:=GetBKByDate('SH000300',EndT);
    SetSysParam(pn_StockArr(),StockArr); //注意设置 pn_StockArr()
    SetSysParam(PN_Cycle(),cy_day());
    SetSysParam(PN_Rate(),1);
    Setsysparam(pn_rateday(),endt);
    SetSysParam(PN_Date(),EndT);
    dayarr:=MarketTradeDayQk2(30);//最近30个交易日
    r:=array();
    n:=0;
    mtic;
    for i,StockId in StockArr do
    begin
      SetSysParam(PN_Stock(),StockId);
      for nI:=0 to length(dayarr)-1 do
      begin
        SetSysParam(PN_Date(),dayarr[nI]);
        r[n]['代码']:=StockId;
        r[n]['名称']:=StockName(StockId);
        r[n]['日期']:=datetostr(dayarr[nI]);
        r[n]['Alph002']:=Tsgt_Alpha_002();
        r[n]['Alph003']:=Tsgt_Alpha_003();
        r[n]['Alph004']:=Tsgt_Alpha_004();
        r[n]['Alph005']:=Tsgt_Alpha_005();
        r[n]['Alph006']:=Tsgt_Alpha_006();
        r[n]['Alph007']:=Tsgt_Alpha_007();
        r[n]['Alph008']:=Tsgt_Alpha_008();
        r[n]['Alph009']:=Tsgt_Alpha_009();
        n++;
      end
    end
    echo mtoc;//打印执行时间
    return r;

    优化后代码
    TechCacheDo
    Begin

      EndT:=20260410T;
      StockArr:=GetBKByDate('SH000300',EndT);
      SetSysParam(pn_StockArr(),StockArr); //注意设置 pn_StockArr()
      SetSysParam(PN_Cycle(),cy_day());
      SetSysParam(PN_Rate(),1);
      Setsysparam(pn_rateday(),endt);
      SetSysParam(PN_Date(),EndT);
      dayarr:=MarketTradeDayQk2(30);//最近30个交易日
      r:=array();
      n:=0;
      mtic;
      for i,StockId in StockArr do
      begin
        SetSysParam(PN_Stock(),StockId);
        for nI:=0 to length(dayarr)-1 do
        begin
          SetSysParam(PN_Date(),dayarr[nI]);
          r[n]['代码']:=StockId;
          r[n]['名称']:=StockName(StockId);
          r[n]['日期']:=datetostr(dayarr[nI]);
          r[n]['Alph002']:=Tsgt_Alpha_002();
          r[n]['Alph003']:=Tsgt_Alpha_003();
          r[n]['Alph004']:=Tsgt_Alpha_004();
          r[n]['Alph005']:=Tsgt_Alpha_005();
          r[n]['Alph006']:=Tsgt_Alpha_006();
          r[n]['Alph007']:=Tsgt_Alpha_007();
          r[n]['Alph008']:=Tsgt_Alpha_008();
          r[n]['Alph009']:=Tsgt_Alpha_009();
          n++;
        end
      end
    End;
    echo mtoc;//打印执行时间
    return r;