【历史文档】因子构建与标注-利用表达式引擎批量生成因子
由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
\