历史文档

【历史文档】策略-找因子

由undefined创建,最终由small_q 被浏览 2734 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/data/home

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

导语

在第一步中我们通过证券代码列表模块确定好训练集和预测集的股票范围以及数据起止时间,本文介绍如何获取和计算因子数据。

如下图所示,找因子的步骤大致需要两个小步骤:一是先确定符合自己需求的特征组合列表,二是进行特征的抽取计算。

{w:100}

特征列表模块

确定了股票集后和目标条件之后,现在需要通过特征列表模块把策略的关注的数据指标输入到策略中,下面我们就介绍如何添加特征列表并传入其他关联的模块中。

添加模块

第一步: 在模块列表的 数据输入输出 下找到“ 输入特征列表 “ 模块并拖入画布。

{w:100}

编辑特征公式

第二步:点击选中输入特征列表,在属性栏特征数据文本框中编辑特征公式。

{w:100} \n 我们默认封装好的模块里初始化了13个特征条件:

  • return_n-表示“近n日收益率”;
  • avg_amount_0/avg_amount_5-表示“当日平均成交额和5日平均成交额比值”;
  • rank_avg_amount_0/rank_avg_amount_5-表示“当日平均成交额排名和5日平均成交额排名比值”;
  • rank_return_0-表示“当日收益率排名”;
  • rank_return_0/rank_return_5-表示“当日收益率和5日收益率比值”;
  • pe_ttm_0-表示“当日市盈率”。 \n 更多特征条件的表达式见文档-因子

输入因子

第三步:通过模块之间的连线,将输入特征列表模块中的因子列表传入到训练集和预测集的特征抽取模块中,如下图示。

{w:100}

基础特征和衍生特征模块

这两个模块之间可直接进行串联,作为一组特征抽取模块。基础特征模块会解析特征列表模块中传入的基础因子并进行数据抽取,而衍生特征抽取模块则会根据抽取的基础因子对复杂的表达式进行运算求值。例如,我们在输入特征列表中输入’return_0+1’这个因子,那么首先会由基础特征模块解析并抽取return_0这个因子的数据,随后由衍生特征抽取模块计算return_0+1这个表达式的值作为因子值,最终返回列名为‘return_0+1‘的因子数据。

对于训练集与测试集而言,由于证券代码列表模块的时间段设置不同,因此各需要一组特征抽取模块。以训练集因子数据抽取流程为例:

添加模块

第一步: 在模块列表的 特征抽取 下找到“ 基础特征抽取 “ 模块并拖入画布。

{w:100}

连接模块

第二步: 将“输入特征列表”模块和“证券代码列表”模块的输出端与“基础特征抽取”模块的输入端连接,“基础特征抽取”模块和“输入特征列表”的输出端与“衍生特征抽取”模块的输入端连接。

{w:100}

配置编辑

第三步:点击选中“基础特征抽取”,在属性栏中对相应的配置进行编辑。

  • “开始日期”与“结束日期”,保持与前面对应的训练集一致,也可以不填写,自动继承上游代码列表的时间
  • “向前取数据天数”,可根据自己需求更改天数,例如: \n 要计算5日的收盘价之和因子sum(close_0,5)那我们至少要有5个交易日的close_0基础数据才能计算这个因子的值,考虑到这里填入的是自然日天数,可能会跨假期,那么这里可以填入20以保证因子计算能够得到有效的结果。

{w:100}

配置保持

第四步:点击选中“衍生特征抽取”,在属性栏中保持默认配置即可。

结语:因子的构建在机器学习中也称为特征工程,对模型构建的效果至关重要。根据定义目标的不同,因子的选择与组合是各不相同。在金融市场中,单个的因子统计量也被认为是市场的一个信息流,根据因子值的变化进行投资也看做为一个投资策略。市场中能够持续稳定获取超额收益的因子也称为alpha因子,而无法产生持续稳定超额收益的因子一般也称为风险beta因子。优秀的因子通过组合可以实现预测效果的提升,因此说找到优秀的因子是AI策略质量的关键。

拓展学习:如何开发一个好策略

评论
  • 1
  • 为什么时间段设置不同,就各需要一组特征抽取模块?在训练集中指取出的特征,不能用于测试集?
  • 很简单的一个东西,被所谓的模块化搞的巨复杂,咋想的,设计的时候
  • * “更多特征条件的表达式见[文档-因子](/wiki/doc/-oyZw9yBiwi)” 里面的链接报404了 \
  • 我个人认为,这样的模块化是非常优秀的设计。首先,从策略开发的流程上说,这种设计从全局上非常清晰的定义了工作流。其次,从用户程序编制的角度说,一方面自动生成代码,另一方面降低用户在不同策略间拷贝粘贴代码出错的可能性。再次,从软件工程的角度说,这个设计增强了整个系统的解耦性,易于单一模块的版本维护和升级。同时,由于解耦性,模块之间的数据流以及缓存运用也可以做得非常平滑。
{link}