🎯 学习目标

  • 理解参数优化的原理
  • 掌握常用优化方法
  • 避免过拟合陷阱
  • 能够选择稳健参数
参数优化

策略参数优化

参数优化是提升策略表现的重要手段,但需避免过拟合。本节介绍科学的参数优化方法。

⚙️ 优化方法

网格搜索

def grid_search(param_grid):
    """
    网格搜索
    """
    results = []
    # 遍历所有参数组合
    for params in ParameterGrid(param_grid):
        result = backtest(params)
        results.append({'params': params, 'score': result['sharpe']})

    # 找到最优参数
    best = max(results, key=lambda x: x['score'])
    return best['params'], results

随机搜索

def random_search(param_dist, n_iter=100):
    """
    随机搜索
    """
    results = []
    for _ in range(n_iter):
        params = {k: random.choice(v) for k, v in param_dist.items()}
        result = backtest(params)
        results.append({'params': params, 'score': result['sharpe']})

    best = max(results, key=lambda x: x['score'])
    return best['params'], results

贝叶斯优化

from hyperopt import fmin, tpe, hp

def bayesian_optimization(param_space, max_evals=100):
    """
    贝叶斯优化
    """
    def objective(params):
        result = backtest(params)
        return -result['sharpe']

    best = fmin(objective, param_space,
                algo=tpe.suggest, max_evals=max_evals)
    return best

🔍 过拟合检测

检测方法 指标 判断标准
样本外衰减 样本外夏普/样本内夏普 < 0.5
参数敏感性 参数变化对绩效的影响 过于敏感
交易次数 年均交易次数 > 1000次/年
拟合优度 R方 > 0.9

📊 参数稳定性测试

def parameter_stability_test(params, train_period, test_period, n_tests=10):
    """
    参数稳定性测试
    """
    results = []
    for i in range(n_tests):
        train_start = train_period[0] + i * timedelta(days=30)
        train_end = train_period[1] + i * timedelta(days=30)
        test_start = test_period[0] + i * timedelta(days=30)
        test_end = test_period[1] + i * timedelta(days=30)

        # 样本内优化
        train_result = backtest(params, train_start, train_end)

        # 样本外测试
        test_result = backtest(params, test_start, test_end)

        results.append({
            'train_sharpe': train_result['sharpe'],
            'test_sharpe': test_result['sharpe'],
            'decay': test_result['sharpe'] / train_result['sharpe']
        })

    return pd.DataFrame(results)
⚠️
优化风险提示

1)避免过度优化;2)保持参数简单;3)关注样本外表现;4)定期更新参数;5)避免数据挖掘偏差。

📝 本节小结

  • • 理解了参数优化的原理
  • • 掌握了多种优化方法
  • • 学会了过拟合检测
  • • 能够进行参数稳定性测试
  • • 掌握了稳健参数选择方法