Skip to content

5、因子工程

woldy edited this page Feb 2, 2024 · 14 revisions

一、基本应用

1、常用命令

2、框架流程

3、基本概念

二、自定义因子

1、基本概念

在本框架中,有因子(factor),指标(indicator)和Alpha的概念,其中:

  • 指标(indicator):可以理解成传统技术指标,如MACD、BOLL、十字星等,需要复杂代码进行定义的技术指标。
  • Alpha:类似alpha101或alpha191等公式化生成的生成的因子。
  • 因子(factor):计算好的alpha因子或indicator指标,比如我定义了一个MACD指标,但是这个MACD是有参数的,比如MACD_12_26_9和MACD_5_34_5虽然是同一个指标,但确是不同的因子(严格的说,在MACD指标中,除MACD_xx因子外,我们还会得到DIF_xx因子和DEA_xx因子)。

2、自定义指标(indicator)

本框架支持自定义指标,所有自定义指标均放在factors/indicators目录下,定义指标的流程吐下:

  1. 在{project_path}/indicators 目录下建立任意py文件,如myfactors.py,(非必须)

  2. 声明class myfactors:

  3. 定义指标实现函数,def xx123(df,p):

     class myfactors:        
         def xx123(df,p):
             df['xx1']=p[0]
             df['xx2']=p[1]
             df['xx3']=df['open']
             return df
    

如上,我们定义了一个xx123指标,其中

  • df为某支股票的历史行情数据,包括ts_code,trade_date,open,high,low,close,pre_close,change,returns,volume,amount,name,vwap,stop,upLimit,downLimit,adj_factor字段,
  • p为指标所需的参数

如基本概念中MACD的例子,有时候一个指标将会返回多个因子,本框架中自动将函数体内,等号左侧 df['xxx'] 自动识别为待返回因子。此处理解较抽象,举例说明:

from finhack.core.core import Core
core = Core('/data/code/demo_project',args=False)
from finhack.factor.default.indicatorCompute import indicatorCompute
from finhack.factor.default.preCheck import preCheck
preCheck.checkIndicatorsChange() #包含自动寻径代码,首次必须执行
indicatorCompute.computeFactorByStock(ts_code='002624.SZ',factor_name="xx1_8_4_0")

在以上指标计算的例子中,我要计算xx1因子,参数是_8_4_0,

  1. 框架会自动寻找到xx1因子是在myfactors.py文件中定义的,并自动寻找到class myfactors下的xx123函数往下执行,
  2. 框架将002624.SZ的行情数据作为参数传入df,将p=[xx1,8,4,0]作为参数传入p
  3. 框架在函数体中识别df['xxx'],发现了xx1、xx2、xx3,在计算完xx1这个因子后,同时也认为xx2、xx3是需要计算的因子,因此将p参数拼接后,返回xx2_8_4_0和xx3_8_4_0
  4. 注:p参数最后一个值通常不参与计算,若计算xx1_8_4_1,则表示因子xx1_8_4前一天的数据。

3、自定义alpha

alpha因子即公式化定义的因子,其具体实现在alphaEngine.py文件中定义,目前基本支持alpha101、alpha191中所定义的各种函数。

公式中所有的变量以$开头,基于data/factors/single_factors目录下的指标csv文件,如定义一个 alpha=$open+$pe_0的因子,框架会自动加载single_factors目录下的open.csv和pe_0.csv,并进行因子计算。

3、批量计算

三、因子工具

Clone this wiki locally