五 量化交易全流程( 二 )


回测是量化投资研究中的一个基本方法 。简单定义 , 回测就是针对历史价格设定的一系列的交易规则 , 从而得到交易规则的历史业绩表现 。
具体地说就是 , 针对一系列的资产 , 我们设定一个机制 , 用来选择 , 什么时间持有资产 , 什么时间清空资产 。再加上资产本身的历史价格 , 我们就能计算出这个"交易策略"在历史业绩中的表现 , 比如 , 年化收益率、波动率、最大回撤等 。
有句话用于描述回测非常合适 , "所有的模型都是错的 , 但有一些是有用的" 。我们并不能保证历史回测表现好的模型在将来就一定能赚钱 。那么回测的目的又是什么呢?
简单地说就是 , 回测结果可以让我们过滤很多不好的模型 。是否选择上线某个策略 , 我们需要参考很多信息 , 历史回测是其中一个非常重要的参考依据 。如果历史回测都表现不好 , 那么我们很难相信这个策略在将来会表现得很好 。
总之 , 回测好的策略不一定赚钱 , 但回测不好的策略基本上是不可能赚钱的 。所以回测对于我们筛选策略 , 还是有相当大的重要性的 。事实上 , 不少投资经理 , 在没有实际去回测某个指标的有效性的情况下 , 依然还是在凭感觉使用 。我并不认为这是一种理性的方式 。当然 , 这也是有客观原因的 , 比如 , 很多投资经理 , 使用的主观投资方法 , 完全不会编程 , 平时又很忙 , 让他们自行编写程序进行回测 , 似乎也不可能 。这一点目前国内基金行业需要提高的一个地方 。投资行业中的竞争可以用惨烈来形容 , 高手间的博弈 , 你比别人好一点点 , 积累下来 , 结果可能就是天差地别 。所以既然这块有可以提高的空间 , 那么为什么不去尝试做呢?
回测系统的种类
回测系统一般包含三种类型 , "for循环"系统、"向量化"系统、"事件驱动"系统 。这三种系统的区别主要在于程序结构逻辑上 。下面对这三种方式做一个简单的介绍 。
"向量化"系统
"向量化"计算是一种特殊的计算方式 , 意思是用矩阵运算的方式来进行程序的编写 。这种编写方式多见于、、R等带有科学计算性质的语言中 , 最大的好处是速度快 。因为在科学计算中 , 矩阵运算由于频繁使用 , 所以其是经过专门优化的 。比如 , 对于将两个数组中的元素一一对应相加的操作 , 使用向量化的方式 , 比使用迭代循环的方式 , 两者的速度差距很可能是十倍甚至百倍 。
所以"向量化"系统最大的优势就是速度快 , 特别适合于需要大量优化参数的策略 。实际上 , 最近正火热的"深度学习" , 其本质就是各种矩阵运算 , 如何优化矩阵运算的速度 , 其实是一个框架需要考虑的非常重要的特性 。
"向量化"系统的主要缺陷就是 , 对于一些复杂的逻辑是无法实现的 。比如说 , 有一类逻辑具有"路径依赖性" , 也就是说 , 当前值的计算需要依赖于前一个值的计算结果 。由于向量化计算是同时计算出所有的值 , 所以这类"路径依赖"的问题是无法用向量化来计算的 。对于这种情况 , 我们不得不使用迭代循环的方式来进行计算 。