《Python量化投资》笔记六——策略回测

Python量化投资

京东图书


第十三章 策略回测

  • 向量化回测
  • 事件驱动回测

最基本的回测系统是指,当我们有一组交易规则,需要根据历史数据来获取这组交易规则的业绩表现时,除了给出历史表现之外,有时候还需要优化参数。比如,交易规则设定了一些参数,我们需要知道哪组参数表现最好,这种情况就还需要一个优化系统。

策略回测是一个非常广泛的需求,市面上有很多商业的或者开源的系统。

  • 商业软件
  • 开源框架二次开发
  • 自己从头开始搭建开发

回测就是针对历史价格设定的一系列的交易规则,从而得到交易规则的历史业绩表现。

具体地说就是,针对一系列的资产,我们设定一个机制,用来选择,什么时间持有资产,什么时间清空资产。再加上资产本身的历史价格,我们就能计算出这个“交易策略”在历史业绩中的表现,比如,年化收益率、波动率、最大回撤等。

回测好的策略不一定赚钱,但回测不好的策略基本上是不可能赚钱的。

回测系统一般包含三种类型,“for循环”系统、“向量化”系统、“事件驱动”系统。

向量化系统

“向量化”系统最大的优势就是速度快,特别适合于需要大量优化参数的策略。
“向量化”系统的主要缺陷就是,对于一些复杂的逻辑是无法实现的。

For循环回测系统

For循环系统是指针对每一个数据点进行遍历。比如,对于日线数据,就是循环遍历每一个OHLC(Open、High、Low、Close)数据。在遍历的时候同时进行计算,比如计算移动均线,然后在此过程中决定是买入还是卖出某资产。一般是以当天的收盘价或者第二天的开盘价作为买入或者卖出价。

事件驱动系统

事件驱动系统会尽可能地模拟真实的交易机制,是一种结构更为复杂的系统。在事件驱动系统中,交易相关的所有行为都是由事件触发的。比如,当前K线结束了,我们需要做什么?发出委托之后,我们需要做什么?委托成交之后,我们需要做什么?事件驱动系统详尽地定义了交易中可能发生的每一个相关事件,并用函数的形式来指定发生对应事件后所应采取的行动。

回测的陷阱

  • 样本内回测。如果我们使用同样的样本数据去训练模型(参数优化)并得到测试结果,那么这个测试结果一定是被夸大的。因为这里的训练是纯粹针对已知的数据进行训练,并没有对未知的数据进行测试。所以在实盘的时候,表现会差得很远。这是一种过度拟合的形式。

  • 幸存者偏差。比如将市面上的对冲基金业绩表现做一个综合性指数,这个指数其实并不能代表对冲基金的真实业绩,因为业绩很差的那些基金都已经不存在了。在编制指数的时候,如果不对这种情况加以考虑,就会产生很大的偏差,因为最差的那一部分并没考虑进来。

  • 前视偏差。在进行回测的时候,有时候我们会不小心使用未来的数据(又称为“未来函数”)。举个例子,假设我们使用线性回归,计算了某段时间内价格的斜率,如果在这段时间内,我们又用到了这个斜率,那么这就是使用了未来数据。有时候,如果历史回测表现得非常好,甚至是惊艳,那么就需要注意了,这很有可能是因为使用了未来数据。

  • 交易成本。交易成本在回测中其实非常重要。假如我们将交易成本设为0,那么在训练模型的时候,筛选出来的模型往往都是交易频率非常高的模型。这些交易频率非常高的模型在0成本的时候表现非常好。但是一旦加入了交易成本,这些模型就会一落千丈。所以在回测的时候,一定要加入合理估计的交易成本。

  • 市场结构转变。在进行长时间的回测的时候,经常会忽视这个问题。比如,国内的期货品种,有的品种有夜盘交易,夜盘交易的时间还变化过好几次。在进行回测的时候,如果不能对应地做出合理的调整,那么也会出现一定的问题。

回测中的其他考量

  • 数据的准确性

  • 流动性限制。在回测的时候,我们很容易假设能买到所有的股票,但实际上,很多股票因为流动性的原因,其实是买不到的。或者即使买到了,冲击成本也远高于正常的成本。比如,有的股票一天的交易量就只有100手,那么肯定就没办法买到200手。

  • 选取合理的比较基准

  • 稳定性。对于一个策略,我们希望它的表现越稳定越好,这就是所谓的稳定性。稳定性有两个衡量维度,一是时间上的稳定性,二是参数上的稳定性。

  • 心理因素

  • 交叉验证。我们在进行回测的时候,为了确保策略的稳定性,需要进行交叉验证。交叉验证一般可以在两种维度上展开,一是在不同的品种上进行交叉验证,二是在不同的时间周期和时间段上进行交叉验证。

使用Python搭建回测系统

策略的核心就是趋势跟踪,也就是说,当短期均线高于长期均线的时候,则认为是多头趋势,这个时候持多仓。当短期均线低于长期均线的时候,则认为是空头趋势,这个时候持空仓。

image.png

PyAlgoTrade简介

开源的事件驱动系统PyAlgoTrade
PyAlgoTrade是事件驱动的回测系统。

你可能感兴趣的:(《Python量化投资》笔记六——策略回测)