5W字入门干货:手把手教你用机器学习做金融交易(上)

简介:
本文来自AI新媒体量子位(QbitAI)

这是一篇长达5W字的干货。

作者用诙谐的笔触讲述了用机器学习入门金融领域的正确姿势,基本涵盖了基础机器学习的方法及具体应用,还有部分期权的科普。文风清奇,也哲思满满。

原文标题为《教你Machine Learning玩转金融入门notes》,内容分为三部分:

一. 金融和统计背景介绍

二. Machine Learning各个方法和在trading上的应用

2.1 Supervised Learning: Regressions

2.2 Non-Parametric Regression: K-Nearest Neighbor and LOESS

2.3 Tree Based Method ( Random Forest 和 Extreme Gradient Boosting )

2.4 Classification ( Logistic Regression 和 Support Vector Machine )

2.5 Unsupervised Learning ( Principal Component Analysis 和 期权科普 )

三. 结尾感悟

由于篇幅原因,量子位截取原文第二部分与大家分享。

你,准备好了吗——


这一部分大概介绍了各个方法怎么运用,但是对于一般没有统计基础的读者来说还缺少了事前对于每个方法本身的介绍。

我这里想做的事情就是先从统计的角度介绍每一个方法,然后再解释其在金融上面怎么应用(大部分的书都是要么单纯关于统计的推导,要么直接写金融,但我觉得其合起来一次性顺着看下来其实是最符合理解整个过程)。

每一个方法我都会大概的介绍其数学推导的机理和方向(为了尽量使得每一个方法简洁易懂,所以需要牺牲一定程度的严谨性,希望写的不准确的地方大家见谅),并且加上我自己的理解给出其相应在金融上具体是怎么应用。

还得强调一下,这里并不是说这些推导不重要所以才省去,而是极其重要以至于很难在一篇文章里面用文字说清楚,推导的细节才是这些方法的核心和精华,所以如果不想只懂皮毛的话还是需要细心去思考每一个方法的构建过程,毕竟其应用的利弊和假设条件都隐藏在芸芸的细节之中。

首先我们需要知道一些区分统计方法的概念:

一个是parametric和non-parametric,一个是supervised和unsupervised,还有一个是regression和classification,分别是代表了问题的不同的特性或者要求。

parametric和non-parametric的区别是model中有没有参数。

supervised和unsupervised的区别是有没有Y,比如我们只研究Xi之间关系的话就是属于unsupervised。

regression和classification的区别是在有Y的supervised方法下面,Y是定量的(quantitative,比如涨跌幅度)还是定性的(qualitative,比如涨跌方向)。

接下来我们就开始介绍各个不同的统计方法和其应用:

2.1 Supervised Learning: Regressions

对于supervised方法,我们最重要的就是要弄清楚我们想要predict的是什么,我们有的因子又是什么;也就是分别弄清楚在实际问题里面Y是什么和X是什么。

Penalized Regression Techniques: Lasso, Ridge, and Elastic Net

对于处理线性的问题,我们可以用ridge还有lasso。

好处是非常易于理解背后的关系,坏处就是对于non-linear的问题fitting效果不好,弱点还有变量Xi数目比较多,或者变量之间有correlation的时候也会效果不好。但是这个是所有regression方法的基础,所以必须掌握。

一般的形式如下:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

Xi是变量,β是相应变量的系数,ε是随机的一个不可消除的误差,Y是我们想要预测的目标。

比如一个具体的形式是
gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA
这里的US growth,EM growth,US HY Bonds,US Equities,Global Equities是五个变量Xi,想要预测的Y就是Asset Price。

这里我们可以看到US Equities和Global Equities前面的系数相对其他变量大很多,这就说明了这两个变量对于这个Asset Price的影响最大,当然US Equities是正面的影响,Global Equities是负面的影响。

这里我们就可以发现一个问题,那就是比如像EM growth这个变量前面的系数非常小,说明这个因子对于Asset Price的贡献不大,所以如果依然把这个因子加入model的会就会导致过拟合,因为本来这个因子是不应该在model里面结果我们却放进去了,自然就导致变量更多,model更复杂增加了其对于data的dependence,也就是variance。

当变量比较少的时候我们自然可以手动把这些不需要的因子剔除掉,但是如果变量有成百上千甚至上万的话,人工来选择因子就会非常繁琐,而且还容易造成错误。有没有一种方法可以自动帮我们做这件事情呢?有,就是接下来我们说到的Lasso方法。

640?wx_fmt=png&wxfrom=5&wx_lazy=1
Lasso做的事情就是加入一个penalty因子,使得自动将相关性不强的因子自动筛选掉,也就是使得其前面的系数变为0。

然后还有一个方法,就是ridge。唯一不同的地方就在于ridge的penalty函数是系数的平方之和,而不是Lasso里面系数绝对值之和。

其实他们做的事情都比较类似,都是为了减小不相关因子的系数大小。

但是这里有一个问题,那就是如果有一个因子确实是一个非常强的因子,并且前面系数非常大。如果用Lasso和Ridge的话就会使得其前面的系数减小,那这样的话不是underestimate这个因子的重要性了么?毕竟系数越大的,在这个penalty下面会减小的越多。

对于这个很大系数的主要因子的问题,理论上可以证明出Lasso和Ridge并不会首先将系数大的主要因子系数变为最小,而是首先将不那么重要的因子的系数变小。可以从主观的感觉上面来理解,如果将主要因子的系数降低的话,会造成公式前面那个RSS这一项的值变得很大,这样即使后面penalty会减小,但整体的和不一定会降低,反而可能会升高(毕竟penalty只是一个调节的项,RSS才是想要降低的主体)。

但是如果降低的是不那么重要的因子的系数,就会使得前面RSS的值增加不多,但是后面的penalty会降低不少,特别是penalty前面系数a足够大的情况下。所以综合而言,Lasso的作用是把不重要的因子剔除出去(也就是使得其前面的系数变为0)。

Lasso相对于Ridge的优势也正在于可以将主要因子的系数直接降为0,这样也就是一个选因子的model。

关于Lasso和Ridge之间的对比,至于为什么Lasso可以将不重要的因子的系数降为0而Ridge不行,我们可以看下面这个图更加直观:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

假设我们只有两个因子X1和X2,他们分别的系数是β1和β2。然后上面那个椭圆就是前面那个loss function RSS画在β1和β2的平面上,每一个椭圆代表的是不同的RSS的值,并且椭圆越小的时候RSS越小,也就是我们想要其越小越好。

对于Lasso和Ridge,因为前面那一项RSS都是用同一套数据经过同样的least square方法计算出来,所以椭圆的形状对于Lasso和Ridge都是一样的。不一样的仅仅是第二项,也就是阴影的面积。

一方面我们想要这个椭圆越小越好,最好的情况就是直接缩小成中间的点𝛃 hat。

另一方面,我们又想要阴影部分的面积最小,因为我们所加的penalty一定程度上就代表了阴影的面积。

所以两个方面的平衡下,我们就需要找到这个椭圆和阴影面积的切点,这样可以使得椭圆足够小,这个阴影的面积也足够小。
现在我们知道了切点是我们需要找的点,这个点的坐标是(β1, β2)。

我们可以看到Lasso的情况是正方形的阴影面积和椭圆相切,由于正方形是有四个突出的顶点,所以这四个顶点更容易和椭圆相切。而这四个顶点的坐标都在X或者Y的坐标轴上,也就是要么β1被留下,要么β2被留下,其实这就是为什么可以将被去掉的因子的系数变为0(因为切点在坐标轴上)。

而Ridge的情况是,由于阴影面积是一个圆,所以并没有突出的顶点可以更容易跟椭圆相切,故想要正好相切在坐标轴上是非常困难的,需要RSS的形状满足非常极端的条件才行。

所以如果想要选择因子的时候,我们可以利用Lasso的方法来获得足够重要的因子。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

从上面这张图我们可以看到Lasso基本上把真实Actual的主要因子都抓住了,并且给予的系数(权重)基本上和真实值一致。而OLS,也就是最基本的least square的方法(仅仅只有Lasso的第一项)会分配权重给全部的因子,这样就造成了overfiting。也可以看到Lasso里面加上的penalty这一项对于筛选重要的因子的还是很有效的。

下面是penalty因子系数α的大小(X轴)和得到的每个因子的系数大小(Y轴),

640?wx_fmt=png&wxfrom=5&wx_lazy=1

我们可以看到α的值从小到大(X轴从右往左看)的时候,右边的Lasso model会让不同的因子在不同的时期消失。也就是随着α的值增大(也就是penalty的程度越来越大),不断有因子的系数被Lasso归0,也就是剩下的因子的重要性越来越大。最后剩下几个影响非常大的因子。

而左边Ridge的只能让这些因子的系数一起变小,最左边α值也就是penalty非常大的时候,几乎所有的因子系数都变成非常小,这样显然不是我们想要的结果。

Bayesian和ridge还有lasso的关系:

ridge还有lasso都可以由贝叶斯推导出来,只是需要改变贝叶斯里面prior的distribution的形式,ridge需要在贝叶斯里面把prior改变成laplacian,lasso需要把prior改变成gaussian。

理论上来说,这两种prior distribution的贝叶斯得出的结果应该是和ridge和lasso的结果一致。

这里用贝叶斯导出的原因是贝叶斯不需要复杂的计算公式,仅仅需要的到P(u|data)之后做simulation,可以直接从generate出来的sample里面得到系数beta的均值和方差,而不需要像frequentist那样用公式来求。(具体公式的推导在附图中)

640?wx_fmt=png&wxfrom=5&wx_lazy=1
并且贝叶斯的方法当data足够大的时候,prior的distribution其实重要性会越来越小(我自己也胡乱写了传统统计方法frequentist和下面Bayesian的证明)。不过data的size什么才叫做足够大,这是一个问题。
640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

接下来我们介绍一个利用Lasso的例子,

640?wx_fmt=png&wxfrom=5&wx_lazy=1
这里我们想要预测的Y有4个,S&P 500,10-year UST,US dollar(DXY),还有黄金gold。

并且我们选取了4个Xi,就是他们各自过去1M,3M,6M还有12M的收益。

这样我们对每一个Y都有4个Xi作为变量。我们想要预测的Y是此种asset第二天的收益。如果是大于0就做多,小于0就做空。

比如我们现在单独看S&P500。

我们利用的dataset是滚动的500个交易日,也就是对于S&P500有500个data值,每个data的值是一个5维空间内的一个点(Y, X1, X2, X3, X4),也就是(S&P500第二天的收益,S&P500当天之前1个月的总收益,过去3个月的总收益,过去6个月的总收益还有过去12个月的总收益)。我们想要做的就是利用一个Lasso模型去fit得到这500个点,使得其对于这500个点fitting的最好,也就是RSS+penalty的和最小。

这样我们就在5维空间内找到了一条线,根据坐标(X1, X2, X3, X4)还有其系数我们就可以预测出Y,也就是在当天(接近)收盘的时候,算出来S&P500当天之前1个月的总收益,过去3个月的总收益,过去6个月的总收益还有过去12个月的总收益,也就是在5维空间里面加入今天这个点,并且因为是rolling window,所以将最初始的第一个点(今天之前的第499天)去掉,得到空间中新的500个点,重新获得一个新的Lasso model,并且根据这个update之后的model去预测第二天的收益。

具体应用中似乎是3个月重新renewal一次model。也就是并不是每天都会加入一个点再去除最旧的一个点,而是在三个月之内用同一套model结合这三个月每天的(X1, X2, X3, X4)去预测第二天的收益。等到了三个月之后,就一次性加入这三个月所有的点,去除掉最旧的相同数目的点,重新进行建模得到一个新的Lasso model,然后再用这个model结合接下来三个月每天的(X1, X2, X3, X4)来预测第二天的收益,一直rolling下去。

这里需要注意的是(Y, X1, X2, X3, X4)都需要standardize(具体怎么standardize需要弄清楚, 后面很多方法都会预先将Xi standardize),因为我们知道跨度不一样其值也会有不同的scale。

但这里是仅仅用了(X1, X2, X3, X4)作为变量,但实际上我们有4个不同的asset Y,S&P 500,10-year UST,US dollar(DXY),还有黄金gold,
所以可以将这4个Y的(X1, X2, X3, X4)都设置成共用的16个变量(X1, X2, X3, X4,…X16)。然后用这同一套Xi对这四种asset进行regression,每一种asset就都有一个Lasso model进行预测。

结果譬如下图,

640?wx_fmt=png&wxfrom=5&wx_lazy=1
我们可以看到预测S&P500的lasso model用到了14个factors。并且单纯做多的收益和sharp ratio都比直接买S&P500高。

同样我们可以看到其他asset的结果。

640?wx_fmt=png&wxfrom=5&wx_lazy=1
640?wx_fmt=png&wxfrom=5&wx_lazy=1
640?wx_fmt=png&wxfrom=5&wx_lazy=1
然后同样就像上面解释lasso model时候看到的,我们可以调整其penalty的系数α的值来看对于每个asset,其不同factor系数的变化情况,可以很清楚看到哪些factor是最重要的。
640?wx_fmt=png&wxfrom=5&wx_lazy=1
因为这里我们有4个不同的asset,所以可以将其第二天的预测表现进行排序。前两个做多,后两个做空,也就是所谓的多空策略。
640?wx_fmt=png&wxfrom=5&wx_lazy=1
好了,这就是linear里面的regression,也是最经典传统的统计方法。

2.2 Non-Parametric Regression: K-Nearest Neighbor and LOESS

对于处理非线性的问题,一个是可以用高阶的linear regression,另一个就是用非参方法KNN之类

非参方法好处就是如果fundamental的model是非线性,效果会比较好。坏处就是如果model本身是线性的,就容易造成overfit,并且KNN对于outlier的点非常敏感。

这里我们用KNN的方法来择时。(也就是选择历史上类似宏观情况的regime,然后平均一下收益率作为预测值)

640?wx_fmt=png&wxfrom=5&wx_lazy=1
具体是这么工作的:

我们有7个类别的indicator,然后用这样一个7-d的vector来表示宏观经济的位置regime(或者说是在7-d空间内的一个点)。具体怎么构建的这7个indicator可以参照如下slides:

https://www.cmegroup.com/education/files/jpm-systematic-strategies-2013-12-11-1277971.pdf

所以这7个indicator就是我们的7个Xi,构成了一个7维空间,并且由于每个月都有这7个indicator的值,所以都可以用这个空间里的一个点表示。 我们想要预测的Y就是20个risk premia的每一个。

或者可以这么说,每一个月作为一个观察。然后每一个观察包含了这7个Xi和Y(20个risk premia的每一个)的值。并且我们用Xi的7维空间来区分regime。仅仅是画点上去,而不是像之前的regression一样想要用一条线去fit,这里获取Y的方法是将想要预测点周围的K个点对应的Y取平均值。

我们将过去的10年每个月都可以画在这7-d indicator的空间中,每一个月都可以被这个空间内的一个点所代表其宏观情况。这样当下这个月也可以画在同样一个空间里,找到其最近的K个点。

当然K也可以用其他的值,这样就是average一下附近的K个点的每一个risk premia的return,这样我们可以得到这个点周围附近K个点(也就是历史上类似宏观情况的K个月)这20个risk premia每一个的平均值,(这个地方距离是standardize之后的距离还是直接用原indicator的scale呢?),这样就找到了历史上最接近现在这个月宏观经济情况的K个月的20个risk premia每一个的平均值。

根据那个月之后的一个月的20个risk premia(此时S=20的情况下)的表现情况(如果20个risk premia是daily的数据,那么就用average来得到一个月每天的平均值,其实也可以直接加起来看每个月的总收益?),并且将其排序,选择其中一部分然后平均分配资金,来决定当下这个月的下个月投在这20个risk premia上的funding distribution。

这里有一个问题就是,因为不能单纯看20个risk premia的收益大小来选取(不然就全部投给预期收益最高那个risk premia了)。我猜测可能还需要看组合起来看总体的sharp ratio值。所以这样排列下来仅仅只能找到最高收益的那个risk premia,而不是找到最好的sharp ratio。所以需要看这些20个risk premia的subset的组合情况,得到最好的sharp ratio。

但是问题在于,怎么将这些S个risk premia策略组合在一起得到最好的sharp ratio?这个可能就需要看回测的结果了。(但是怎么回测这20个risk premia所有subset的可能性?)

是不是还涉及到给weight的问题呢?

这里似乎就是直接给予这些不同的risk premia策略相同的weights,也就是将funding直接均分给不同的策略。但是其实可以用machine leanring来给不同的策略分配不同的weights来改进。

这些细节的问题我也没有一个确定的答案,可能需要问JPM具体做这个策略的人了…

640?wx_fmt=png&wxfrom=5&wx_lazy=1
这就是具体的结果。

左边的图的列向量是选择K从0到25,横向量是选择risk premia的个数。方框中的数值就是sharp ratio。从这张图看来,确实是需要对所有的组合进行回测。但这里每一行似乎仅仅区分了risk premia的个数,而不是每一个单独不一样的risk premia? (想要弄清楚,可能需要看看JPM的risk premia是怎么构建的了,应该都是independent,所以并不能单纯以个数来作为loop的条件?)

这里的右图就是单纯给这S个risk premia(S=20所有都用?)平均分配资金,也就是红线。然后就是利用这7个indicator预测的各个risk premia进行排列组合,选出sharp ratio最高的再平均分配资金。

2.3 Tree Based Methods:

首先介绍tree based method的基础,也就是regression tree。

给定很多变量Xi,它的原理就是取遍所有Xi和每一个Xi所有的值,找到一个让全局的RSS(Residual Sum of Squares是一个指标,用来描述预测的Y和实际的Y之间的差距的平方和,也就是预测的效果好坏)最小的某一个Xi的某一个值,这里就算是一个internal node。

这样,Xi的这个值将所有的点分成了两个区域,每一个区域的点所estimate的值就是这整个区域所有点的平均值。 再同样的过程,得到一个让这一步全局RSS最小的Xi的一个值(这里Xi可以跟上一步的Xi是同一个变量)。

同样的过程不断进行下去,一直到某一个条件停止。比如RSS到达某一个值,或者某一个区域的点小于5之后,等等。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

记住,这里的RSS是全局的RSS,也就是所有区域的RSS总和,而不仅仅是所分开区域的RSS之和。

同理,这里需要一个penalty函数。因为树越深其实越overfit(可以想象当树深到极致就是每个区内只有一个点),所以给目标函数RSS加上一个additional的alpha*树的深度,使得其总和达到最小。

合适alpha值的选取就需要通过cross-validaiton来得到,同时可以得到的也有tree的深度。这样一个model就选出来了。

regression tree应用的示意图如下:

640?wx_fmt=png&wxfrom=5&wx_lazy=1
regression tree的好处就是非常容易理解,因为每一个node的Xi取值都一目了然。但是不好的地方就是它对于outliers非常敏感,因为outliers会极大的增加RSS这个指标,所以很容易被影响。

Random Forest

random forest的意思就是,在上面的regression tree的基础上,我们再利用bootstrap来产生数量为B的test datasets(也就是bagging的model)。对于每一个dataset我们可以利用一个regression tree去fit。所以对于每一个观察,我们都可以得到B个prediction的值。

接着我们就把这些值average一下,就得到了我们最终的estimate。这样的好处就是可以降低variance,因为我们用了很多的sample一起求出的平均值,而不是像decision/regression/classification tree那样一次性的estimate。

然后random forest又加了另外一项,也就是限制每一个node可以选取的Xi的数目。比如一共有p个Xi,但是我们可以规定每个node只能randomly选取sqrt(p)的Xi。这样的好处就是为了防止一个factor dominates,不然就会导致这B个tree的correlation非常大,即使求平均值也起不到降低variance的作用。

具体我们可以看如下的例子:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

这里要做的事情就是利用random forest的model来选股。我们的股票池里面有1400个股票,然后每个股票我们都有相同的14个factor,也就是有14个Xi(注意这里的factor需要先normalize一下,也就是standardized to mean 0 and variance 1,因为各个factor的scale不一样会导致fitting有bias),这里的Y就是收益率。

我们利用random forest的model来预测。

首先我们利用bootstrap构造100个test datasets,然后针对每一个dataset去fit一个regression tree。并且每一个tree的每个node处,一般每次只能randomly选择sqrt(14)=3 factors。但是这里我们用OOB这个方式来判断每个node处可以选择Xi的个数(得到的是14个全部可以用),并且每个tree的深度也是由OOB这个最小值来确定。

接着我们对于每一个股票都有100个prediction的值,然后average,得到我们最终的estimate。

这里的一个问题也是同样,我们是不是需要将股票的收益向右位移一个单位,使得这14个risk factors Xi所对应的Y是下一个月的收益。毕竟如果放在同一个月,那就不存在预测的问题了,因为都是同时发生,而不是用一个去预测接下来即将发生的另一个。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

然后利用每个node对于Xi的选择,我们可以得到上图,可以看出来哪个factor影响最显著。

另一张图就是策略的回测结果,通过对于这1400个股票的预测值进行排序,我们就可以得到每一个quantile(一共分为5个quantiles)的股票basket。

640?wx_fmt=png&wxfrom=5&wx_lazy=1
图上表示的就是单纯对于每一个quantile的basket做多(5条曲线),还有long/short的策略(也就是做多第5个最高的quantile basket,同时做空最低的那个quantile basket),其所得到的收益率是最稳定的。

因为我们可以看到benchmark的曲线在1和5之间,所以做多5,做空1的话就会使得曲线更加平滑。不然会跟大盘的相关性非常大,这也就是一种把大盘波动hedge掉仅仅只剩下1 quantile和5 quantile之间的差值的收益。

Extreme Gradient Boosting

boosting的原理就是慢慢学习,也就是先给一个不太准确的estimate,然后用真实值减去这个estimate得到residual/error,接着用regression tree去fit这个剩余的residual error得到这个residual的estimate,再用上一层residual减去这个estimate得到下一层的residual,然后进行K次(即一共用K个tree去fit K层的residual),实质上是从一层一层的residual里面不断缓慢提取信息不断加到之前的estimate上面,使得最终得到一个总的好fitting。boosting指的是一类方法,而不是一个方法。Extreme Gradient boosting是boosting中一个的方法。

640?wx_fmt=png&wxfrom=5&wx_lazy=1
640?wx_fmt=png&wxfrom=5&wx_lazy=1

这里做的事情是利用XGBoost来预测9个US sector ETFs的表现,financials, energy, utilities, healthcare, industrials,technology, consumer staples, consumer discretionary and materials,对应于Y1,Y2…Y9。

首先我们有8个Xi,也就是8个宏观的factor,
Oil, Gold, Dollar, Bonds; economic surprise index (CESIUSD), 10Y-2Y spread, IG credit (CDXHG) and HY credit spreads (CDX HY)

然后我们要做的事情就是,用这8个Xi,还有extreme gradient boosting的model去预测每一个Yi的表现。

这里extreme gradient boosting model里面的参数是,5-fold-cross-validation来确定tree的数目为30,也就是经过30次的从residual里面extracting information。并且每个regression tree的深度为7,也就是每个tree被分为了7+1=8个区域。

有了这个extreme gradient boosting model不断的iterate(30遍,每一遍的tree的深度是7)来不断extract信息给想要估计的那个estimate函数f^hat之后,f^hat确定了下来。在同样给定了这个想要预测的observation的8个Xi的值(也就是这个8维空间内的一个点)之后,就可以经过这个model得到我们想要的预测值Yi。

这里应该是用的每天的涨跌幅(里面有说rebalance daily at market close)。因为对于同一个Yi来说,比如我们预测energy这个sector ETF的涨跌幅。我们每一天都有这8个macro的factor的一个值,这样一天在这个8维空间上来说就是一个点,252天的话就是有252个点。这样才能开始利用boosting tree来划分区域进行预测。甚至都不一定是daily的数据,可以是更小级别的数据,这样点(信息)也就更多了,model的预测也更加贴近真实的model。然后利用这252个点来建立model,建立之后预测energy ETF的涨跌幅。

有一个问题就是,同样我们这里可能需要将energy ETF的向右位移一个单位,也就是将第二天的energy ETF作为这一天的Yi,这样8个Xi预测出来的结果也是第二天的energy ETF的涨跌幅。(但这里还有一个问题就是为什么是位移一个单位,也许这些macro factor传导给ETF是有不同时滞的,所以每个Xi甚至都需要不同的位移?)

然后根据long-short策略,每天我们可以预测出这9个ETF的涨跌幅度,将其排序,做多前三个,做空后三个,形成了一个策略。

除此之外,我感觉还可以用另一种方法。那就不用位移,直接将当天的ETF涨跌幅看做是Yi。这里的一个assumption就是市场是有效的,macro factor的变化可以马上传导给ETF的价格。这样的话我们就可以通过预测的值,看如果当天实际并没有达到这个涨跌幅(在快收盘的时候检查condition),我们可以进去统计套利,也就是赌其一定会往那个涨跌幅移动。

也可以将其量化变成相差多少个sigma(假设围绕预测值是一个normal distribution,其mean就是预测的值,width可以取历史上面的error是不是都一样,如果是近似flat可以直接用这个constant作为error,如果不是的话可以继续分析其error的结构),大于两个sigma的时候进去开仓bet会继续往预测的方向走,不一定是同方向,如果涨跌幅走过了2个sigma那就是bet其一定会reversion。

本文作者:江海
原文发布时间:2017-06-27
相关文章
|
3月前
|
机器学习/深度学习 开发者 异构计算
机器学习入门-Colab环境
Google Colab(Colaboratory)是一个免费的云端环境,旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势,使得编写、执行和共享代码变得更加简单和高效。Colab在云端提供了预配置的环境,可以直接开始编写代码,并且提供了免费的GPU和TPU资源,这对于训练深度学习模型等计算密集型任务非常有帮助,可以加速模型训练过程。
86 0
|
21天前
|
机器学习/深度学习 人工智能 运维
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)(二)
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)
53 1
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)(一)
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)
60 1
|
10天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【4月更文挑战第9天】本文介绍了使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先,简述了机器学习的基本概念和类型。接着,展示了如何安装Python和Scikit-learn,加载与处理数据,选择模型进行训练,以及评估模型性能。通过本文,读者可了解机器学习入门步骤,并借助Python和Scikit-learn开始实践。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】机器学习简单入门
【机器学习】机器学习简单入门
35 1
|
2月前
|
机器学习/深度学习 数据采集 算法
Python中的机器学习入门:从数据预处理到模型评估
Python中的机器学习入门:从数据预处理到模型评估
194 35
|
2月前
|
机器学习/深度学习 数据挖掘 程序员
深入理解Python协程:提升并发编程效率基于Python的机器学习入门:从理论到实践
本文旨在探讨Python协程(Coroutine)的内部机制及其在并发编程中的应用。区别于传统的线程和进程,协程提供了一种更轻量级、高效的并发编程模式。通过深入分析协程的工作原理,本文将展示如何利用协程优化程序性能,实现高效的异步任务处理。我们将通过实例探讨协程的创建、事件循环的管理、以及与异步IO的集成,为读者提供一套完整的协程应用方案。此外,本文还将对比协程与其他并发模型(如多线程和多进程)的优劣,帮助读者全面理解协程在现代编程中的重要性。 在本文中,我们将深入探讨机器学习的核心概念,并通过Python实现其基础应用。不同于传统的技术文章摘要,我们希望通过一个故事性的引入,让读者感受到
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习入门知识
机器学习入门知识
150 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
15天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)