科普文 | 量化投资从0到1
本文是科普文,对之前个人所写的量化投资相关的文章进行了一些整理,方便初次接触量化的朋友进行学习。
如果你已经看过我之前关于量化的文章,并且已经走在了量化的路上,为了节省您的时间,那么本文可以不用继续往下看了。
量化投资,可以按照字面分成两部分,分别是“量化”和“投资”。“投资”是指我们把钱投出去,而“量化”指的是投资之前需要做的准备工作。
为什么量化?
量化是什么?
怎么学量化?
要注意什么?
下面,我将会从这几个方面对量化进行展开,当你弄清楚这些问题之后,就可以快速上手量化投资了。
1 为什么要学习量化?
最近两年,网络上的量化平台如雨后春笋一般涌现出来。
就算你没有接触过量化投资,也或多或少从别人那听说过。
就算你没有听说过,也至少知道alphaGo战胜了李世石、战胜了柯洁的新闻。
机器人可以战胜人类,这不再是一件新鲜事。
在可以预见的未来,投资也会如此。
1.1 量化可以给我们带来更高的收益
对于常常和数字打交道的投资领域,量化能够发挥出什么样的光彩呢?
詹姆斯·西蒙斯[1]是量化投资的先行者,也是最早的一批人之一,更是其中最厉害的一个。
他在1988年3月成立的大奖章基金。在1989-2009年期间,大奖章基金给客户的平均年回报率高达35%。
如果不考虑高达44%的提成,大奖章基金的年收益率实际上要超过60%。
詹姆斯·西蒙斯给投资界树立了一个标杆,告诉了人们通过量化的方式,可以获得远远超出平均水平的收益。
了解过詹姆斯·西蒙斯的人可能知道,他在进行量化投资之前,是一个数学家。
而我们大部分人都是普通人,他的那套“弹指神通”我们可以学得会吗?
我不是专业学习数学的,也是普罗大众的一员。
同样作为量化的初学者,我的一些经验或许能够给你提供一些参考。
之前,我写了一篇文章《曾经,我找到了投资的圣杯》[2],介绍小市值策略在过去能够达到的程度:
2007年1月1日到2016年11月24日初始资金5万的回测结果投资将近10年,收益6841.38倍,有没有被这样的收益率惊到?
惊叹过后,我马上就用于实盘,下图是joinquant模拟盘至今的结果:
二八轮动小市值实盘是从2016年6月6日开始的,一年多一点的时间里,获得了年化14.02%的收益。
去年6月份也正好是重组新政开始的时候,在这样严峻的环境下,能够获得这样的收益也还算不错了。
当然,我实际上并没有紧跟这个模拟盘,因为中间对小市值未来存疑,我在2017年4月24日开始更换策略,就是我之前发布过的动态因子策略:
动态因子策略所以实盘的结果是,从2016年6月6日至2017年7月13日,实现了24.49%的收益,折算成复合年化收益是21.95%。
熊途漫漫,能够获得这样的收益我已经比较满足了。
对于一些牛人来说,量化的模拟盘可能是这样的:
蚂蚁搬家03_精选策略也可能是这样的:
银行日内1.2 可以免受情绪的干扰
如果你交易过股票,肯定会有这样的感受,在决策的时候,常常容易纠结。
买了是否还会跌呢?
卖了是否还会涨呢?
每当我们下定了决心,价格的变化,又将我们打回原形。
既浪费了时间,又消耗了精力,还对我们长期地投资结果没有什么影响。
明明是一种捡芝麻丢西瓜的行为,很多人也清楚这个道理,但是常常就是忍不住。
我们的投资决策,常常会受到情绪的干扰,这源于人性,很难解决。
通过量化,其实可以很好地绕开这个干扰。
在制定好量化策略之后,策略会根据市场的情况,对标的进行轮动。
如果不进行同样的计算,我们在当天往往不知道交易的股票是什么,甚至不清楚是否需要交易。
以我个人为例,我设置的策略交易时间为14:50。
在这之后,我了解到需要轮换的股票,并进行交易。先是卖出,然后买入,最多的时候,需要进行20笔。
因为后面三分钟是深交所集合竞价时间,实际上交易的时间只有不到10分钟。
在这么段的时间里,我常常弄得手忙脚乱,有时候甚至没有完全轮换完毕。
你说,这样的情况下,还有心思去纠结吗?
1.3 可以节省出很多时间
功课应该在投资之前就做好。
但是这样的功课,往往需要花费大量的时间和精力。
刚刚学习完价值投资,我就有这样的感觉。
每投资一家企业,我们都需要看它的年报,了解它的财务状况。
我们还需要了解公司的商业逻辑,分析其竞争环境。
每投资一家公司,就需要付出一份时间和精力的。
在刚开始还不熟悉的时候,常常需要花费十天半月的时间,才能研究好一个公司,并且这个公司还不一定适合投资。
成本是放弃了的最大代价,我们在投资上多投入一份精力,就会在工作上少花费一份精力。
也不怪有人会说,年轻人最重要的是投资自己。
因为本金比较少,通过这样的方式投资,往往得不偿失。
量化投资,其实很好地解决了这样的问题。
在制定了一个策略之后,我们只需要花费很少的时间进行维护,付出的成本比价值投资要低得多。
如果你是一个上班族,想要获得不错的收益,又不想在投资上花费太多的精力,量化就是一个非常好的选择。
如果你是一个价值投资者,同样也应该学习量化。
因为通过量化,你可以节省很多采集数据的时间[3],让自己专注于定性方面的研究和分析。
1.4 可以快速地检验自己的想法
对于投资,不知道你有没有一些自己的看法?
我刚刚接触投资的时候,想法不多,只求通过抄作业得到一个标准的答案。
但是随着研究和理解的深入,我发现作业抄得再好,你也很难超越写作业的人。
同时你能够抄到的作业,别人自然也能够抄到,这就会有那么一些风险。
然后我就不满足于抄作业,也有了一些自己的想法。
第一次出现了问题,是对港股牛熊证的投机。
之前看到别人分享的方法论,胜率挺高的,并且实现起来也不困难。
然而我在实盘的时候,却发现不是这个样子,除了一开始稍有盈利,后面一直在亏损。
还好当时总投入的金额并不多,并且在亏损之后也没有继续出现想要回本的赌徒心态。
不过这样的损失,其实是可以避免的。
在那之后,我通过量化的方式,使用历史的数据进行了简单的回测,结果是:短期能够获益,长期是要亏损的。
问题的主要原因是出在手续费和滑点上面。
很多投资策略,都可以先通过量化的方式进行回测验证。
策略回测效果很好实盘效果不一定会很好,但策略的回测效果都不好,我们很难相信实盘会拥有良好的效果。
例如我觉得技术指标效果不是很好[4],然后我就统计了果仁网所有现成的技术指标数据:
技术指标胜率在经过回测之后你会发现,单独使用的技术指标,大部分都跑不赢指数,胜率也不高。
当然,也许经过一定的组合可能获得更好的效果,不过那是另外一回事了,需要进一步的验证。
又例如,之前听说在节假日前,市场一般都会上涨[5],我就忍不住去验证了一下:
节前最后一天上涨的概率发现还真有这回事。
通过历史的数据,你可以看到这些节假日前一天的上涨的概率都大于50%。
再例如,我们说中国大部分都是散户[6],怎么样验证这个说法呢?
我们可以对比新增投资者(开户)数量和指数点位的变化趋势:
新增投资者数量和上证指数点位变化情况对比我们可以对比交易投资者的数量和指数点位的变化趋势:
交易A股的投资者数量和上证指数点位变化情况对比2 量化是什么?
简单来看,量化其实是对数据的统计。
量化的工具我们在工作和生活中,或多或少应该都有用到过——Excel。
据说雪球大V持有封基,用了十年的Excel,量化十年赚了十倍。
在雪球有一个策略很出名,叫做蛋卷斗牛二八轮动。
第一次看到的是这个模型的2.0版本[7]:
每周五(或者本周的最后一个交易日)临近收盘时,将沪深300指数和中证500指数切换到周线状态,分别查看两者过去四周的累计涨幅。如果过去四周涨幅大的那个指数在四周中能够获得正回报,那么就在收盘前买入对应的ETF持有一周,直至下一次的切换;但是如果过去四周涨幅大的那个指数在四周中依然是亏损的,那么就选择空仓,直至下一次切换。
其实这个策略实现起来非常简单,下面我就告诉你一个5分钟内就可以实现的方法:
第一步:打开通达信软件,输入代码000300(沪深300),切换到周线,然后导出数据到Excel;
第二步:类似地将000905(中证500)的数据导出
第三步:数据拷贝到同一个表格中
第四步:计算四周涨幅(D6=B6/B2-1)
第五步:计算单周涨幅(F6=B6/B5-1)
第六步:根据四周涨幅,选择单周涨幅(H7=IF(D6>E6,F7,G7))
第七步:添加涨幅小于零的止损(I7=IF(MAX(D6:E6)>0,H7,0))
第八步:根据涨跌幅计算投资净值(J7=J6*(1+F7))
第九步:拉表格,插入折线图
橙色的曲线就是该策略的实现效果。
之前我还在这个基础之上,进行了些扩展,做了一个多指数轮动的策略,这是回测结果:
多指数轮动所以我们没有必要将量化看成很高深的东西。
3 怎么学习量化?
使用excel量化,需要导出数据,也需要编写一些简单的公式。
很多人对量化敬而远之,其实是因为对编程的学习存在迟疑。学习需要花费巨额的时间,却并且不一定能产生相应的价值,这是很多人望而却步的原因。
但是现在有很多量化平台,例如果仁网、优矿、京东量化平台、聚宽,都会提供一些现成的指标,我们连这一步都可以省掉。
甚至很多策略在这些量化平台上,都已经实现了,我们直接拿来使用就可以了。
所以,我觉得“使用”是第一步,也是最重要一步。
我们之所以学了时间英语,却不能和外国人正常交流,原因是什么你想过吗?
但如果你立刻就开始使用的话,就不会存在这样的问题。
我们可以直接找到一个应用的切入点,例如拷贝别人的代码,然后改成自己想要的样子。
学习量化,我就是这样开始的。
拿之前发布的动态因子策略[8]举例,这个策略真正编程的时间只有半天。
为什么可以这么快?因为里面大量地复用了别人的代码。
首先是回测部分,如果你看前面几行,还能发现别人的版本标识:
版本标识其次是研究部分,代码也是来源于别人的文章《【研究】量化选股-因子检验和多因子模型的构建》[9]。
老实说,在一开始的时候,文章的很多内容,我都看不懂。
但没有关系啊,我逐行去执行代码,把每一个疑问都研究清楚。
最终,我在别人代码的基础上,进行了一些微调,得到了自己想要的结果。
所以实际上,我只是代码的搬运工。
一开始我对DataFrame一窍不通,因为数据统计的需要,就学会了数据的批量操作,周二到周六分享的基金回测数据,就是使用得到的结果。
一开始我对matplotlib一窍不通,因为曲线展现的需要,就学会了如何绘图,周二到周六分享的上证指数温度计图片,就是使用得到的结果。
通过这样的方式学习量化,学习编程,你不会觉得枯燥,因为你没走一步,都在应用。
根据自己的需要,不断地去使用就好。也不用强求自己一开始就能做得很好,日拱一卒就够。
使用的需要,会给我们指引前进方向的。
4 量化的注意事项
量化的时候,有些东西[10]你是需要特别注意的:
未来数据
边界条件
有效样本
未来数据是指那些对于过去的过去而言,已经发生的数据。例如前天的回测不应该用到昨天的数据。
边界条件一般是指那些我们不能达成或者很难达成交易的情况。例如停牌,例如涨跌停。
有效样本[11]来源于样本规模和样本代表性。
样本的规模和策略中规则触发的频次有关。触发次数只有关键的几次,很可能这些规则就是过度拟合[12]数据的结果,得到的样本自然就是无效的。
样本的代表性指的是数据量,数据量太小,不足以涵盖市场类型和交易时间,这样形成的策略,同样也是不可信的。
附
文章中涉及到的一些内容:
[1]:与横扫华尔街数学家的珍贵对话
[2]:曾经,我找到了投资的圣杯
[3]:有了这几个工具,我研究公司花费的时间下降了80%
[4]:看K线,赚大钱。
[5]:又是一年五一节了
[6]:跌跌不休,什么时候是个头?
[7]:二八轮动模型升级至2.0版,更简单更赚钱
[8]:动态因子策略,圣杯?
[9]:【研究】量化选股-因子检验和多因子模型的构建
[10]:是什么,让你对自己的策略确信无疑?
[11]:投资10年300倍,你相信吗?
[12]:量化的实盘效果为什么总是不如回测?