利用表达式引擎批量生成因子
由ypyu创建,最终由ypyu 被浏览 7 用户
导语
相信大家已经很熟悉平台的表达式引擎功能了,在创建因子的过程中我们经常会遇到需要批量生成因子比如close_0,close_1,close_2...close_20,又或者因子本身有很多重复的项只是参数不同,例如生成一个规则循环因子close_0turn_0 + close_1turn_1+...,能否有个快捷的方式生成这类因子呢?本文介绍使用列表生成式搞定批量因子/ 规则循环因子生成问题。
1. 利用列表生成式批量生成因子
在特征因子列表中输入列表生成式例如:
['close_{}*turn_{}'.format(k,k) for k in range(3)]
就可以实现批量生成3个因子[close_0turn_0, close_1turn_1, close_2*turn_2]
如果循环参数不一致可以通过zip连接
['close_{}*turn_{}'.format(k,j) for k,j in zip(range(3),range(1,6,2)]
就可以实现批量生成3个因子[close_0turn_1, close_1turn_3, close_2*turn_5]
2. 生成规则循环表达式
我们通过'+'.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/63a79d1cd9e647cb9c0286b41c570258
\