当前位置: 首页 > news >正文

笔记:AI量化策略开发流程-基于BigQuant平台(一)

从本文开始,按照AI策略开发的完整流程(共七步),上手在BigQuant平台上快速构建AI策略。本文首先介绍如何使用证券代码模块指定股票范围和数据起止日期。重要的事情说三遍:模块的输入端口有提示需要连线的上游数据类型,两个模块之间的接口不能随意连接,否则会报错!

如下图所示,训练集和预测集数据的构建需要首先通过代码列表模块指定数据起止时间和标的范围。

 

一、设置数据集

新建策略

第一步:新建空白可视化AI策略。

添加模块

第二步:添加模块:在模块列表的 数据输入输出 下找到 代码列表 模块并拖入画布。

模块参数设置

第三步:选中模块,在右侧属性栏中可修改参数。

  • 开始时间:训练集的开始时间设置,格式“yyyy-mm-dd”。

  • 结束时间:训练集的结束时间设置,格式“yyyy-mm-dd”。

  • 交易市场:目前支持种类有

    • CN_STOCK_A – A股

    • CN_FUND – 场内基金

    • CN_FUTURE – 期货

如图所示,我们设置训练集数据时间范围是2013-01-01日至2016-12-31日,股票范围为A股所有股票

测试集的模块设置与训练集类似,只需要将“开始时间”和“结束时间”设置为“2017-01-01”和“2018-12-31”即可。

 

如果我们想指定一个股票池训练或预测,那么只要在股票代码列表中加入相应的股票代码即可,如下图所示:

小结:至此,完成了训练集和预测集数据的起止时间和股票范围设置,接下来会进行目标确定、数据标注部分。

二、数据标注

在上文已经完成了训练集和预测集数据范围的设置。接下来在第二步中,学习如何使用数据标注模块来设置训练目标。

数据标注是有监督学习算法的关键,标注是否能够准确描述问题的目标直接影响模型的有效性。

添加模块

第一步:在模块列表的数据标注下找到自动标注(股票)模块,并拖入画布中。

连接模块

第二步:将训练集的证券代码列表模块的输出端连接至自动标注(股票)模块输入端。

这里提示一下,所有的模块上边界的  为数据连接点,下边界的  为数据输出连接点。

参数设置

第三步:设置模块参数。点击选中该模块,在右侧属性栏可设置参数。

标注表达式:单击标注表达式文本框右上角的 图标,可打开独立的表达式编辑窗口,在编辑窗口内,可根据自己关注的指标条件组合。表达式的类型及语法学习可见站内文档-表达式引擎。
本例中计算未来五日收益率,去掉1%以下和99%以上的极值数据,并离散为20档分数,作为评估股票好坏的标准。同时对于一字板股票当日数据进行了剔除过滤。模块运行后会得到的一个DataFrame表,其中有一个标注列(默认为label列),代表的是每只股票未来五日收益率这个目标的得分,得分越高表示目标值未来五日收益率越大。

开始日期和结束日期:这里两个日期节点可不填,直接继承证券代码列表模块的时间范围

基准指数:指数的代码可查阅文档-指数成分中instrument字段的结果,获取需要的基准指数代码。

小结:至此,确定目标的数据标注步骤就完成了。想知道如何实现更加复杂的标注的小伙伴可以移步学习自定义标注 。下一步就是AI模型构建中非常关键的步骤:怎么选择因子组合,这直接关系到一个策略模型的性能质量。

三、找因子

在第一步中我们通过证券代码列表模块确定好训练集和预测集的股票范围以及数据起止时间,本文介绍如何获取和计算因子数据。

如下图所示,找因子的步骤大致需要两个小步骤:一是先确定符合自己需求的特征组合列表,二是进行特征的抽取计算。

特征列表模块

确定了股票集后和目标条件之后,现在需要通过特征列表模块把策略的关注的数据指标输入到策略中,下面我们就介绍如何添加特征列表并传入其他关联的模块中。

添加模块

第一步: 在模块列表的 数据输入输出 下找到“ 输入特征列表 “ 模块并拖入画布。

编辑特征公式

第二步:点击选中输入特征列表,在属性栏特征数据文本框中编辑特征公式。

默认封装好的模块里初始化了13个特征条件:

  • return_n-表示“近n日收益率”;

  • avg_amount_0/avg_amount_5-表示“当日平均成交额和5日平均成交额比值”;

  • rank_avg_amount_0/rank_avg_amount_5-表示“当日平均成交额排名和5日平均成交额排名比值”;

  • rank_return_0-表示“当日收益率排名”;

  • rank_return_0/rank_return_5-表示“当日收益率和5日收益率比值”;

  • pe_ttm_0-表示“当日市盈率”。
    更多特征条件的表达式见文档-因子

输入因子

第三步:通过模块之间的连线,将输入特征列表模块中的因子列表传入到训练集和预测集的特征抽取模块中,如下图示。

基础特征和衍生特征模块

这两个模块之间可直接进行串联,作为一组特征抽取模块。基础特征模块会解析特征列表模块中传入的基础因子并进行数据抽取,而衍生特征抽取模块则会根据抽取的基础因子对复杂的表达式进行运算求值。例如,我们在输入特征列表中输入’return_0+1’这个因子,那么首先会由基础特征模块解析并抽取return_0这个因子的数据,随后由衍生特征抽取模块计算return_0+1这个表达式的值作为因子值,最终返回列名为‘return_0+1‘的因子数据。

对于训练集与测试集而言,由于证券代码列表模块的时间段设置不同,因此各需要一组特征抽取模块。以训练集因子数据抽取流程为例:

添加模块

第一步: 在模块列表的 特征抽取 下找到“ 基础特征抽取 “ 模块并拖入画布。

连接模块

第二步: 将“输入特征列表”模块和“证券代码列表”模块的输出端与“基础特征抽取”模块的输入端连接,“基础特征抽取”模块和“输入特征列表”的输出端与“衍生特征抽取”模块的输入端连接。

配置编辑

第三步:点击选中“基础特征抽取”,在属性栏中对相应的配置进行编辑。

  • “开始日期”与“结束日期”,保持与前面对应的训练集一致,也可以不填写,自动继承上游代码列表的时间

  • “向前取数据天数”,可根据自己需求更改天数,例如:
    要计算5日的收盘价之和因子sum(close_0,5)那我们至少要有5个交易日的close_0基础数据才能计算这个因子的值,考虑到这里填入的是自然日天数,可能会跨假期,那么这里可以填入20以保证因子计算能够得到有效的结果。 

配置保持

第四步:点击选中“衍生特征抽取”,在属性栏中保持默认配置即可。

结语:因子的构建在机器学习中也称为特征工程,对模型构建的效果至关重要。根据定义目标的不同,因子的选择与组合是各不相同。在金融市场中,单个的因子统计量也被认为是市场的一个信息流,根据因子值的变化进行投资也看做为一个投资策略。市场中能够持续稳定获取超额收益的因子也称为alpha因子,而无法产生持续稳定超额收益的因子一般也称为风险beta因子。优秀的因子通过组合可以实现预测效果的提升,因此说找到优秀的因子是AI策略质量的关键。

拓展学习:如何开发一个好策略

四、数据连接+缺失数据处理

本文将详细介绍数据处理中的“数据连接”、“缺失数据处理”两大模块操作、原理。

如下图所示,完成数据标注和特征数据计算后需经过简单的数据处理,我们才能利用AI算法训练模型并预测数据。

  • 对于训练集数据而言,我们需要将标注数据和特征数据连接以形成完整的训练集数据供模型使用。此外,数据在训练前通常还需要进行缺失值数据处理以防止训练过程出错。

  • 对于预测集数据而言,我们通常只需要缺失值处理。

数据连接模块

完成了标注数据和计算特征数据后,需要将这两部分数据DataFrame按日期和股票为索引横向拼接才能构成完整的训练集数据传递给AI模型进行训练。因此在训练模型前,需先连接数据,步骤如下:

添加模块

第一步:在模块列表的 数据处理 下找到“ 连接数据“ 模块并拖入画布

连接模块

第二步:分别将 “自动标注 ”和“衍生特征抽取” 模块的输出端连接至 连接数据 模块的两个输入端。

数据连接

第三步:选中模块,在右侧的属性栏中可以看到关联列和连接方式,我们先保留默认设置。

模块属性说明

数据连接模块将两个DataSource(数据内容格式为DataFrame表)通过关联列,将左表的行与右表的行一一对应并返回。故在关联列(可多列)中,每一行的值都是唯一的。各输入及参数说明如下:

输入数据:如本例的标注数据和特征数据,格式DataFrame,一般为其他模块的输出。
关联列:数据连接时使用的主键,默认使用date和instrument两列为索引,将每只股票每天的标注和特征因子值横向拼接。
连接方式:分为inner, outer, left, right,默认使用inner。
inner:左表和右表均包含关联列的值,才返回对应行。
outer:左表或右表中有一个包含关联列的值,则返回对应行。不包含关联列的表,对应行返回NULL。
right:右表中包含关联列的值,则返回对应行。左表不包含,则对应行返回NULL。
left:左表中包含关联列的值,则返回对应行。右表不包含,则对应行返回NULL。
对结果排序:选中则对连接后的数据按关联列进行排序。默认不选中。
输出数据:连接好的数据表

运行模块

第四步:右键 运行选中模块

再右键 查看结果1 ,可发现我们将之前的标注数据和因子数据合并到了一张表。

缺失数据处理

如下图所示,从连接数据模块的输出可看出,某些因子列的缺失值较多。为了确保训练能够正常进行可删除/填充含有缺失值的数据行,模板策略中采用删除的方式来处理缺失值。

添加缺失值处理模块

第一步:在模块列表的数据处理下找到缺失数据处理模块并拖入画布,由于训练集和预测集数据需要分别处理缺失值,因此我们拖入两个缺失值处理模块。

训练集

第二步:将训练集区域的连接数据模块的输出连线至缺失数据处理模块的输入,完成训练集的缺失值处理。将测试集区域的衍生特征抽取模块的输出连线至缺失数据处理模块的输入,完成测试集的缺失值处理。

模块属性说明

缺失数据处理模块是将表中含缺失值的行删除

输入数据:数据表,如本例中的标注+特征数据。
输出数据:删除缺失值所在行的数据表

运行模块

第三步:右键缺失数据处理模块后选中运行选中模块即可运行模块,再右键缺失数据处理模块后选中“查看结果1“,可发现所有列已无缺失值。

小结:至此,以上完成了训练前的基本数据准备工作,接下来进入模型训练和股票预测部分。当然,也可进行更复杂的数据处理,如合并自己的数据,过滤停牌、过滤ST股票等。更多数据操作,请查阅专题教程:BigQuant新版数据API详解 

(未完待续)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

笔记:AI量化策略开发流程-基于BigQuant平台(一)

从本文开始,按照AI策略开发的完整流程(共七步),上手在BigQuant平台上快速构建AI策略。本文首先介绍如何使用证券代码模块指定股票范围和数据起止日期。重要的事情说三遍:模块的输入端口有提示需要连线的上游数据类型&a…...

Spring Cloud 微服务入门篇

文章目录 什么是微服务架构 Microservice微服务的发展历史微服务的定义微小的服务微服务 微服务的发展历史1. 微服务架构的发展历史2. 微服务架构的先驱 微服务架构 Microservice 的优缺点1. 微服务 e Microservice 优点2. 微服务 Microservice 缺点微服务不是银弹:…...

使用Go语言搭建区块链基础

引言 随着区块链技术的发展,越来越多的人开始关注并使用这一技术,其中,比特币和以太坊等区块链项目正在成为人们关注的焦点。而Go语言作为一种高效、简洁的编程语言,越来越多的区块链项目也选择使用Go语言来搭建其底层基础。本文…...

手搓MyBatis框架(原理讲解)

你在学完MyBatis框架后会不会觉得很神奇,为什么我改一个配置文件就可以让程序识别和执行不同的sql语句操作数据库? SqlSessionFactoryBuilder,SqlSessionFactory和SqlSession对象到底是怎样执行的? 如果你有这些问题看就完事了 …...

FRC-EP系列--你的汽车数据一站式管家

FRC-EP系列产品主要面向汽车动力总成测试的客户,主要应用方向为残余总线仿真及网关。本文将详细介绍FRC-EP的产品特性和应用场景。 应用场景: 汽车电子生成研发过程中,需要对汽车各个控制器进行仿真测试,典型的测试对象有&#…...

【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 trace32 访问运行时的内存1.1.1 侵入式 运行时内存访问1.1.2 非侵入式运行时访问1.1.3 缓存一致性的非侵入式运行时访问 1.2 Trace32 侵入式和非侵入式 运行时访问1.2.1 侵入式访问1.2.2 非侵入式运行时访问 1…...

VirtualBox网络地址转换(NAT),宿主机无法访问虚拟机的问题

问题:NAT模式下,默认只能从内访问外面,而不能从外部访问里面,所以只能单向ping通,虚拟机的ip只是内部ip。 PS:桥接则是与主机公用网卡,有独立的外部ip。 解决:NAT模式可以通过配置 …...

【操作系统】考研真题攻克与重点知识点剖析 - 第 2 篇:进程与线程

前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术…...

总结:利用原生JDK封装工具类,解析properties配置文件以及MF清单文件

总结:利用原生JDK封装工具类,解析properties配置文件以及MF清单文件 一背景描述:1.在不同的项目中,项目使用的开发框架都不一样,甚至是JDK原生开发模式。此时解析配置文件以及jar包中的清单文件,就只能利用…...

openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略

文章目录 openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略119.1 背景信息119.2 数据库程序目录及文件权限119.3 建议 openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略 119.1 背景信息 数据库在安装过程中…...

不可否认程序员的护城河已经越来越浅了

文章目录 那些在冲击程序员护城河低代码/无代码开发平台自动化测试和部署工具AI辅助开发工具在线学习和教育平台 面临冲击,程序员应该怎么做深入专业知识:不断学习全栈技能开发解决问题的能力建立人际网络管理和领导技能 推荐阅读 技术和应用的不断发展对…...

黑客技术-小白自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…...

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图: 时序图: 代码: /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …...

css3文字环绕旋转

目录 固定数量文字环绕旋转不固定数量文字环绕旋转效果图 固定数量文字环绕旋转 <!-- 文字旋转测试 --> <template><div class"page"><div><div v-for"(item, index) in [...Array(20).keys()]" :key"index" style&…...

Linux 进程优先级 | 环境变量

目录 进程优先级 基本概念 认识优先级 PRI and NI NI值的范围 查看进程优先级 用top命令更改已存在进程的nice&#xff1a; 如何修改优先级 其他概念 环境变量 基本概念 常见环境变量 和环境变量相关的命令 环境变量的组织方式 通过代码如何获取环境变量 环境变量通…...

Nginx(五)

负载均衡 官网文档 Using nginx as HTTP load balancer nginx中实现反向代理的方式 HTTP&#xff1a;通过nginx配置反向代理到后端服务器&#xff0c;nginx将接收到的HTTP请求转发给后端服务器。使用 proxy_pass 命令 HTTPS&#xff1a;通过nginx配置反向代理到后端服务器&…...

永达理简析:利用保险的“财务规划”功能维持退休后生活水平

现代社会环境背景下&#xff0c;“自养自老”已经是一种未来养老趋势&#xff0c;很多人会为自己准备一份长期、比较周全的保障&#xff0c;这样财务规划不仅会分担子女的压力&#xff0c;也让自己有一个长远的保障。在各种财务储蓄工具中&#xff0c;商业保险占据着不可取代的…...

拓展认知边界:如何给大语言模型添加额外的知识

Integrating Knowledge in Language Models P.s.这篇文章大部分内容来自Stanford CS224N这门课Integrating Knowledge in Language Models这一节&#x1f601; 为什么需要给语言模型添加额外的知识 1.语言模型会输出看似make sense但实际上不符合事实的内容 语言模型在生成…...

C语言assert断言

断言是对某种假设条件进行检查。 C语言中&#xff0c;断言被定义成宏的形式&#xff0c;原型在<assert.h>中。 #include <assert.h> void assert( int expression );assert将通过检查表达式expression的值来决定是否需要终止执行程序。 如果expression的值为假&am…...

开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) 震惊&#xff01;测试人员对BUG的全方位解析&#xff0c;测试的执行和BUG管理&#xff01; 原来测试人员遇到BUG是这样返回给开发的&#xff01;什么是BUG&am…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

自定义线程池1.2

自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本&#xff0c;将线程池中的线程数量交给使用者决定&#xff0c;并且将线程的创建延迟到任务提交的时候&#xff0c;在本文中我们将对这个版本进行如下的优化&#xff1a; 在新建线程时交给线程一个任务。让线程在某种情况下…...