在这篇文章中描述了,怎么用20行代码跑赢大部分的公募量化团队。写这篇的时候正值AlphaGo打败李世石,且看优矿基于海量金融大数据如何帮你一个人造出一个智能投资机器,在寻找Alpha的路上Go Go Go在第14篇日记中,介绍了如何在优矿上做Alpha对冲模型,这一篇将承接前文,重点介绍Alpha模型的实战价值!与此同时,本篇还为各位带来了众多福利(详见下文),本篇布局如下:
- 为什么选择Alpha模型
- 优矿上构建Alpha模型神器——Signal框架
- 典型公募团队如何构建自己的Alpha模型
- 如何在优矿上一个人干掉一家公募基金团队
- 特别福利:我要参赛
1、为什么选择Alpha模型
- 有效市场假说
- 上世纪70年代,尤金-法玛提出了有效市场假说,根据市场的不同情况,又可以分为三种不同的状态:弱式有效、半强式有效和强式有效
- 在弱式有效下,市场价格已充分反映出所有过去历史的证券价格信息,这种情况下,股票价格的技术分析失去作用,基本面分析还能帮助投资者获得超额收益
- 从现有的情况下看,成熟的美国市场也仅仅处于弱式有效和半强式有效之间,众多学者研究表明,A股市场由于散户参与量大目前处于无效市场和弱式有效之间,价格和价值往往偏差较大,非常适合用Alpha模型来投资
- 主动投资 VS 被动投资
- 究竟是主动投资好还是被动投资好?主动投资就一定会比被动投资能够获得更多的收益吗?这是个很难回答的问题
- 有众多学者做过类似研究,其中大多学者发现,从长期来看,被动投资甚至比主动投资表现要好(虽然总有那么一小部分主动投资产品表现是超过基准的),主动投资并非一定能带来超额收益,这里不一一列举学者们的文献,只提一下近几年来美国风靡起来的机器人投顾创业公司,比如[color=rgb(83, 137, 210) !important]Wealthfront
,它们的兴起就是从实际上证明有时候被动投资并不像大家所想的那么不堪一击
Alpha模型虽然属于主动投资范畴,但从风险和收益的角度来看,它更像有主动管理的被动投资,Alpha模型的目标就是稳健的获取相比基准指数的超额收益,比如每天比基准指数多0.1%的收益主动管理的被动投资,低风险下稳健的超额收益,这也是Alpha模型的优势之一
Alpha模型自身的优势
- 从量化产品的角度来看,Alpha模型也有其独到的优势
- 市场容量大,冲击成本小,模型本身并不建立在严格的假设基础之上,投资方法成熟,盈利可持续性强等
量化1.0 v.s. 量化2.0
- 传统的量化1.0主要依靠主信号+约束条件的办法,目前国内的友商和国外的友商也只能做到这点
- 量化2.0时代(目前大部分市场上发真实产品的量化基金的研发系统)已经把系统的做量化研究做的更细致,包含:
- 1)信号研发;2)信号组合与模型构建;3)风险模型;4)组合管理
- 优矿已经完美的支持量化1.0和量化2.0, 且基于海量金融大数据,可以做到一个人干量化基金一个团队才可以做到的事情,一个人也可以战胜Bridgewater和TwoSigma,接下来介绍我们的大杀器Signal框架
2、优矿上构建Alpha模型神器——Signal框架
A、第14天日记中的Alpha模型构建方法重温
代码参加原帖 https://uqer.io/community/share/56e69c14228e5b858cc258ff
B、Signal框架下的Alpha模型
用14天中的方法来构建Alpha模型,可以发现过程比较繁琐,具体体现在:每次进入handle_data都需要先取数据、然后计算信号、最后合成信号,所有的这些都需要自己去写。。。
在上述三个过程中,唯一重要而且最能体现投资者主观能动性的就是信号的计算过程,试想,我只要告诉你信号的计算方法,然后就可以进行Alpha模型的回测和实盘,是件多么愉快的事情啊
Signal框架就是把很多重复、繁琐、没有价值的事情帮大伙写了(比如取数据),大伙只用写信号计算相关的代码就行了
下面的例子就是在Signal框架下实现上面的策略,当然这里抛砖引玉,Signal框架更多强大功能和详细用法,官方会有更详尽的文档分享给大家,尽请期待~~
- 首先在initialize()之前定义信号如何计算的函数
- 在initialize()中注册信号
- 然后在handle_data()中直接通过account.signal_result获取信号的值
只需要在fama-french()函数中定义信号的计算方法,然后就可以直接在handle_data()中取计算好的信号数据,非常之简便!!!接下来就对比下,在传统的公募基金里构建一个Alpha模型是件多么费时费力的事情。
代码参加原帖 https://uqer.io/community/share/56e69c14228e5b858cc258ff
3、典型公募团队如何构建自己的Alpha模型
从构建Alpha模型的流程来讲述公募团队的人员构成
数据:Alpha模型的原材料,众多因子数据需要团队成员计算和维护,另外还需要研究员不断开发出新的信号
回测框架:每个公司都有一个自定义的回测框架,研究员需要开发并维护回测框架,而且还需要对因子数据进行回测验证
构建策略:投资经理根据数据和回测结果来构建自己的投资组合
模拟交易:构建好策略之后并不是直接就上实盘,还需要模拟交易一段时间,在模拟环境中查漏补缺
实盘投资:一切工作就绪后,交易员就在投资经理的指导下逐步建仓
以上五点写出来看似简单,但是每一点都对应着巨大的工作量,比如因子的计算与维护,一般都涉及几百个因子,每个因子的处理方式又各有差异。总的来说,发一个多因子量化产品绝对是需要一个团队的力量来完成的!
4、如何在优矿上一个人干掉一家公募基金团队
A、对比前面5点,我们先来看在优矿上如何一个人干一家公募基金团队的事情(接着再看如何干掉)
数据:DataAPI提供了海量的因子数据,几百个基本面、技术面、大数据类因子供你选择,任意组合
回测框架:更高效、更真实的回测框架Quartz为你护航
构建策略:Signal框架让代码更简洁、让投资更简单
模拟交易:最真实的模拟环境,根据策略信号模拟每天的收益状况
实盘交易:受国家政策限制,现在暂不能支持自动下单,但试想不久的将来(暂时不剧透已经有进展),从投资研究到实盘交易,自动化一站式服务,实现财务自由不再拼爹,只要有梦有想法
B、简单的业绩对比
为了体现代表性,选择大公募基金里运行时间较长的Alpha基金产品作为对比的对象,在经过筛选后,选择了上投摩根的上投阿尔法产品(377010),上投摩根相信大家都很熟悉,大公募的代表,而上投阿尔法成立于2005年,经受住了时间的考验,代表性强
优矿拿什么来进行比较呢?优矿现在有500万实盘,但运行时间太短不具代表性
折中一下,优矿拿Quartz框架下的回测数据来比较,但读者可能说会回测结果可以参数优化啥的,所以为了对比的一致性,回测的Alpha策略不做任何优化,就用上面介绍的经典Fama-French三因子,因子权重也不优化,等权处理
对比时间尽可能长,取5年,从2011年1月1日至2016年1月1日
对了,顺便透露一下,不带太多参数优化、有投资逻辑的Alpha模型,其回测结果和实盘结果的一致性还是非常高的(经500万实盘大赛验证)
再顺便说一下,国内的友商玩来玩去就只会玩小市值,真的需要来点专业精神了
首先来看一下上投阿尔法从2011年1月1日至2016年1月1日的收益表现,产品链接请点击,截取的收益对比图如下所示
-
接下来看看优矿下的Alpha模型,回测结果见上面第二点中的策略,可以看到没有任何参数优化的Fama-French三因子的回测结果是非常不错的,对比区间内累计跑赢沪深300指数200%多,而且信息比IR高达2.62!!!下面来看一下,两条收益线之差的变化情况。
- 从上图简单看出,在对比区间内,上投阿尔法是跑输基准指数的,不管是上证综指还是沪深300!
- 可以看到,超额收益在回测期间基本能实现持续稳定的增长,Fama-French三因子作为业界经典也有其投资逻辑,这也是为什么说,没有太多参数优化、有投资逻辑的Alpha模型,其回测结果和实盘结果的一致性是非常高的。最后,补充说明几点
拿回测盘和实盘比确实有失公允,但没有任何参数优化、没有任何因子偏好的回测结果还是有一定的代表性的,这至少说明,在优矿上一个人20行左右的代码能够干公募一个团队干的事情,而且实战结果也不一定比他们差,甚至更好!
如上的例子也只是简单的拿学术界经典文献作为范例,DataAPI中提供了几百个因子数据,基本面的、技术面的、大数据类的等等,如何将因子数据转化为实际财富看各位了;另外DataAPI提供了海量基础数据,大伙完全可以根据基础数据自定义因子,同时在因子合成上也可以做很多工作(并非像例子中的直接等权),想象空间是无限的,优矿只能帮大家到这了,接下来看各位的了
最后,为了帮大家快速变因子为财富,下面就送上特殊福利,大家通过Signal框架写好自己的Alpha策略之后,再只用调用一个我要参赛函数就可以拿着自己的模型参加500万实盘大赛了!
5、特别福利:我要参赛
策略代码如上,简单说明几点
大家只需要在iniatilize()函数之前定义好自己的Signal算法,本例中就是fama_french()函数
有需求的可以自定义策略起始日期、股票池等参数
handle_data()函数里只有wo_yao_can_sai()函数,这里面包括了对universe中ST股、停牌股、新股、流动性差股票的筛选,完美匹配大赛规则
将主观能动性发挥到最需要的地方,只需要写信号构建算法就够了
优矿官方还把以上比赛规则筛选逻辑封装成了一个函数叫contest(),代码可以精简到这样:
代码参加原帖 https://uqer.io/community/share/56e69c14228e5b858cc258ff