之前就给大伙儿推荐过,不少的量化投资入门书籍,很多萌新看过后,满腔热血地想投身到宽客的行列当中,但迈出第一步后就懵了,怎么滴呢?
编程太难了!特别是对于没有任何编程基础的文科童鞋,看着那些个花花绿绿的代码,每一个字母都认识,但堆在一起就不明白TM到底是啥意思。
先别急着放弃啊,有条件可以上,没有条件创造条件也可以上嘛,你有没有想过,不需要专门学Python编程,也不需要零编程规则式的量化平台,仅依靠微软Office办公三件套之一的Excel,便可以走通量化策略的开发和回测的整个流程。
说起来惭愧,我最初做量化的时候,也没学编程,仅用Excel外带几个常用公式就开搞了,因为在我的眼里,量化投资更多是一种投资交易的分析手段,基于金融逻辑和历史数据,发现和验证交易理念,提高决策的胜率,只要能实现这些功能,管他黑猫白猫,抓住老鼠就是好猫,弯下腰,弄脏手,躬身入局。
而且啊,Excel有个好处就是,展示数据非常直观,非常便于咱深入了解整个过程,让量化基础更扎实,闲篇扯完了,撸起袖子开整吧~
无论是主观投资还是量化投资,在新手村的时候,肯定听说过『双均线策略』,以股票为例,就是短均线上穿长均线,形成金叉时买入,短均线下穿长均线,形成死叉时卖出。
挑选近期大涨的股票往回看,发现大涨之前的确是有双均线金叉,大跌的股票也是有双均线死叉,其实这可能是一个“幸存者偏差”,可能是金叉/死叉之后有大涨/大跌的,也有震荡的,只不过是大涨/大跌的被有意或无意地挑选出来。
那到底这个『双均线策略』是真的有效,还是幸存者偏差,咱不能拍大腿拍脑袋就决定了,教员说“ 没有调查,没有发言权”,小平同志说“实践是检验真理的唯一标准”,那咱就用量化的试金石测一下,那就把『双均线策略』作为萌新入门量化的第一个策略吧。
首先要准备一个Excel表格,里面装有你心仪投资标的的行情数据就行,股票可以,数字货币也行,最低配的,有日期和收盘价就可以了,甚至连日期都可以没有,自己知道时间的对应关系就行了。
什么?找不到行情数据?现在可以拿到免费数据的渠道那么多,咱还是不要守着金山当乞丐哟~
我就拿股票为例吧,说说怎么获取免费的股票数据,“通达信”大家知道伐,用的人很多的那个,在电脑端下载安装一个,免费注册使用的。
打开你想测试的个股日K图,为了避免有荐股的嫌疑,我就以沪深300指数为例。
点击右上角工具栏【选项】,在弹出的下拉列表中选择【数据导出】,接着就会弹出一个对话框,记得选【Excel文件】,设置好文件的存放路径,自己能找到就行。
这里有一个操作小技巧,通达信默认是导出界面所展示的日期范围内的数据,如果想要更多数据,按键盘的向下键『↓』,就可以展示更多日期,我在这里就获取了沪深300能获取的全部数据,日期范围为2005年1月4日至今。
导出的数据当中,除了行情数据之外,还有很多乱七八糟的数据,为了简洁起见,只保留日期和收盘价,其他的内容统统删除掉。为了美观,可以让数据居中对齐和加框线。
有了数据之后,剩下的就好办了,只要懂Excel基本操作,一步一步跟着走就可以完成。
现在咱要算出两根均线的数值,短均线咱就用5日均线(Moving Average 5,MA5),长均线咱就用20日均线(MA20)。每一天的MA5数值,就是用含有当天的5个收盘价计算平均值,MA20就是利用20个。
2005年至今有4000多个交易日,咱总不能手动一个一个算出来啊,这样会累si人的,为了方便轻松,就需要用到Excel的公式了。
由于计算MA5需要5个收盘价数据,所以在新增一例“MA5”后,在2005年1月10日所在行的单元格里输入“=AVERAGE(B2:B6)”,就可以算出2005年1月10日的MA5数值了,其中B表示“B列”,也就是收盘价所在的列,数字表示行号,由于列名占了一行,所以第一个有效数值从第2行开始,相信懂Excel基本操作的小伙伴都能明白哒,下文不再赘述了。
Excel当中很智能的一点是,你再选中刚才那个单元格,把鼠标移到单元右下方,鼠标会变成一个黑色十字『+』,双击鼠标左键,Excel就会智能地利用这个公式对剩余数据进行计算,文字比较抽象,请看下图的演示。
MA20的计算也是同理,只不过MA20的计算需要20天的数据,因此需要在2005年1月31日才能计算第一个数据点,至此,咱就有了MA5和MA20两条均线的数据了。
有了双均线数据之后,咱就要确定交易信号,就像前面说的那样,金叉买入,死叉卖出,这里要用到Excel的IF判断公式,形式如IF(条件, A, B),如果条件成立的话,单元格就输出A,不成立的话,单元格就输出B,咱在这里,如果MA5高于MA20就输出1,反之就输出0。
于是,新增一列“信号”列,在MA20有第一个数值的那一行对应的单元格里输入“=IF(C21>D21,1,0)”,然后再利用之前的“黑色十字双击”技巧,智能填充另外的信号列数据。
现在交易信号也有了,那怎么统计这个策略的收益率呢?咱现在回过头来看,由0变1的那个日期对应的就是金叉,由1变0的那个日期对应的就是死叉,根据“金叉买入,死叉卖出”的原则,可以简单认为(下文有补充),信号为1的日期都是有持仓的,信号为0的都是空仓。
于是乎,假设咱是全仓买入沪深300指数(有对应ETF可交易),先计算指数的日收益率,然后将每天的收益率与信号相乘,就可以得出策略的日收益率,空仓的日期收益率为0,持仓的日期收益率就是对应指数的收益率,操作演示如下。
有了日收益率之后,咱就可以进一步得出这个双均线策略的累计收益情况了,每一天的资产金额等于前一日资产金额乘以(1+当日涨幅),假设咱期初有1000块钱,结合前面计算出来的策略日收益率,就可以依次算出每一天的资产金额。
如果按照这个双均线策略操作,在不考虑交易成本的情况下,咱最终能拥有多少钱呢?效果是否比买入并持有沪深300指数好呢?
从最后一个交易日的结果看出,双均线策略从18年前的1000块钱变成了今天的4个达不溜,18年40倍,而买入并一直持有沪深300则是4倍,前者年化收益约22%,后者年化收益约为8%,超额收益14%。
在Excel中画图也是非常简单的,选中“日期”、“双均线策略”和“买入并持有”这三列,然后插入折线图,双均线策略的资金曲线就出来啦,从折线图当中更能直观地看出收益情况的对比。
小结一下,本文单纯基于Excel进行了双均线计算、交易信号确定、日收益率计算、资产金额计算和资金曲线画图这5个步骤,完成了『双均线策略』的开发和回测,不会编程的萌新也可以利用这套流程,对常见的技术指标在个股和指数/ETF等投资标的上进行有效性验证,只要灵活修改前面“指标计算”和“交易信号确定”这两个步骤就可以了。
补充说明,这个策略的开发和回测流程,主要是启发萌新的量化思路,其实细心的读者已经发现了,在生成交易信号的时候是带有一点“未来函数”的,因为双均线是利用收盘价计算出来的,出现金叉/死叉的时候已经收盘了,无法按照收盘价买入,更不会将当日涨幅纳入进来。
因此更为严谨的操作是,在前一日金叉时,今日按照开盘价买入,策略的日收益率则是开盘价到收盘价的涨幅;在前一日死叉时,今日按照开盘价卖出,策略的日收益率则是前一日收盘价到今日开盘价的涨幅,这需要多增加几列数据进行计算。
因为这种带有一点未来函数的回测方法非常直观和便捷,自己在遇到新指标因子时,可以快速进行测试,如果回测效果好,则进行更深入的研究,如果效果不好,直接放弃说byebye~
END
如果对本文有疑惑,或是想聊聊
亦或是围观朋友圈当点赞之交
点我,让我们一路同行
吃瓜吐槽写代码
(微信号:iquantman)
添加好友后,私信『666』
送你一些量化小福利
人工回复慢请见谅~
继续阅读
阅读原文