回测偏差提示
期货回测常见偏差:1)合约切换价格跳空;2)滑点低估;3)成交限制忽略;4)保证金变化忽略。
项目二:期货CTA策略
回测验证是确认策略有效性的关键环节。本节将介绍期货回测的特殊要求和方法。
def continuous_contract(contracts_data, method='volume'):
"""
生成连续合约
"""
if method == 'volume':
# 成交量加权切换
roll_dates = find_roll_dates_by_volume(contracts_data)
elif method == 'open_interest':
# 持仓量加权切换
roll_dates = find_roll_dates_by_oi(contracts_data)
else:
# 固定日期切换
roll_dates = find_roll_dates_fixed(contracts_data)
# 拼接合约
continuous = pd.DataFrame()
for i, (start, end) in enumerate(zip(roll_dates, roll_dates[1:])):
contract_data = contracts_data[i].loc[start:end]
continuous = pd.concat([continuous, contract_data])
# 调整价格(消除跳空)
continuous = adjust_price(continuous, roll_dates)
return continuous
def find_roll_dates_by_volume(contracts_data):
"""
根据成交量切换合约
"""
roll_dates = []
for i in range(len(contracts_data) - 1):
# 主力合约切换点:次月合约成交量超过主力
current_vol = contracts_data[i]['volume']
next_vol = contracts_data[i+1]['volume']
crossover = (next_vol > current_vol).idxmax()
roll_dates.append(crossover)
return roll_dates
| 指标 | 计算方法 | 目标值 |
|---|---|---|
| 年化收益率 | (终值/初值)^(252/天数) - 1 | > 15% |
| 夏普比率 | 年化收益/年化波动 | > 1.2 |
| 最大回撤 | 最大下跌幅度 | < 20% |
| 盈亏比 | 平均盈利/平均亏损 | > 1.5 |
| 胜率 | 盈利交易占比 | > 40% |
期货回测常见偏差:1)合约切换价格跳空;2)滑点低估;3)成交限制忽略;4)保证金变化忽略。