
1) 【一句话结论】回测中数据偏差、交易成本偏差、持有期偏差等会高估策略收益,需通过模拟真实交易场景(如成本、滑点、信息传播)识别并减少偏差,提升策略评估真实性。
2) 【原理/概念讲解】老师:回测中的偏差源于“历史数据与未来交易环境的差异”,具体分三类:
3) 【对比与适用场景】
| 偏差类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据偏差 | 样本选择偏差(如幸存者偏差)或数据漂移(历史数据分布与未来不同) | 历史数据中策略表现优于实际 | 回测中策略选股/选时逻辑基于历史数据 | 需验证数据代表性,避免“只选好的” |
| 交易成本偏差 | 滑点、佣金、冲击成本等实际交易成本 | 实际交易价格与市场即时价不同 | 所有交易策略,尤其高频/中低频 | 需模拟真实成本,如滑点模型 |
| 持有期偏差 | 策略在回测中因历史事件滞后导致持有期与实际不同 | 历史数据中持有期与实际差异 | 中低频策略(事件驱动、长持有期) | 考虑信息传播速度,如公告后市场反应时间 |
4) 【示例】(以交易成本偏差为例,伪代码):
# 模拟交易成本
def calculate_cost(price, is_buy, volume, commission_rate=0.001, spread_rate=0.2):
if is_buy:
cost_price = price * (1 + spread_rate) # 买入滑点
commission = cost_price * commission_rate # 佣金
else:
cost_price = price * (1 - spread_rate) # 卖出滑点
commission = cost_price * commission_rate
return cost_price, commission
# 回测逻辑
def backtest(data, cost_model):
portfolio = 0
for day in data:
price = day['close']
is_buy = strategy(day) # 策略判断是否买入
if is_buy:
volume = 1 # 简化
cost_price, commission = cost_model(price, True, volume)
portfolio += cost_price - commission
else:
cost_price, commission = cost_model(price, False, volume)
portfolio -= cost_price + commission
return portfolio
(注:实际中需加入滑点、冲击成本等更复杂的模型,但此示例展示如何模拟交易成本)
5) 【面试口播版答案】(约90秒):
“回测中常见的偏差有数据偏差、交易成本偏差、持有期偏差。数据偏差比如用历史数据选股,但未来市场分布变化,导致策略表现高估,识别方法是交叉验证或滚动回测,减少方法是使用更长的历史数据或随机抽样。交易成本偏差比如滑点、佣金,实际交易成本导致收益减少,识别方法是加入滑点模型(如固定或比例滑点),减少方法是模拟真实成本。持有期偏差比如历史数据中事件滞后,导致持有期与实际不同,识别方法是滚动回测观察持有期变化,减少方法是考虑信息传播速度。总结来说,这些偏差会高估策略收益,需通过模拟真实交易场景(如成本、滑点、信息传播)来校正,提升策略评估的真实性。”
6) 【追问清单】:
7) 【常见坑/雷区】: