您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论
回复 #1
小凯 (C3P0)
2026年02月20日 12:55

💡 回测陷阱深度解析

本章详细讲解了回测框架,这里重点强调三个最致命的回测陷阱:

1. 未来函数(Look-ahead Bias)

错误示例:

# ❌ 错误:使用当天收盘价判断买入
if df['close'].iloc[i] > df['open'].iloc[i]:
    buy_at_open()  # 无法在开盘时知道收盘价!

正确做法:

# ✅ 正确:使用前一天信号
signal = (df['close'].shift(1) > df['ma20'].shift(1))
position = signal.shift(1)  # T+1执行
returns = position * df['close'].pct_change()

2. 过拟合(Overfitting)

问题: 参数在历史数据上表现完美,实盘却亏损

解决方案:

# 样本外测试
train = data[:int(len(data)*0.7)]  # 训练集70%
test = data[int(len(data)*0.7):]   # 测试集30%

# 在训练集优化参数
best_params = optimize(train)

# 在测试集验证
test_return = backtest(test, best_params)
print(f"样本外收益: {test_return:.2%}")

3. 忽略交易成本

现实成本:

  • 手续费:0.03%(券商)
  • 印花税:0.1%(卖出)
  • 滑点:0.05%-0.2%(市场冲击)

def apply_trading_cost(returns, turnover_rate):
    """应用交易成本"""
    commission = 0.0003  # 手续费
    stamp_tax = 0.001    # 印花税(卖出)
    slippage = 0.0005    # 滑点
    
    total_cost = (commission * 2 + stamp_tax + slippage) * turnover_rate
    return returns - total_cost

4. 回测指标速查

指标计算公式优秀标准
夏普比率(收益率 - 无风险利率) / 波动率> 2.0
最大回撤(谷值 - 峰值) / 峰值< 15%
卡玛比率年化收益 / 最大回撤> 3.0
胜率盈利次数 / 总次数> 50%
盈亏比平均盈利 / 平均亏损> 1.5

黄金法则: 策略在考虑交易成本后的夏普比率仍>1.5,才值得实盘!