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

news2025/1/16 7:49:13

从本文开始,按照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详解 

(未完待续)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第七章 块为结构建模 P4|系统建模语言SysML实用指南学习

仅供个人学习记录 这部分感觉很模糊,理解的不好,后面的图也没画了,用到的时候再来翻书 应用端口实现接口建模 端口port表示了块边界上的一个访问点,也可以是由该块分类的任何组成或引用边界上的可访问点。一个块可以有多个端口规…

odoo16 库存初始化 excel导入问题

最近在为一家公司实施odoo时,发现库存模块实施过程中按用户实际,产品初始化就是个问题。下面一一记录下 一个新公司,产品都有上百种,甚致几千种,如何把现有产品数据录入系统就是个不小的活。odoo16是有导入导出功能不…

链表经典面试题之二

今天我们做一道环形链表的题目力扣141题https://leetcode.cn/problems/linked-list-cycle/ 这道题让我们分析链表中是否存环,存在的话返回true,不存在返回false。首先看到这道题我们要捋顺思路,怎么才能达到它要的效果?要找出是否…

[工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机

目录 一、什么是以分布式IO从站/从机 二、分布式IO从站的意义 三、ET200分布式从站系列 一、什么是以分布式IO从站/从机 在工业自动化领域中,分布式 IO 系统是目前应用最为广泛的一种 I/O 系统,其中分布式 IO 从站是一个重要的组成部分。 分布式 IO …

Scrum敏捷开发全流程,3款必备的项目管理工具!

​Scrum是一种敏捷方法,致力于帮助团队高效地协作和完成复杂的项目。它强调迭代和快速迭代、自组织、快速响应变化等原则,使得项目开发变得更加灵活和高效。 在Scrum敏捷开发过程中,项目管理工具是必不可少的。下面介绍3款常用的敏捷开发工具…

面向对象基础(以python语言为例)

1、定义一个类;实例化类的对象;调用类中的方法 #定义一个类 class Student:#类方法(即函数)def study(self,course_name):print(f学生正在学习{course_name})def play(self):print("xx学生正在玩游戏")#实例化&#xf…

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容&#xff…

EDA实验----四选一多路选择器设计(QuartusII)

目录 一.实验目的 二.实验仪器设备 三.实验原理: 四.实验要求 五.实验内容及步骤 1.实验内容 2.实验步骤 六.实验报告 七.实验过程 1.创建Verilog文件,写代码 2.波形仿真 …

TMUX命令的基本操作和使用

tmux:是两个单词的缩写,即“Terminal MultipleXer”,意思是“终端复用器”。 TMUX使用场景:假如你需要跑大模型或者数据集特别大的AI任务时,它往往需要花较长时间才能跑完,在跑的过程中,不能断…

苹果手机安装未上架APP应用测试教程

STEP 2:找到下载的描述文件(如果没有找到,请到 设置 - 通用 - 描述文件 中查看) STEP 3:安装描述文件 STEP 4:输入解锁密码安装描述文件 STEP 5:同意免责声明,安装描述文件 STEP 6…

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看,LC139是一个排列问题,因为最终目标子串的各个字符的顺序是固定的? 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题,确实可以认为它涉及到排列的概念,但这种…

puzzle(1612)拼单词、wordlegame

目录 拼单词 wordlegame 拼单词 在线play 找出尽可能多的单词。 如果相邻的话(在任何方向上),你可以拖拽鼠标从一个字母(方格)到另一个字母(方格)。在一个单词中,你不能多次使用…

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5)

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5) import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import android.view.…

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)

系统介绍 黑果魏叔11 月 10 日消息,今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新(内部版本号:23C5041e),本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…

python工具HIKVISION视频编码设备接入网关任意文件下载

python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何…

rasa train nlu详解:1.2-_train_graph()函数

本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子,主要详解介绍_train_graph()函数中变量的具体值。 一.rasa/model_training.py/_train_graph()函数   _train_graph()函数实现,如下所示: def _train_graph(file_importer…

【C语言】【数据结构】【环形链表判断是否带环并返回进环节点】有数学推导加图解

1.判断是否带环: 用快慢指针 slow指针一次走一步,fast指针一次走两步 当两个指针相遇时,链表带环;两个指针不能相遇时,当fast走到倒数第一个节点或为空时,跳出循环返回空指针。 那么slow指针一次走一步&a…

2000-2022年上市公司数字化转型同群效应数据

2000-2022年上市公司数字化转型同群效应数据 1、时间:2000-2022年 2、指标:股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…

使用电脑时提示msvcp140.dll丢失的5个解决方法

“计算机中msvcp140.dll丢失的5个解决方法”。在我们日常使用电脑的过程中,有时会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,什么是msvcp140.dll呢?它的作用是什么?丢失它会对电脑产生什么影响呢&…

【Gradle-12】分析so文件和依赖的关系

1、前言 在包大小的占比中,so文件的占比往往是最高的,动辄几兆的大小多一个都会把包大小的指标打爆。 而在各厂商要求对手机CPU ARM架构进行分包适配的情况下,你更需要知道哪些依赖是没有适配v7a/v8a的,这将影响你的APP在应用市场…