2. 参数空间探索:参数类型、范围与精度

做量化策略优化,说白了就是在找那组「最舒服」的参数。我刚开始干这行的时候,总觉得参数越多越好,范围越大越好。结果呢?跑一次优化要好几天,最后出来的参数还过拟合。嗯,今天咱们就聊聊怎么科学地探索参数空间。

2.1 参数类型:你得先搞清楚对手是谁

参数不是千篇一律的。我个人习惯把它们分成三类,每一类的处理方式都不一样。

参数类型 定义 典型例子 优化方式
连续参数 在某个区间内可以取任意值 移动平均周期(20.5天)、止损比例(2.5%) 网格搜索、贝叶斯优化
离散参数 只能取整数或特定值 RSI周期(14)、持仓数量(3手) 穷举搜索、遗传算法
分类参数 没有数值大小关系,只是类别 均线类型(SMA/EMA/WMA)、入场信号(金叉/突破/背离) 组合测试、随机搜索

核心原则:连续参数用优化算法找最优,离散参数用枚举法覆盖,分类参数用组合测试看效果。千万别混为一谈。

我在项目中遇到过一个问题:有人把「均线类型」当成连续参数,给了个1到3的数值范围。结果优化出来一个「1.7」——这算啥?SMA还是EMA?所以啊,分类参数必须用枚举,别偷懒。

2.2 参数范围设定:别把网撒得太宽

参数范围怎么定?我见过最夸张的,有人把移动平均周期设成1到1000。你想想看,周期1000的均线,对价格变化基本没反应了,这参数有意义吗?

我个人习惯用「三明治法」来设定范围:

  1. 底层逻辑:先想清楚这个参数在策略里是干嘛的。比如ATR止损,它的范围应该和品种的波动率挂钩。比特币的ATR止损,和国债期货的ATR止损,能一样吗?
  2. 经验边界:根据交易经验,给一个合理的上下限。比如RSI的超买超卖阈值,一般不会低于10或高于90,否则信号太稀疏。
  3. 扩展测试:在经验边界的基础上,向外扩展20%-30%,看看边界附近的表现。有时候最优解就在边界上。

小技巧:如果你不确定范围,可以先跑一次「粗搜索」。步长大一点,范围宽一点,看看哪些区域表现好。然后再缩小范围,做「细搜索」。这叫「先粗后细」,效率高很多。

我曾经犯过一个错误:把布林带的标准差倍数设成1到5。结果优化出来是4.8,回测曲线漂亮得不行。但实盘一跑,一个月就亏了15%。为什么?因为4.8倍的标准差,信号太少,样本量不足,纯属运气好。后来我加了一条规则:每个参数组合至少要有50次交易信号,否则直接淘汰。

2.3 参数步长与精度:别让计算机做无用功

步长设多少?精度多高?这问题看着简单,其实坑很多。

先看一个例子:

# 错误示范:步长太小,浪费计算资源
for period in range(10, 200, 1):  # 190个参数组合
    # 计算策略收益
    pass

# 正确示范:先粗后细
# 第一轮:粗搜索
for period in range(10, 200, 10):  # 19个组合
    pass
# 第二轮:在最优区域附近细搜索
for period in range(40, 70, 2):  # 15个组合
    pass

你想想看,移动平均周期从10到200,步长1的话要跑190次。如果每个参数组合还要跑5年数据,那得算到猴年马月去?

我个人建议的步长设定原则:

  • 连续参数:步长取参数范围的1%-5%。比如范围是10-200,步长取5-10就差不多了。
  • 离散参数:步长就是1,没得商量。但可以限制范围,比如周期不要超过200。
  • 分类参数:没有步长概念,直接枚举所有类别。

注意:精度不是越高越好。步长太小,容易过拟合。你想想看,周期21和周期22,策略表现能差多少?如果差很多,那说明策略本身不稳定,不是参数的问题。

我记得有一次优化一个双均线策略,步长设成1,从5到200全跑了一遍。结果最优解是周期21和周期63。但仔细一看,周期20和周期62的表现也差不多。这说明什么?说明这个最优解是「平原上的一个小土包」,不是真正的山峰。后来我把步长改成5,重新跑,找到的周期20和周期60,实盘表现反而更好。

2.4 知识体系总览

下面这张图,是我自己总结的参数空间探索流程。每次做优化前,我都会看一眼,提醒自己别漏了步骤。

参数空间探索流程 第一步:参数分类 连续 / 离散 / 分类 第二步:设定范围 逻辑边界 + 经验边界 + 扩展 第三步:确定步长 粗搜索 → 细搜索 第四步:执行搜索 网格搜索 / 随机搜索 / 贝叶斯优化 第五步:结果验证 样本外测试 / 稳定性检查 第六步:迭代优化(缩小范围再搜) 注:实际项目中,第2-3步可能需要反复调整

这张图的核心逻辑就是:先分类,再定范围,然后选步长,最后执行搜索。每一步都踩实了,结果才靠谱。

2.5 实战中的避坑指南

说了这么多,最后分享几个我踩过的坑:

  • 范围太宽:我曾经把参数范围设得特别大,结果最优解出现在边界上。后来一查,边界外的参数根本没法用——比如周期为1的均线,那不就是价格本身吗?
  • 步长太细:步长设成1,跑了三天三夜。结果发现相邻参数的表现几乎一样,白白浪费了计算资源。
  • 忽略分类参数:把「入场信号类型」当成连续参数优化,结果出来个「1.5」——这算金叉还是死叉?
  • 不验证稳定性:找到最优参数组合后,直接实盘。结果市场风格一变,策略就失效了。

我的经验法则:参数空间探索不是一次性的工作。先粗搜找到「好区域」,再细搜找到「好点」,最后用样本外数据验证这个点是不是真的「稳」。整个过程,我一般会迭代2-3轮。

好了,关于参数空间探索,今天就聊到这儿。记住一句话:参数不是越多越好,范围不是越大越好,步长不是越细越好。找到那个「刚刚好」的平衡点,才是真本事。