在我探索量化的进程中,回测一直是十分重要的一个环节,而其中又分为事件驱动型回测和向量化回测。大家市面上见到的绝大多数在线回测平台,或者是backtrader和vnpy,都是事件驱动型回测,但是究其代码层面,使用的普遍是for循环的需要占用大量内存和运行时间的原理。
相较于前者,向量化回测则快速的多的多的多,出结果只要一秒钟都不到的计算,但是这玩意儿我一直在很长时间里都不知道是什么,其实是一个特别简单的事情,因此我在这里分享给所有人。
我们常见的数据格式如下:
(数据读取采用Arctic高性能数据库我先前有介绍请参考我的帖子https://blog.youkuaiyun.com/weixin_44566452/article/details/120832712)
这个数据格式包含OHLCV等常见数据,LIMIT是涨停价格,ADJFACTOR是复权因子。
所谓的向量化回测,非常简单!!就是dataframe相乘,说高级点叫矩阵相乘。
原理是通过计算收益率矩阵和01矩阵相乘来计算得出结果(0不开仓,1开仓获取收益率)
例如:
然后创建条件01矩阵,原理也很简单,请仔细看代码:
得到了一个全1矩阵,然后再设计条件01矩阵:
see? 就是这么简单,在构建条件矩阵和收益率矩阵之后,我们可以通过两个矩阵相乘得出策略收益率。
总结一下,这篇文章里面我们发现向量化回测的几个要素:
1. 收益率矩阵
2. 策略条件矩阵
3. 策略收益率矩阵 = 收益率矩阵 * 策略条件矩阵
下一篇文章中,我将把这种方法推广到一次性度量所有股票(即把策略“因子化”)