算法交易 1-回测
Ernie Chan《算法交易:制胜策略与原理》第一章读书笔记。
第一章:回测系统的陷阱与统计学应用
一、 回测的核心目的与常见缺陷
回测系统的终极目标是预测未来交易策略的绩效,但过程中潜藏的诸多陷阱会严重削弱其预测能力。常见的缺陷及实战清除策略如下:
- 前视偏差
- 原理:使用了回测当时根本无法获取的未来数据。
- 实战修复:回测生成信号与执行交易的代码逻辑必须完全一致。通常采用“T日收盘生成信号,T+1日开盘执行交易”的严格时序。
- 数据探测偏差
- 原理:在大量历史数据中反复测试不同参数,碰巧找到一段表现极佳的参数组合(过度拟合)。
- 实战修复:
- 样本外测试(OOS)与交叉验证:将数据分为训练集(如2010-2018)和测试集(如2019-2023),仅在训练集调参。
- 模型简化原则:参数越少越好,拒绝过度复杂的拟合曲线。
- Deflated Sharpe Ratio( deflate 夏普比率):根据尝试的参数组合数量对夏普比率进行惩罚。
- 数据质量缺陷(生存者偏差与公司行动)
- 案例:“为什么2021年7月9日会生成做空THQI的信号?哦,因为忘了按1:10的比例调整历史复权价格。”
- 实战修复:必须使用后复权价格计算收益率;必须在回测引擎中引入退市、并购、ST特别处理等状态标记,剔除当前已退市的股票会导致回测收益虚高(生存者偏差)。
- 流动性约束与微观结构缺陷
- 案例:“回测用收盘价效果很好,但实盘用真实市场数据却大幅缩水。”
- 实战修复:回测必须考虑滑点和交易佣金。对于容量有限的策略(如小盘股),需设置单笔交易量不超过该标的日均成交量的X%(如5%)的阈值限制。
- 制度性与规则性限制
- 案例:“模型在2008年11月做空很多股票表现很好,但当时美国SEC禁止裸卖空。”或“高频交易忽视了涨跌停板限制。”
- 实战修复:回测引擎必须内置历史交易规则变更(如限制做空名单、涨跌停板限制、T+1制度)。
二、 回测系统的统计学假设检验
仅仅依靠高夏普比率不能证明策略有效,必须通过统计学假设检验(零假设:策略收益率为0)。
- 夏普比率的T检验
- 公式:$T = \frac{Mean(R)}{Std(R)} \times \sqrt{N}$ (其中N为交易次数/样本数)
- 实战阈值:通常要求 $T > 2$(对应95%置信水平),即策略的收益并非随机产生。但若收益率序列存在自相关,需使用Newey-West调整后的标准差,否则会高估夏普比率。
- 蒙特卡洛模拟与P值检验
- 场景:策略年化收益10%,如何证明这不是碰运气?
- 方法一(随机入场法):保持交易次数和持仓时间不变,但随机改变入场时间,生成10,000次模拟。如果其中只有100次模拟的年化收益大于10%,则P值 = 100/10000 = 1%。
- 方法二(价格序列重采样法):对历史价格进行打乱重排,运行策略10,000次。
- 实战判断:P值必须 < 0.05(甚至<0.01),才能拒绝零假设,证明策略具备真正的Alpha。