基于股票日频 K 线的自动因子挖掘实践

遗传算法最初由美国密歇根大学的 J.Holland 提出,是一种通过模拟自然界生物进化的过程来搜索最优解的算法,应用于量子计算、电子设计、游戏比赛等多种场景。

以大家熟知的 python gplearn 为例,它就是一款基于遗传算法开发的数据分析工具,它可以自动生成计算公式、优化特征选择和因子的非线性表达式,为因子挖掘提供了一种新的选择。

但随着量化投研需求的不断升级,gplearn 的局限性逐渐显现。遗传算法需要对大量复杂公式计算适应度,而 gplearn 的性能瓶颈导致因子挖掘的效率偏低。此外,gplearn 只支持从二维数据中提取特征,这使它并不适用于金融领域中对时间、标的和特征构成的三维数据进行挖掘的场景。

对此,DolphinDB 推出了 Shark GPLearn

相较 gplearn,DolphinDB 的 Shark GPLearn 在性能上可实现近百倍提升。而且,Shark GPLearn 具有更丰富的算子库,并提供了高效的 GPU 版本实现。它引入分组语义,可以在训练中分组计算,从而支持在三维数据中挖掘因子。为了充分发挥 GPU 性能, Shark GPLearn 还支持单机多卡进行遗传因子挖掘,进一步提升效率和规模。

接下来,我们将以基于股票日频 K 线数据的因子挖掘为例,展示如何使用 Shark GPLearn 进行因子挖掘。

基于股票日频 K 线数据进行因子挖掘

第一步:导入数据并进行预处理

本例中,我们选取 2020 年 8 月 12 日至 2023 年 6 月 19 日期间的股票日频 K 数据,计算收益率、个股 20 个交易日后的收益率等训练相关指标。导入后对数据进行【选取”0“、”3“、”6“开头的 A 股数据】、【获取基础指标】、【计算收益率和 52 周最高价/最低价】、【删除空值】、【选取每天都有数据的股票】等预处理。

第二步:训练模型

在这一环节中,我们按【拆分训练集和测试集】→【获取训练集】→【配置算子库】→【创建 GPLearnEngine 引擎】→【自定义适应度函数】→【挖掘因子】的顺序进行模型训练。

首先,我们将前 80% 的日期数据作为训练集,剩下 20% 作为测试集,通过 sql 函数查询指定列(xCols)作为模型输入数据。

接着,创建 createGPLearnEngine 引擎,初始化遗传算法模型,设置种群大小、进化代数等参数,并指定算子库(如滑动窗口函数)。本例中,我们通过 spearmanr、groupby、mean 三个函数实现因子 rankIC 的计算逻辑,生成一个自定义适应度函数

最后,调用 gpFit(50) 进行训练,挑选出最优的 50 个因子。本次测试数据集约 166W 行,训练 50 个因子的耗时约 9 秒,挖掘出的因子公式如下:

第三步:因子评价

尽管 Shark GPLearn 可以快速挖掘出大量因子公式,但并非所有因子都有效。因此,在正式使用因子前,需要进行单因子评价、多因子回测等步骤。

在因子评价环节,DolphinDB 自主开发了 Alphalens 模块,其开发逻辑与 Quantopian 用 Python 开发的 Alphalens 相同。通过 Alphalens 模块,我们可以计算出不同持仓周期下的因子 IC 值序列。

本例中,我们使用 IC 值分析法进行简单的因子评价,按序进行以下操作:【计算单因子】→【单因子分析】→【获取每日收盘价】→【调用自定义函数对批量获得的因子进行 IC 值分析】。

首先,使用 calFactor 函数,通过 parseExpr 函数将表示公式的字符串转化为元代码;再使用 sql 函数,动态生成 sql 语句;最后通过 eval 函数执行元代码,获得对应公式的因子值。

接着,通过调用 Alphalens 模块中的 get_clean_factor_and_forward_returns 函数进行数据处理获得单因子分析中间结果;再调用 create_information_tear_sheet 函数计算因子的 IC 值。我们可以调用 peach 函数将 single_factor_analysis 应用到所有因子公式上,快速处理大量因子。

本例将 IC 值大于 0.03 且 IR 值大于 0.5 的单因子视为有效,并对其进行多因子回测。挖出的第一个因子的 IC 值为:

第四步:模型优化

为更快挖掘出有效因子,需要对模型进行反复的调参尝试。

本例中,我们针对进化轮次节俭系数初始化公式等参数进行详细的对比实验。

从这张进化轮次和因子适应度以及长度的关系表中可以看出,迭代次数越多,适应度越高,但增长幅度有限;迭代次数越多,因子长度越长,公式复杂度增高,失去可解释性。

对于节俭系数,我们希望最大化优化目标,且公式不要过长,所以仅测试 generations=6 时 parsimonyCoefficient ≤ 0 的情况。测试结果如下:

从这张节俭系数和因子适应度以及长度的关系表中可以看出,节俭系数的绝对值越大,公式长度对适应度的影响越大。当设置过大时,长度影响甚至超过 fitness 函数的影响,不利于挖掘有效的因子。

同时,由于 Shark GPLearn 支持设置初始化公式,所以用户可以基于已知的有效因子进行进化和变异,减少初始公式的随机性,更有目标地进行因子挖掘。

本例中,我们从国泰君安 191 因子库中选取 70 号因子作为初始公式进行优化,输出的第一个因子的 IC 值如下:

我们发现,虽然相较一开始的因子,样本内 IC 值有所提升,但因为初始公式只有一个,生成的因子组成单一。对此,我们可以通过增加初始化公式调节 size(initProgram) \ populationSize 的比例、让初始种群里加入随机生成的公式这两种方式丰富初始化种群。

于是,我们将初始化公式由 1 个增加到 8 个,同时,在初代种群的 1000 个个体中,500 个由指定的初始化公式生成,其余的随机生成。经过筛选,表现较好的因子如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考前96天 学习巩固 计算机、数学、英语

2024年12月24日到2025年3月29日共有 96​ 天 一、计算机基础 回顾: 三大思维: 数学 推理/理论 物理 证实/实验 计算机 构造/计算 本质——》抽象/自动化 计算复杂性:空间复杂性、时间复杂性 计算机系统的组成: 1️⃣硬件…

Artec Space Spider助力剑桥研究团队解码古代社会合作【沪敖3D】

挑战:考古学家需要一种安全的方法来呈现新出土的陶瓷容器,对比文物形状。 解决方案:Artec Space Spider, Artec Studio 效果:本项目是REVERSEACTION项目的一部分,旨在研究无国家社会中复杂的古代技术。研究团队在考古地…

云原生服务网格Istio实战

基础介绍 1、Istio的定义 Istio 是一个开源服务网格,它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…

《Cocos Creator游戏实战》非固定摇杆实现原理

为什么要使用非固定摇杆 许多同学在开发摇杆功能时,会将摇杆固定在屏幕左下某一位置,不会让其随着大拇指触摸点改变,而且玩家只有按在了摇杆上才能移动人物(触摸监听事件在摇杆精灵上)。然而,不同玩家的大拇指长度不同…

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。 2. Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…

登山第十六梯:深度恢复——解决机器人近视问题

文章目录 一 摘要 二 资源 三 内容 一 摘要 深度感知是基于 3D 视觉的机器人技术的一个重要问题。然而,现实世界的主动立体或 ToF 深度相机经常会产生嘈杂且深度不完整,从而成为机器人性能的瓶颈。在这项工作中,提出了 一个基于学习的立体…

【Jenkins】持久化

文章目录 持续集成CI持续部署CD部署部署到linux服务器 持续集成好处: 持续集成CI 持续集成(Continuous integration,简称CI)指的是频繁地(一天多次)将代码集成到主干。 持续集成的目的就是让产品可以快速…

小红书飞书素材库 | AI改写 | 无水印下载 | 多维表格 | 采集同步 | 影刀RPA

小红书飞书素材库 | AI改写 | 无水印下载 | 多维表格 | 采集同步 | 影刀RPA 模板准备 进入【小红书】素材采集库_荷逸模板,点击使用模板 创建文档应用 在开发者后台 - 飞书开放平台创建 企业自建应用 (需要账号有相应的权限, 如果没有权限向管理员申请) 获取 Ap…

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…

合合信息:探索视觉内容安全新前沿

2024年12月13日-15日&#xff0c;中国图象图形学学会在杭州召开。大会期间&#xff0c;来自合合信息的图像算法研发总监郭丰俊进行了主题为“视觉内容安全技术的前沿进展与应用”的演讲&#xff0c;介绍了视觉内容安全问题&#xff0c;并总结了现今的技术发展&#xff0c;对我很…

阿里云cdn稳定吗?

阿里云CDN&#xff08;内容分发网络&#xff09;是阿里云提供的一项全球加速服务&#xff0c;它的稳定性通常被认为是非常高的&#xff0c;尤其在国内市场。九河云给大家总结了阿里云CDN的稳定性情况&#xff1a; 1. 全球节点覆盖广泛 阿里云CDN在全球范围内拥有数百个加速节…

本地部署webrtc应用怎么把http协议改成https协议?

环境&#xff1a; WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述&#xff1a; 本地部署webrtc应用怎么把http协议改成https协议&#xff1f; http协议在安卓手机浏览器上用不了麦克风本&#xff0c;来地应用webrtc 本来是http协议&#xff0c;在安卓手机上浏览器不支持使…

Qt creator ,语言家功能缺失解决方法

1、找到工具->外部->配置 2、添加目录&#xff0c;双击命名语言家 3、在语言家目录下&#xff0c;添加工具 双击重命名lupdate&#xff0c;即更新翻译 %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate%{CurrentDocument:Project:FilePath}%{CurrentDocument:Projec…

用于UISystem的工具集

简介&#xff1a;上篇文章用于管理Unity中UGUI的工具系统UISystem-CSDN博客讲了UISystem&#xff0c;为了更加方便使用&#xff0c;我给他写了一个编辑器工具&#xff0c;下面展示代码和使用说明&#xff0c;具体详情不难看一下就看懂了。 一、代码部分 using QFramework; us…

onlyoffice连接器 二次开发 合同等制式模板化技术开发方案【三】

一、期望效果 目前曹瑞版本onlyoffice已经实现&#xff1a;书签模式 和 控件模式&#xff0c;用以支持该方案。 【图1】字段绑定 【图2】模板发起 【图3】接入表单 思路讲解&#xff1a; 业务系统开发中通常希望能够通过绑定form字段给word&#xff0c;从而达到双向同步效果&am…

WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)

文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…

【优选算法】复写零

链接&#xff1a;1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 解法&#xff1a;双指针算法 根据“异地”操作&#xff0c;然后优化成双指针下的“就地”操作 1.先找到最后一个“复写”的数 1.先判断 cur 位置的值 2.决定 dest 向后移动一步或…

moviepy将图片序列制作成视频并加载字幕 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能&#xff0c;而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢&#xff0c;在查看文档时影响尚可接受&#xff0c;但在快速浏览网页时&#xff0c;滚轮速度过慢会给用户带来…

ubuntu开机进入initramfs状态

虚拟机卡死成功起后进入了initramfs状态&#xff0c;可能是跟文件系统有问题或者检索不到根文件系统&#xff0c;或者是配置错误&#xff0c;系统磁盘等硬件问题导致 开机后进入如下图的界面&#xff0c; 文中有一条提示 要手动fsck 命令修复 /dev/sda1 命令如下 fsck /de…