精品课程

遗传规划模块使用介绍

由qxiao创建,最终由qxiao 被浏览 239 用户

导语

遗传规划算法是目前比较常见和主流的数据挖掘算法之一。它是根据适者生存、优胜劣汰等自然进化机制来进行搜索计算和问题求解。

本文不作过多关于遗传算法的原理介绍,相关原理可以参考之前的wiki文章:https://bigquant.com/wiki/doc/suanfa-python-MpnqDGMMDk

这里主要介绍如何在BigQuant平台进行遗传规划算法的使用以及使用示例参考

遗传规划模块

模块结构

遗传规划模块{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

模块输入参数

输入端:

  • 代码列表: 必选,传入算法挖掘所需的基础数据列表,包括开始结束时间、标的列表、市场等
  • 基础因子数据: 必选,传入算法挖掘所需的基础因子数据,包括需要用到的收益计算因子等
  • 基础因子列表: 可选,此项如果不作参数传入,则会默认使用基础因子数据传入的所有特征列

参数:

遗传规划模块内部参数{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

  • 交易市场:目前可选股票市场期货市场
  • 数据频率:目前可选三种数据频率,daily / 5min / min。股票市场暂只支持日频,期货市场支持三种频率
  • 全区间数据开始时间:可选填,若未填写,默认选取代码列表传入的开始结束如期作为全区间数据的开始和结束时间
  • 全区间数据结束时间:可选填,若未填写,默认选取代码列表传入的开始结束如期作为全区间数据的开始和结束时间
  • 短区间占全区间数据的比例:将全区间数据进行数据划分的比例
  • 收益计算基础字段:目前可选三种用于计算收益的字段,wap_3_vwap_buy / close / open,且wap数据目前只适用于股票市场挖掘
  • 收益计算周期:填写用于计算的收益周期的长度,即可以理解为计算因子的调仓周期
  • 短区间训练集与测试集的比例:在已经从全区间划分了一部分的短区间时间段内,再次根据所填比例划分训练集和测试集
  • 训练集中训练集与验证集的比例:同上,会根据所填比例划分训练集和验证集
  • 因子挖掘循环次数:整体因子挖掘的循环次数(根据需求和资源进行增加,若适应度条件苛刻,次数过少会出现无因子输出的情况)
  • 初始种群数量:单次因子挖掘时的最初种群数量,即每次因子挖掘开始的时候,根据传入的基础因子进行随机组合的因子数量
  • 种群代数:单次因子挖掘时的迭代次数(根据需求和资源进行增加,若适应度条件苛刻,次数过少会出现无因子输出的情况)
  • 适应度函数:适应度函数的选择,其中future_longshort_sharpe, future_longshort_return, future_longshort_vol三种适应度函数只适用于期货数据挖掘,其余函数均适用于股票和期货市场
  • 短区间&全区间适应度函数阈值:在单次迭代进行短区间适应度函数计算时,通过适应度函数的阈值设置。比如,我们想要在短区间进行计算时,通过的因子需要满足多空夏普大于2的条件,则适应度函数需要选择多空夏普并且此项阈值填写2
  • IR计算方式:适用于股票市场。如果适应度函数选择了ICIR,这里需要选择计算IR时的方法
  • 各种变异概率:在单次种群迭代的时候,对于未通过适应度阈值的因子进行变异的概率设置
  • 常数项范围:默认为(1, 11),即在因子组合和变异的时候,所用到的常数项只会在1和11之间进行随机选择
  • 并行计算任务数:在计算适应度函数的时候,并行计算的数量设置**(目前只支持单机模式,需根据自己开发环境资源进行调整)**

模块输出

遗传规划模块的输出端口只有一个,会输出经过遗传规划挖掘出的因子表达式,可通过m.factors.read()进行读取

需要注意的是,这里模块输出的因子表达式,目前和表达式引擎有些许不同,但大部分都是等同于可用于「输入特征列表」里的表达式引擎,其余的均以表达式字面意思为主。

模块使用示例

股票市场因子挖掘:

https://bigquant.com/experimentshare/23e26105fa6d42789e6a25516a60816d

期货市场因子挖掘:

期货市场应用有以下几点注意事项:

  1. 通过下面示例当中的m4模块,可以选择输出data_2的合约类型,分为主力连续、主力连续(前复权)和指数。不同的合约类型所达到的效果不同;
  2. 由于期货数据量较少,并且会有部分合约不太活跃,故以下示例当中在m4模块内过滤了部分品种,可以根据自己需求进行调整;
  3. 专门针对期货市场的三种适应度函数计算条件中加入了开仓手数的限制,所以较其余算法更为苛刻。若选择后适应度函数计算出来大量出现N/A值,建议减小调仓周期、扩大合约范围和时间范围、增加迭代次数等来减少此类情况的发生;
  4. 最终挖掘出的因子,是经过了三次适应度函数阈值验证的结果,所以如果迭代次数较少会出现最终没有因子通过的情况,建议根据自身开发环境的资源,尽可能扩大因子挖掘的迭代次数来进行因子搜索,并尽可能适当设置适应度阈值和变异概率

https://bigquant.com/experimentshare/d3e53765bd224f9fb4456289ceb78c4a

最后,通过「遗传规划」模块挖掘出的因子,我们可以通过以下的notebook直接进行因子的回测:

目前只提供了期货因子的使用demo,股票市场的回测可以参考此notebook进行相应的改造(若有相关使用问题可就在此帖下面回复问题或在问答交流区进行提问即可)

https://bigquant.com/experimentshare/bb97a0fafeb6445494dabd472ede5001

\

标签

遗传算法