分享

用excel做中证500ETF的量化回测

 星海蓝天2013 2022-09-06 发布于广东

上证50继续创出近4个月的新低,主流宽基指数中今天涨的最多的是中证500,涨了0.54%,跌的最多的是科创50,跌了0.56%。成交额继续维持低位。

图片

行业板块中供气供热、煤炭等大涨,酿酒、家居用品、食品饮料、酒店餐饮、旅游等领跌。个股基本上涨跌各半,上涨比例51.95%,下跌比例45.83%,涨幅中位数0.16%。上涨略好于下跌。北上资金净卖出76.15亿。

图片

今天可转债成交额为446.23亿,创出近期新低。但今天可转债有个利好就是可转债的平均涨幅0.68%大于了对应的正股的平均涨幅0.43%。上涨的时候一般可转债涨幅略小于正股是属于正常的。如果出现可转债平均涨幅大于正股平均涨幅,要么是可转债的持有人比正股持有人更加乐观;要么就是前期溢价率跌过头的。我个人比较倾向于后者。

因为我一直说起用EXCEL做量化回测,有网友希望我从零基础结合一个具体的案例介绍一下,正好今天中证500表现最好,就用中证500作为例子,看看最简单的均线策略是如何量化回测的。

大家知道,很多技术指标里经常说起最简单的均线策略,即最新的收盘价穿过均线买入并持有,跌破均线卖出并空仓。有用20天均线,有用60天均线,那么到底几天均线在历史上表现最好呢?这就需要用到量化回测了,这里用最土的excel作为工具来做过案例说明。

因为工作的原因,我在2007年开始做封基投资的时候就用最土的EXCEL做量化回测,一些比较简单的量化,其实熟练了,即使用excel的效率也是非常高的,这里我先用中证500指数作为例子,一步步的说明我是怎么用excel做量化回测的。这里的策略是用的最简单的均线策略。

图片

导出历史上所有中证500的日收盘价,放在“指数”这个sheetAB列,并确保它们是数字型。下面的公式均以黄色的第10行为例,其他的只要复制公式就可以了。

C列的日收益率=B10/B9-1,就是计算每天的收益率的。

D列的均=IFERROR(AVERAGE(OFFSET(B10,0,0,-统计!B$2,1)),AVERAGE(OFFSET(B10,0,0,-ROW()+1,1))),这个公式比较复杂,前面一个AVERAGE(OFFSET(B10,0,0,-统计!B$2,1),是计算正常情况下的均线,统计这个sheet里的B$2就是可以调整的一个日期参数,目前设30天,offset函数提供了从B10为原点,原点没有任何左右上下移动,这个块的区域就是向上30个交易日的一组数据,最后用average函数统计这一组数据的均值。至于为什么要用那么复杂的函数替代具体的数字,下面在优化过程中就能体会到了。

如果是比较早的日期,往前没有足够的天数,函数就会报错,这个时候就要提供一个出错的算法,iferror就是如果出错,就用后面的AVERAGE(OFFSET(B10,0,0,-ROW()+1,1))计算均值,虽然天数不够,但至少提供了一个近似的算法。

E列的bias就是乖离率的计算:B10/D10-1,就是用当天的收盘价和N天的均线比较。

F列就是每天的策略收益率计算:=IF(E9>0,C10,统计!B$4/250),就是说昨天的bias为正,也就是说在均线上,那么就取指数的收益率,如果在均线下,那么就取无风险收益,其中统计!B4就是无风险收益,这里先取2%,除以250是因为一年近似有250个交易日。

G列是策略的净值,原始从1开始,=G9*(1+F10)是说用昨天的净值,乘上1+今天的策略收益率,就是今天的净值了。

H列是计算指数的最大回撤,还是以黄色的第10行为例,=B10/MAX(B$2:B10)-1,计算从头开始到当前天的最大值,和当前天的B10做比较。这一列的数据全部算出来后,再用min函数就可以计算出历史上最大回撤了。

I列是计算策略的最大回撤,=G10/MAX(G$2:G10)-1的意思同上,不再赘述。

J列是计算交易次数,=IF(OR(AND(E10>0,E11<0),AND(E10<0,E11>0)),1,'')的意思是说,如果当前行的bias大于0,而且下一日的bias小于0;或者当前行的bias小于0,而且下一日的bias大于0,就置1,否则就置空。

K列就是计算年份的:=YEAR(A10)&'',这个数据在下面统计策略年交易次数的时候有用。

图片

我们再看”统计“这个sheet,先看三个参数

B2是均线的天数,现在是30天,对应的500指数的策略年化收益率是17.55%,如果把它改成40天,所有的数据都自动计算,立刻得到策略的年化收益率是18.16%了。B3的年是自动计算的,不能修改,B4的无风险收益率2%也是和B2一样是可以修改后立刻得到策略的年化收益率、最大回撤、年交易次数等参数。

但我们知道中证500是一个指数,不能进行买卖,前面之所以选择指数,是因为时间最长,但具体操作必须用基金作为标的。所以我们选了一个规模最大、流动性最好、历史数据最长的南方中证500510500)作为例子,放在ETF这个sheet中,里面的公式和指数是完全一样的,得到的结果比指数还略好一点,这是因为我们常见的指数是价格指数,我多次说过这个问题,分红是不计入价格指数中的,而ETF是包含分红的。

修改“统计“里的单元格B2的天数,就可以得到对应的每年的收益率,最大回撤等数据,通过比较我们可以选择一个合适的天数,当然不一定是收益率最高,每个投资者的目标不同,也可以考虑回撤最小,或者夏普比率最大等等。

这个只是作为一个量化回测的例子,通过这个例子可以学习到用最简单的用excel来做量化回测的最基本的方法和思路。为了简单起见很多细节都省略了,比如交易佣金,冲击成本,另外也没有在bias里考虑过强转弱和过弱转强的问题。即使策略很多年累计能跑赢指数和原始的ETF,但如果不巧正好从最高点进去,或者连续好几年跑输指数,真正能坚持的是很少的。但作为一个学习的例子,还是能说明问题的。再次强调,这只是一个学习量化回测的模板。

最近关于中证500ETF还有一个利好消息。92日,沪深交易所中证500ETF期权获批,目前跟踪中证500指数中规模最大的相关现货ETF是南方中证500ETF(510500)。中证500ETF期权的引入进一步丰富了场内衍生品工具,可以应用于众多与ETF搭配的交易策略和套利策略。同时ETF期权的推出,也能够给予投资者更多的对冲途径。

为了方便大家学习,文后附上了这个excel模板,仔细对照里面的公式,对初学者一定会有收获的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多