FAQ > 金融建模 > 应用案例 > 多因子

Q:在多因子框架中如何按因子值自定义分组    

  • A:在多因子框架中,可以通过改写因子分组的成员方法GroupData_EachGroup来自定义因子分组。
     在该方法中通过区分综合因子值的差异自定义分组,返回格式为array(("组名":"第n组","详情":"第n组数据"))
    参考:FAQ:2025-03-31-应用专题-多因子框架01:天软多因子框架TSMultiFactor(更新版)
    实现范例
    按因子大小分组,大于等于0的为一组,小于0的为另一组
    执行代码
      obj:=CreateObject('MyFactorclass');
      obj.FBegT:= 20210101T;
      obj.FEndT:= 20230331t;
      obj.FIndexId:='SH000016';
      obj.FCycle:=cy_month();
      obj.FFactorArr:=array(("因子名称":"zf","因子公式":"StockZf3()-spec(stockzf3(),'SH000016')","因子方向":1,"因子比例(%)":50),
                 ("因子名称":"pe","因子公式":"1/stockpe(EndT)","因子方向":1,"因子比例(%)":50));
      obj.BackTest();
      return array(
         '调仓日':obj.GetTimeSeries(),
         '所有调仓日因子值及分组':obj.GetGroupFactorValue(),
         '-----收益率-----':'-----------',
         '日累计收益率(%)':obj.GetGroupReturn(1,cy_day()),
         '日累计超额收益率(%)':obj.GetGroupReturn(3,cy_day()),
         '月度收益率(%)':obj.GetGroupReturn(0,cy_month()),
         '月度超额收益率(%)':obj.GetGroupReturn(2,cy_month()),
         '多空月度收益率(%)':obj.GetGroupReturn(4,cy_month()),
         '-----因子检验-----':'-----------',
         '因子收益率检验':obj.GetTrailingReturn(cy_month()),
         '因子显著性检验':obj.GetSignificanceStatistics(cy_month()),
         '因子区分度检验':obj.GetLongShortStatistics(cy_month()),
         '因子延续性检验':obj.GetInformationCoefficient(),
        );

    继承重写类方法
    Type MyFactorclass=class(TSMultiFactor)
      Function GroupData_EachGroup(Data,tGroup);virtual;
      Begin
        r:=Array();
        r[0]['组名']:='第1组';
        tmp:=select * from data where ['综合因子']>=0 end;
        tmp[:,'组名']:='第1组';
        r[0]['详情'] := tmp;

        r[1]['组名']:='第2组';
        tmp:=select * from data where ['综合因子']<0 end;
        tmp[:,'组名']:='第2组';
        r[1]['详情'] := tmp;
        Return r;
      End;
    End

    部分分组结果