前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将机器学习用到算法交易中

将机器学习用到算法交易中

作者头像
机器学习AI算法工程
发布2018-03-13 15:49:08
1K0
发布2018-03-13 15:49:08
举报

假设我有一个问题,我想根据一些人的身高和体重来判断性别。

我有一个数据表,数据里面有三个男的三个女的,我有他们体重身高的数据。现在有一个人性别不知道,我们怎么推算他是男的还是女的?

如果用空间预测的方法很好解决。我们把身高和体重做一个二维图,纵坐标表示体重,横坐标是身高。我们映射上去方块的都是表示男的,梨形的都是女性,很容易发现他们这两条线有分界线的,现在有一个人身高这么多,体重这么多,对应的点是在这个位置,图形的以下,所以她应该是一位女士。

这是很简单的一个分类,自动分类的方法。

抽象来讲,一个二维空间里面一个直线可以用这样一个公式来表示。这个公式把两种点分开了,这个公式里面有一个法向量表示它的正面,这个线这面都是正利,这面都是负利。

如果我们把用机器学习的方法来解决分类问题,实际上我们需要自动地学习一个参数W和B,也就是自动地决定这个线应该在哪个位置,前提是给定了这些点,我们知道两种点的位置,找出最合适的一根直线。

解决这个问题的方法,感知机的方法。其实是神经网络的初级阶段。用这个方法怎么解决问题呢?要使用错误驱动的方法。

比如说随机在这个空间里面划一条直线,我就看我之前已经知道答案的点,对这条直线有没有分对,如果分对了我就不管它,如果分错了,我就把直线调整一下。

比如说这条直线,大部分都点对了,但这个点错了,我们应该怎么调整,两种方法,一种是把这个直线往下压一点,旋转一下,还有把这个直线往右边推一下。也就对应了要调整公式里面的w和b的值。实际上严格地讲,有一个数学公式指导修改Wb的过程,对w的修改就是旋转这个直线,对b的修改就是推移这个直线。

这两个数字间存在着直线把它推开,经过很多次的迭代一定会找到这根直线。只要我们遇到了错误就调整,遇到了对的就不动。一定会最终将所有的点都正确分类了。

这个方法就是感知机方法。

但是这个方法有一个缺陷。它能给出很多的直线,这个图上所有的直线都能够把这两个点完全分开的,按照刚刚的理论,一旦一个直线遇到了错误的点就会调整,但现在全都对了,就不会再动了。这么多的直线哪根是最好的呢?这些直线里面哪根线就是分类效果最好的呢?

中间的那条?直觉来说应该是中间那条,应该是最保险的,所以有可能是这样一条。

那这条先离两边都很远一点,这样比较好,为什么?我们刚刚看到这么多的点,不代表所有的点,有可能这里也有点,这里也有点,这个点是倾向于是实心的,这里这个点是空心的,如果选择了这条线,贴的很近,这里有一个实心的就是错的,我们现在发现这些线所有的点都分对,当再增加十倍你发现一切都不对了,为了保险我们选中间的直线,离两边都远一点,这就是感知机最基本的思想。

我 们树立的概念就是间隔,图上用蓝色的区域表示。这根直线离两边最近一点的距离,间隔越大就认为是在那边最安全,离两边都比较远。这是最大间隔理论。

我先找到一个平面把所有的点都分类正确,接下来我在所有的线里面再找一个面,保证它的间隔最大。

这个时候,找到这根线就叫做是最优平面,离它最近的点就是支持向量。这样做的好处是,这个平面是由三个点决定,这个点扔掉,这个点移动一下,这个平面会不动,通过这样的方法学习出来的模型,具有很强的稳定性。你的训练数据稍微的波动,这根直线也还是不动的。

但数学来表示这个事情就复杂一点。这是向量机的思想。目标有两点,首先保证它的直线所有的点正负分得对。第二要找到其中一个面,这个面保证间隔最大。只要完成了这两个目标,这就是唯一最好的分界面。

而这两个共识可以转化为关于w和b的二次规划的问题。这就是关于w和b的优化的问题,我们很容易在给定数据的时候给出w和b,很容易找到中间直线的位置。

向量机在90年代的时候非常非常火,各个地方都有应用,图象识别,语音识别,都在应用。

股市上也一样,我看到用SVM、美国、日本、中国、印度股市预测都有。我这里摘抄了这个。一个是对于美国股市的预测。

这里使用的数据是从2000年到2012年,这十二年的数据。主要是为了预测纳斯达克,道琼斯指数和标普500,要预测这么三个指数的输入是什么?有三种输入,一是其他国家市场的指数变化,比如说日经225指数,恒生指数等等,这些指数被认为是会影响到美国指数的变动。同时有外汇的变动,比如欧元、澳大利亚元、日元等的变化。然后是大宗商品价格如金银、石油的价格变化。

这些都是前一天的,或者是对于美国是前一天。然后把这套数据输入进去,稍微做一个变化就是选择,这里一共有12个特征,从里面选出了最重要的四个特征,这四个特征的预测,最终能够做到对纳斯达克涨跌判断的准确度达到74%,道琼斯是77%,标普是76%。只用这些数字做到70%几的准确度,这是不错的预测。

这里有更早一点的,04年的时候有一个报告,预测日经指数,数据是用的90年到02年的日经225的变化趋势。它用了两个数据特征,一个就是标普500,另外一个就是日元和美元的汇率。用这两个数字来预测日均指数的涨跌。也是SVM的模型,能做到73%的准确率。我觉得两个特征就做这么好,这还是很难得的。

实例三:强化学习与算法交易

最后,跟大家分享一个强化学习与算法交易的案例。

强化学习,也是和刚刚所看到的,朴素贝叶斯分类器非常不同的技术。因为它涉及到环境不断的变化,你有一个决策,环境告诉你一个答案,你再做一个决策,再告诉你答案,最终优化一系列的行为,产生最终的结果。

这是06年的一个研究工作。是关于算法交易的,它的目的很简单。就是假设我希望在H这个时间段内,比如说五分钟内,卖出V股,某个公司的股票,我应该怎么操作?具体怎么下单,比如说我一次卖多少股,以多少价格,多久的时候再买一次。这样的问题。假设我能够看到的信息,就是市场当时的限价委托部,能够看到价格、数量信息以及最近的成交信息等。这个问题很经典,你给我的指令要马上把A股全部卖掉,以当时的价格卖,我是可以卖掉的,但你的成本会很高。

如果不这么做怎么办?我先估计一个价格,我看到最近的成交价格是27.2,我稍微高一点,27.25,我把一万股先放在那儿,等七分钟过来看,如果没卖完那么市价直接做。

这两个方法都有它的缺陷,第一个是不能够保证价格比较合适,通常价格都会比较高,另外,如果一开始就是大量的现价,有可能别人会做避手。

有经验的交易员,会不断优化下端的交易数量的价格。那么,有没有办法让计算机就像交易员一样,通过不断的操作获取经验,能够完成一个优秀的拆单方法呢?

这个跟强化学习的目的比较类似。强化学习用这样的图来表示目的和空间。这里的气就是表示环境,这里就是表示股市,市场在这里,你对市场里面哪些东西,参与者可能不是很了解,你所有看到的信息都在这里,我这里能看到什么?能看到你挂了一个单子成交多少,你能看到买卖双方的信息,以及刚刚成交的信息。i表示你还剩多少股,ri是市场的信息以及市场的状况,然后你需要做一个决定,b就是做一个决定,根据你之前所有的经验来判断我要卖多少股,多少的价格。这就是你的action,通过action,市场会告诉你结论,你卖了多少股,你抛出第二个action,直到最后把所有的股票卖完,你统计最终的收益,你需要卖出的股票的平均价格尽可能高。

这就是强化学习的基本框架。学习器会先根据已有的数据,做一个判断,判断之后,就会根据这个回报,经过好多轮的结果来衡量,它的做法是不是好,它把所有的信息都记录在他的知识库,未来就是用这样的信息来指导和操作。

对应刚才的问题来讲,我们会有这样的具体定义。比如说对于系统,能够返回的信息,包含着两个部分,如果一个机器在算法交易过程中,随时会看自己还剩多少时间,还剩多少股票需要卖。这个时候,当时的系统返回的买卖市场信息是怎样的,最近前十五秒成交的所有成交记录是什么样的,他可能会看这些信息,有了这样的信息,他需要做出一个判断,这里的判断就是一个变量表示。用一个变量就是相对于当前报价的溢价。比如说当前报价是五块,那就是持平的。如果为了加速成交4.8块就卖掉,马上就成交了,你说你不着急,你先等等,5.1,那就是正的,a是负的马上就成交。

每次机器只要决定a是多少就行了,具体的数量我们限定每次交易是500股或者是1000股,由具体的单元来设定。

机器学习的最终目标是希望通过决定每次的报价a,能够实现整体把所有的股票卖为最优价格,即按照最佳的成交价格卖出股票。

类似于一个交易员,每次做了判断之后就记下来,比如当我某一次还剩2分钟,卖了500股,当时的市场情况是这样,我收益多少。不停的学习,两年后我可能对每个数字、每个变化都比较精确了。假设我面对两分钟还剩200股的情况,曾经做过五种选择,五种选择的结果都能知道,这样就把所有的结果和经验累积下来,当发生类似状况的时候,我就能回想起以前的五种选择,带来的损失和收益是多少,从而采取最好的方式。通过这种方法,我就能够不断累积经验,找到最优的决策。

为了验证这个方法好不好,这个实验选了三支股票。亚马逊,英伟达和高通,选了一年数据训练这个机器的交易员。训练结束后,用剩下六个月来测试这个交易员的执行效果。

测试时有两种设置,一种是我要卖五千股,一种是卖一万股,每个股票都卖这么多,时间限定一是两分钟内卖完,二是在八分钟内卖完。

为了衡量市场当时的状况,定义了几种特征。一是如果现在把所有的股票都卖掉,可能会带来的平均冲击是多少,平均价格下降多少。这是一个数字,为了衡量我现在的股要不要卖。二是委托簿上最高报价和最低报价的差距有多大,最优的买和卖的数量差多少。此外,还会看最近十五秒内成交的所有指令是什么方向,数量是多少。根据这几个数字,可以猜出市场是什么状况。再加上我现在手上有多少股票,还有多少时间剩余,就能做出靠谱的决策。

结果是这样,基准就是刚刚提到的朴素贝叶斯分类器的方法,如果我要卖两千股五分钟,一上来就提交一个现价单,比如说25.5块,2千股,到了两分钟过来看,全部没卖都以市场价成交。

比较平均的成交价格,可以看到,每一种情况下,不管是要卖多少股票,多少时间,它的效果和平均价格是最高的,成本是最高的。如果改成把两分钟分为四个时间段,不断做四次决策,或者每次,假如有五千股,拆成四份,每次以最小卖出单元1/4来判断的话,我的结果就是中间一条线,如果t和i扩大,变成8,效果更好。也就是我做决策的力度越多越好。

当我还剩全部股票的时候,我的下一个指令我卖很多,当我的股票越来越少的时候,我的报价越来越高。另外就是时间。我说的时间越多,我就越不着急。时间越少,我全部卖掉,卖掉的量越多,基本上就是阶梯状,时间越少就抛出去,在你的手上剩的时间越多就赶快抛出去。

最后分享一个我们自己做的模型——动态因子模型。这个模型是用在线学习技术,用我们选择的因子数据,用在线方法来做的。

目的就是动态决定每个因子在什么时间的重要度。一月份二月份三月份不同因子产生的作用不一样。我们希望机器学习能够发现这种规律,在什么时候你应该看哪个因子。2014到2015年我们这个策略的回测结果一年是155%。相对沪深是52%,最大幅是15%。下幅是6%。我们每次都是根据过去一段时间市场的变化来预测未来因子的重要度。这就是在线学习的技术。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据挖掘DT数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档