深入浅出 1 - AI量化策略快速理解
我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式存在,机器从过去众多“数据”中产生模型,并对新数据进行预测,这个过程就可理解为“机器学习”。
那么机器学习到底要经历哪几个步骤,我们如何用机器学习来构建一个完整的量化策略,下面,我们通过一个生活中的样例,来类比AI量化策略的工作流程,来帮助大家快速理解AI量化策略:
老王挑瓜
我们接到了隔壁老王求助:要我们帮他去瓜田判断一堆西瓜的好坏,并且需要在保证正确率的情况下独自完成。如果我们对此毫无经验,那我们应该如何应对呢?大家可以先思考一下再与下面步骤进行对比。
第一步:明确目标,获取资源。
首先我们应明确目标,就是判断出这堆西瓜的好坏,为了达到这个目标,我们应该先去另找来一堆西瓜用来学习,来积累判断西瓜好坏的经验。第二步:资源划分
接下来我们要把找来的这些瓜分成两堆,其中第一堆瓜用来练手总结规律,为了确保我们总结的规律是真实可靠的,我们用第二堆瓜来验证我们总结的规律。第三步:观察学习
- 针对第一堆瓜,我们首先通过观察和思考,挑选出一些可能影响瓜好坏瓜的特征也可以称为属性,例如颜色、大小、产地、纹理等;
- 之后,我们不断观察每个瓜的这些特征并切瓜来验证每个瓜的好坏并进行记录;
- 现在我们获取了每个瓜的特征与其对应的好坏结果,我们需要通过不断总结归纳找到瓜的好坏与瓜的属性之间的关联,最后制定一套标准的判断模型,就是我们的经验。
第四步:预测
此时我们需来验证我们上面总结的经验是否满足要求,我们拿第二堆瓜来验证,根据第二堆瓜的颜色、大小、产地等特征来预测第二堆瓜的好坏。第五步:检验
最后,在预测环节中我们得出了每个西瓜的预测结果,为了检验我们预测结果是否准确,我们需要切瓜来验证我们的预测值是否与真实情况相符。
这一过程我们可以表示为流程图:
AI量化策略构建流程
类比上述挑瓜过程,我们可以对AI量化策略流程进行分解:
- 第一步:明确目标,获取数据
首先我们要明确我们模型的训练目标,是A股还是港股,就好比是西瓜还是苹果;是预测股票收益率高低还是波动率高低,就好比是预测西瓜好坏还是年份。确定后获取股票或其他数据。
AI量化策略的目标(Label):人为定义的模型预测目标,例如未来N日收益率、未来N日波动率、未来N日的收益率排序等统计量,平台AI量化策略默认使用股票收益率作为目标。
- 第二步:数据划分
接着我们把历史数据按时间顺序切分为两部分,类比于分瓜任务中的两堆瓜。
训练集: 第一部分的数据用来训练模型,类比第一堆瓜;
验证集: 第二部分的数据用来验证模型效果,类比第二堆瓜;
- 第三步:选取特征,进行标注
- 选择构建可能影响目标的特征,如模板策略中的return_5(5日收益)、return_10(10日收益)等,类比于瓜的产地、大小等特征。
- 对目标结果进行标注,类比于切瓜后记录每个瓜的好坏,样例模板中,我们用5日收益率高低来定义股票的走势好坏等级,并将每只对应等级标记在每只股票上。
AI量化策略的特征(features): 反映事物在某方面的表现或性质的事项,在AI量化策略中,特征可以是换手率、市盈率、KDJ技术指标等等
AI量化策略的标注: 我们计算训练集数据所在时间阶段的每日目标值,比如按每日的未来N日收益率高低来定义股票的走势好坏等级,计算出每只股票未来N日收益率的好坏等级并标记在每只股票上。
第四步:模型训练
我们通过“好坏等级”对股票进行标注贴上标签,连同其所对应的特征值一起来构建训练模型,类比于上述我们获取了第一堆瓜的大小、颜色等特征数据以及对应切瓜验证其’“好坏”标签,总结出瓜的分类经验;第五步:预测
用验证集数据来检验训练前面构建好的模型,即检验模型根据验证集的特征数据预测出的目标值(股票走势好坏等级)是否准确。这步类比于鉴瓜任务中根据第一堆瓜总结的鉴瓜经验用第二堆西瓜的大小、颜色等特征数据来判断预测瓜的好坏。第六步:回测
将验证集的预测结果放入历史真实数据中检测,类比于鉴瓜过程中根据第二堆瓜预测出瓜的好坏最后进行切瓜验证。
因此,AI量化策略的构建过程也可以用流程图的方式表达如下:
认识了机器学习流程和AI量化策略流程,就能够理解BigQuant平台的BigStudio实验工作流。BigStudio实验工作流是AI量化策略在BigStudio上的可视化展示。一个典型的AI可视化量化策略流程图如下:
简单划分:
具体而言:
策略流程图的左支是训练集特征数据(features)的抽取和训练集目标(label)的标注,标注结果和训练集特征数据通过合并和数据缺失值清洗处理,然后传给机器学习模型进行模型训练。
策略流程图的右支是测试集特征数据的抽取,通过缺失值清洗处理,然后传给机器学习模型进行预测,这里机器学习模型采用StockRanker模型,是一个排序模型,预测的结果是每日的股票排名。
这个排名列表即预测结果最后传给回测模块按一定的规则进行买卖模拟交易,进行检测。
以上就是一个AI量化策略构建大体流程,初学者可先尝试修改特征值来寻找有效因子,往往好的因子组合是策略成功的关键。
快来新建一个人工智能量化策略检测一下你的学习成果吧,在新建策略过程中,回想一下每一步操作对应我们上述的第几步,掌握后,你已经可以超越60%的传统交易员啦,快快行动起来!
深入浅出 1 - AI量化策略快速理解的更多相关文章
- 数字货币期货与现货JavaScript量化策略代码详解汇总
1.动态平衡策略 按照当前的 BTC 的价值,账户余额保留¥5000 现金和 0.1个 BTC,即现金和BTC 市值的初始比例是 1:1. 如果 BTC 的价格上涨至¥6000,即 BTC 市值大于账 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- 三分钟玩转微软AI量化投资开源库QLib
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 微软QLib简介 微软亚洲研究院发布了 AI 量化投资开源平台"微矿 Qlib".Q ...
- Beam Search快速理解及代码解析
目录 Beam Search快速理解及代码解析(上) Beam Search 贪心搜索 Beam Search Beam Search代码解析 准备初始输入 序列扩展 准备输出 总结 Beam Sea ...
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- 快速理解web语义化
什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
随机推荐
- 老毛桃UEFI版u盘启动盘
使用老毛桃制作UEFI启动盘 下载UEFI版本启动盘制作工具,打开官方网站http://www.laomaotao.org,当前显示页面右下下载UEFI版本.文章写作时最新版本为9.3. 使用教程见: ...
- redis:hash哈希类型的操作
1. hash哈希类型的操作 1.1. hset key field value 语法:hset key field value 作用:把key中field域的值设为value 注:如果没有field ...
- PAT Basic 1020
1020 月饼 (25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意 ...
- java大数BinInteger
当我们遇到long不行的时候就要考虑这个BinInteger了,因为这是只要你内存够大,就能输入很大的数,用这个处理高精度问题,是很容易的一件事,对于我这刚学java的萌新来说,长见识了,确实比C方便 ...
- vue路由打开新窗口
一. <router-link>标签实现新窗口打开: 官方文档中说 v-link 指令被 <router-link> 组件指令替代,且 <router-link> ...
- pygame-KidsCanCode系列jumpy-part4-弹跳
终于要到弹跳环节了,向上弹跳其实很简单,按下空格触发时,只要把y轴速度给一个向上的速度即可. Player类,新加一个jump()方法: def jump(self): self.vel.y = -2 ...
- Java知识回顾 (8) 集合
早在 Java 2 中之前,Java 就提供了特设类.比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组. 虽然这些类都非常有用,但是它们 ...
- 小程序longpress的bug及其解决
我的小程序中,用到一个长按修改的功能,设计是这样的,短按tap,长按longpress 但是,偶尔出现长按无效的情况.我自己都经常碰到,今天仔细研究,用半天时间反复寻找,重现,发现问题和内存或别的因素 ...
- 招中高级web开发工程师
>>招中高级web开发工程师
- P Invoke struct结构
一.获取Struct CHCNetSDK.NET_DVR_PTZPOS pos = new CameraTest.CHCNetSDK.NET_DVR_PTZPOS(); int size = Mars ...