历史文档

【历史文档】因子构建与标注-利用表达式引擎批量生成因子

由clearyf创建,最终由small_q 被浏览 1320 用户

更新

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

新版量化开发IDE(AIStudio):

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

新版模版策略:

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

新版数据平台:

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

新版表达式算子:

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

新版因子平台:

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

\

导语

相信大家已经很熟悉平台的表达式引擎功能了,在创建因子的过程中我们经常会遇到需要批量生成因子比如close_0,close_1,close_2...close_20,又或者因子本身有很多重复的项只是参数不同,例如生成一个规则循环因子close_0turn_0 + close_1turn_1+...,能否有个快捷的方式生成这类因子呢?本文介绍使用列表生成式搞定批量因子/ 规则循环因子生成问题。

列表生成式批量生成因子

在特征因子列表中输入列表生成式例如:

['close_{}*turn_{}'.format(k,k) for k in range(3)]

就可以实现批量生成3个因子[close_0**turn_0, close_1**turn_1, close_2*turn_2]

如果循环参数不一致可以通过zip连接

['close_{}*turn_{}'.format(k,j) for k,j in zip(range(3),range(1,6,2)]

就可以实现批量生成3个因子[close_0**turn_1, close_1**turn_3, close_2*turn_5]

生成规则循环表达式

我们通过'+'.join(列表生成式)的方式批量生成因子并用+号连接因子。同理可以用减号,乘号以及除号等运算符连接。

alpha1='+'.join(['close_{}*turn_{}'.format(k,k) for k in range(3)])
alpha2='-'.join(['close_{}*turn_{}'.format(k,j) for k,j in zip(range(0,3),range(1,7,2))])
alpha3='+'.join(['shift(close_0,{})/shift(close_0,{})-1'.format(k,j) for k,j in zip(range(0,66,22),range(22,88,22))])

如果表达式过长,可能会引发错误,此时在表达式项前后加括号括起来,例如:

alpha4='+'.join(['(close_{}*turn_{})'.format(k,k) for k in range(300)])

策略案例

https://bigquant.com/experimentshare/5c7c514f7c954409b896161c5cc970e1

\

{link}