-
Notifications
You must be signed in to change notification settings - Fork 108
5、因子工程
woldy edited this page Feb 2, 2024
·
14 revisions
- finhack factor run [--task_list=] #开启因子计算
- finhack factor list #查看可用因子列表
- finhack factor show --factor=pe_0 #查看某个因子的信息
- finhack factor analys --factor=pe_0 #对目标因子进行分析(alphalens)
在本框架中,有因子(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因子)。
本框架支持自定义指标,所有自定义指标均放在factors/indicators目录下,定义指标的流程吐下:
-
在{project_path}/indicators 目录下建立任意py文件,如myfactors.py,(非必须)
-
声明class myfactors:
-
定义指标实现函数,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,
- 框架会自动寻找到xx1因子是在myfactors.py文件中定义的,并自动寻找到class myfactors下的xx123函数往下执行,
- 框架将002624.SZ的行情数据作为参数传入df,将p=[xx1,8,4,0]作为参数传入p
- 框架在函数体中识别df['xxx'],发现了xx1、xx2、xx3,在计算完xx1这个因子后,同时也认为xx2、xx3是需要计算的因子,因此将p参数拼接后,返回xx2_8_4_0和xx3_8_4_0
- 注:p参数最后一个值通常不参与计算,若计算xx1_8_4_1,则表示因子xx1_8_4前一天的数据。
alpha因子即公式化定义的因子,其具体实现在alphaEngine.py文件中定义,目前基本支持alpha101、alpha191中所定义的各种函数。
公式中所有的变量以$开头,基于data/factors/single_factors目录下的指标csv文件,如定义一个 alpha=$open+$pe_0的因子,框架会自动加载single_factors目录下的open.csv和pe_0.csv,并进行因子计算。