五 量化交易全流程( 四 )


□实现策略逻辑复杂 。事件驱动系统中 , 有大量的事件对应的行动需要自行定义 , 这会让编程变得比较复杂 , 对于很多简单的策略来讲 , 有点杀鸡用牛刀的感觉 。
□速度很慢 。事件驱动的特点就决定了它的运行速度不会很快 。在有大量参数需要优化的时候 , 事件驱动系统就会变得非常难用 。

五  量化交易全流程

文章插图
总的来说 , 并没有哪一种方法可以包打天下 , 都要具体问题具体分析 。比如 , 策略逻辑很简单 , 但需要优化的参数很多 , 这种情况就适合使用向量化系统 。若策略无法向量化实现 , 但又想快速进行验证 , 这种情况就比较适合采用For循环系统 。若策略参数已经确定 , 想比较真实地进行模拟 , 这种情况就适合使用事件驱动系统 。
所以理想情况下 , 这三种系统最好都要会使用 。
回测的陷阱
在回测的时候 , 会遇到很多陷阱 , 让回测结果出现偏差 。其实很多陷阱都是可以避免的 。比较常见的陷阱一般包含以下几种情况 。
□ 样本内回测 。如果我们使用同样的样本数据去训练模型(参数优化)并得到测试结果 , 那么这个测试结果一定是被夸大的 。因为这里的训练是纯粹针对已知的数据进行训练 , 并没有对未知的数据进行测试 。所以在实盘的时候 , 表现会差得很远 。这是一种过度拟合的形式 。
□ 幸存者偏差 。比如将市面上的对冲基金业绩表现做一个综合性指数 , 这个指数其实并不能代表对冲基金的真实业绩 , 因为业绩很差的那些基金都已经不存在了 。在编制指数的时候 , 如果不对这种情况加以考虑 , 就会产生很大的偏差 , 因为最差的那一部分并没考虑进来 。
□ 前视偏差 。在进行回测的时候 , 有时候我们会不小心使用未来的数据(又称为"未来函数") 。举个例子 , 假设我们使用线性回归 , 计算了某段时间内价格的斜率 , 如果在这段时间内 , 我们又用到了这个斜率 , 那么这就是使用了未来数据 。有时候 , 如果历史回测表现得非常好 , 甚至是惊艳 , 那么就需要注意了 , 这很有可能是因为使用了未来数据 。这种情况比较严重 。
□ 交易成本 。交易成本在回测中其实非常重要 。假如我们将交易成本设为0 , 那么在训练模型的时候 , 筛选出来的模型往往都是交易频率非常高的模型 。这些交易频率非常高的模型在0成本的时候表现非常好 。但是一旦加入了交易成本 , 这些模型就会一落千丈 。所以在回测的时候 , 一定要加入合理估计的交易成本 。
□市场结构转变 。在进行长时间的回测的时候 , 经常会忽视这个问题 。比如 , 国内的期货品种 , 有的品种有夜盘交易 , 夜盘交易的时间还变化过好几次 。在进行回测的时候 , 如果不能对应地做出合理的调整 , 那么也会出现一定的问题 。
回测中的其他考量
对于回测 , 其实还有很多细节和问题需要考虑 , 具体如下 。
□ 数据的准确性 。获取数据有很多种来源 。没有人能打包票 , 百分之百地确定数据一定是准确的 。但是我们应该在一定的成本范围内 , 尽量保证数据的准确性 。所以开始的数据清洗工作就显得异常重要了 。当然 , 会有很多供应商号称自己提供的数据是经过认真清洗的 , 但我们不能完全信任他们 。毕竟承担投资决簧结果的是投资者 , 而不是他们 。