1989年John R.Koza提出了遗传编程算法(Genetic Programming),该算法属于进化计算(Evolutionary Computation,EC)模型的一种。
GP算法通过模拟生物基因遗传,遵循物竞天择,适者生存的自然规律进化实现目标函数的最优化。
种群中每个个体通过适应度函数fitness(例如夏普比率、跟踪误差等)来评估其基因的优劣,通过对个体基因的复制、交叉等操作生成新的个体从而实现种群的进化。
这个进化过程重复进行,直到指定的迭代代数或者最优的个体被找到。
二、算法流程
种群(Population) :生进化是以群体的形式进行的,在量化研究中即表达式的集合(类似于技术指标库),比如{close_0/open_0+0.1 , (ta_sma_5_0+abs(close_0))*3};
个体(Individual) :组成种群的独立单个物种,在量化研究中对应着一个表达式(类似于技术指标),比如 close_0/open_0+0.1,在GP算法中表达式可以通过树形结构表达。
例如下图为表达式X0×X0−3×X1+0.5的树形结构表达:
染色体(Chromosome) :包含一组基因,个体由多个染色体组成,在量化研究中即因子,比如close_0,open_0;
基因(Gene) :可用于遗传的因子,并且携带特有的适应能力的信息,在量化研究中即表达式的值和组成表达式的各项因子和运算符,比如close_0/open_0+0.1在每一天的计算值和’close_0’、‘open_0’、‘0.1’、’/’、’+’ 。
交叉(Crossover) :个体之间交换染色体,交叉繁殖遗传基因,形成新的个体,例如:
复制(reproduction) :复制优秀的个体,遗传基因,例如下图中的优秀个体的左支表达式(灰色部分)被复制给新的个体:
变异(Mutation) :根据一定概率基金突变,增强基因的多样性,例如:
进化(Evaluation) :根据优胜劣汰原则,通过计算适应度函数(例如夏普比率、跟踪误差等),保留适应度高的精英优秀个体到下一代种群,淘汰劣类的本代种群的其余个体。
三、GP算法在股票市场中的应用
在传统技术分析中,人们构造了很多统计量来描述或拟合股票的价格走势,如MA、MACD等技术指标,这些指标都可以看作是一篮子因子和一篮子操作符的表达式组合。
因子集合:open、close、high、low、returns、volume、随机数等。操作符集合:+、-、*、/、rank等。适应度函数:因子ICIR、Sharp、Return等。
通过GP算法,我们可以根据一个因子集合和一个操作符集合随机组合生成海量的表达式,通过这些表达式计算指标值,利用指标值按照一定的规则产生买卖交易信号,进而回测出净值曲线。
根据净值曲线计算出夏普比率等统计量作为优化的目标函数(即适应度函数),筛选适应度最大的表达式并不断交叉、变异、进化,从而实现最优化目标函数。
四、策略流程
本文策略在bigquant平台AI可视化模板的基础上建立,使用遗传编程Gplearn开源库,针对个股开展了表达式的寻优。
关于Gplearn库中函数的调用方法和各参数的含义可以参考开源项目:
http://gplearn.readthedocs.io/en/latest/
本文策略中选取的参数如下:
适应度函数:使用总收益率和夏普比率两个适应度函数分别进行测试
股票标的:600000.SHA
- 遗传代数:15
- 每代的种群大小:200
- 精英群大小:20
- 变异率:0.05
- 杂交率:0.75
- 训练集:2017-01-01~2018-01-01
- 验证集:2018-01-01~2018-05-01a
五、回测结果
1. 总收益率作为适应度函数的结果:
可以看到,进化14代后最优结果收敛到一个长度为6的表达式:
mul(min(abs(X1), X13), X1)
测试集上的收益率曲线如下图:
2. 夏普比率作为适应度函数的结果: 可以看到,进化14代后最优结果收敛到一个长度为9的表达式:
mul(log(sub(sqrt(sqrt(X11)), log(X12))), X1)
测试集上的收益率曲线如下图:
六、参考文献
七、附录
策略完整代码:《可视化策略-遗传规划(GP)择时策略》
本文由BigQuant《量化研究每周精选》原创推出,版权归BigQuant所有,转载请注明出处。
《量化研究每周精选》每周一期,为大家提精选研报、前沿研究、热门文章等优质内容。
欢迎投稿 (i@bigquant.com)。