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

Q:Alpha101因子的数据提取    

  • A:重要说明:
     2022-03-14日起,天软不再公开101因子的衍生数据,因此,下面的提取衍生数据的相关接口已下架,需要该因子数据的用户可以通过商务了解天软因子库,或通过因子模型进行实时计算。
    相关说明:FAQ:2022-03-14-量化数据-因子研究:关于天软“终端“因子数据提取方式变更的说明

    FAQ:2022-03-10-应用专题-数据提取专题07:101alpha因子值的快速提取(更新版)
    说明:通过上面的专题说明文档用户可以了解到,天软目前提供两种方式得到101因子值。一种是通过函数的计算,另一种是提取天软已经计算好的因子值。
    其中,函数计算的方式是对101因子的封装实现,该类函数与证券,时间,证券组合(排名相关等),周期,复权等相关,用户在使用时可根据需求进行设置。
    而快速提取的方式是在固定的周期(日线)、证券组合(一定条件下过滤后的A股)、复权(指定日为基准向前复权)条件下(具体条件请参考专题文档中的5.1 入库规则),计算的证券组合中各个股票的各因子值,天软将这些因子值在每天收盘之后计算入库,用户通过快速提取的方式就可以直接从库中取到各个票的因子值。
    PS:1、用户请注意两种方式的区别,根据自己的需求进行选择。
    3、快速提取方式的数据更新具体请查看专题文档说明
    2、若需要对两种方式的结果进行对比,可参考范例2。

    异常因子值理解:
    1、股票在指定日停牌时,因子值返回NAN
    2、因子中涉及到相关系数的计算的,若在N日内股票存在停牌,则返回NAN
    3、因子中价格在N日内排名每日都一样时,相关系数会返回NAN
    4、其他侍补充
    范例1:通过函数计算因子值-指定日沪深300中各个股票的因子值

      BkArr:=getbk('沪深300');
      Endt:=20190621T;
      setsysparam(pn_StockArr(),BkArr); //必须写  
      SetSysParam(PN_Cycle(),cy_day());
      SetSysParam(PN_Rate(),1);
      SetSysParam(PN_RateDay(),Endt);
      Setsysparam(pn_date(),Endt);//指定日
      r:=array();
      for i:=0 to length(BkArr)-1 do
      begin
        StockId:=BkArr[i];
        SetSysParam(PN_Stock(),StockId);
        r[i]['代码']:=StockId;
        r[i]['名称']:=StockName(StockId);
        r[i]['Alph002']:=OHO_Alpha_002();
        r[i]['Alph003']:=OHO_Alpha_003();
        //其他的模型类似的调用方法,如:OHO_Alpha_xxx,其中 xxx 为对应的序号
        //r[i]['Alph00N']:=OHO_Alpha_xxx();
      end
      return r;

    范例2:通过函数得到快速提取的因子值的计算结果

      d:=20190605T;
      alphaFuns:=1->5;
      alphaFuns ::= 'OHO_Alpha_' + FormatFloat('000', mcell);
      SetSysParam(PN_Cycle(),cy_day());
      SetSysParam(PN_Date(), d);
      SetSysParam(PN_Rate(),1);
      SetSysParam(PN_RateDay(),d);
       //样本股
      stocks:=GetAbkbydate("上证A股;深证A股;创业板",d);//中小企业板 已被合并入深证A股板块中
      stocks:=Sselect thisrow
            from stocks where
             spec(istradeday(d) and
               StockGoMarketTradeDays()>240,thisrow)
             end;
      SetSysParam(pn_StockArr(),stocks);
      r:=array();
      strd:=datetostr(d);
      for i:=0 to length(stocks)-1 do
      begin
       stockid:=stocks[i];
       SetSysParam(pn_stock(),stockid);
       r[i,"证券代码"]:=StockID;
       r[i,"证券名称"]:=stockname(stockid);
       r[i,"截止日"]:=strd;
       for j:=0 to length(alphaFuns)-1 do
       begin
         alphaFun := alphaFuns[j];
         r[i,alphaFun] := call(alphaFun);
       end
      end
      return r;

    范例2函数:
    附件:alpha101_YSToDB_Demo.fun