Skip to content

9.7 参数扫描与稳健性:别被某个参数骗了

课前导读

本节目标

学完能解决什么困惑:为什么回测里“最赚钱”的参数,不一定是最值得相信的参数。

适合谁学:已经知道年化收益、最大回撤、胜率、盈亏比和交易成本的新手。

难度:中级。

用时:约 40 分钟。

你已经会看回测指标,也知道成本和滑点会吃掉收益。

接下来要面对一个更隐蔽的问题:同一套策略,只要参数稍微一变,结果就可能完全不同。

比如均线策略里,短均线可以用 10 日、15 日、20 日。

止损线可以用 6%、8%、10%。

持有天数可以用 5 天、10 天、20 天。

如果你只挑出“历史收益最高”的那个组合,就像在考试后才把答案写进题目里。

本节要学的不是寻找神奇数字,而是检查策略有没有稳健的生存空间。


知识正文

1. 类比:温度旋钮不是只有一个神奇刻度

想象你买了一台电暖器。

如果它只有在 26.3 度时让房间舒服,26.2 度就冷,26.4 度就热,你会觉得它可靠吗?

大概率不会。

因为真实生活里,温度计有误差,房间大小会变,门窗开合也会影响体感。

可靠的电暖器,应该在 25 到 27 度之间都差不多舒服。

参数扫描也是这个道理。

一个策略如果只在“20 日均线 + 7% 止损 + 持有 13 天”这个精确组合上表现很好,周围组合都很差,就要非常警惕。

这可能不是策略真的强,而是它刚好贴合了历史样本里的某段巧合。

关键直觉

参数不是彩票号码,稳健策略不应该只靠一个“神奇刻度”存活。

2. 先把术语讲清楚

参数,就是策略规则里可以调节的数字。

均线天数、止损比例、持有天数、换仓频率、成交量放大倍数,都可以是参数。

参数扫描,就是提前设定一组合理范围,把不同参数组合逐一回测,并把结果放在一起比较。

它不是为了“扫到最高分”,而是为了看周围一片区域是否都能接受。

参数平台期,指一片相邻参数都表现相对稳定。

比如 15 日、20 日、25 日均线都能取得相近收益,回撤也没有突然恶化。

这种状态像一块平坦的台地,说明策略不太依赖某一个精确数字。

孤岛最优,指只有一个参数点特别好,旁边参数都明显变差。

它像海面上的小岛,看起来高,但四周都是深水。

孤岛最优经常提示过拟合风险。

过拟合,就是策略把历史数据里的偶然细节也“背下来”了。

它在过去样本里很漂亮,但换一段时间、换一批股票、换一点成本后就容易失灵。

稳健性,就是策略面对小变化时不至于立刻崩掉。

小变化包括参数变化、成本变化、样本时间变化、股票池变化和成交假设变化。

3. 参数扫描的基本流程

先确定策略规则,不要边扫边改规则。

再列出每个参数的合理范围。

然后用相同数据、相同成本、相同指标体系,对所有组合做回测。

最后观察结果表,而不是只看最高值。

mermaid
graph TD
    A["固定策略规则"] --> B["列出参数范围"]
    B --> C["逐组运行回测"]
    C --> D["记录收益与风险指标"]
    D --> E["观察平台期或孤岛最优"]
    E --> F["写出可执行结论"]

这里最容易犯错的是第二步。

参数范围必须来自投资逻辑,而不是随便从 1 扫到 999。

例如日线均线策略可以观察 10 到 60 个交易日。

因为 A 股一个月大约 20 个交易日,一个季度大约 60 个交易日。

如果你把均线长度扫到 3 日,可能更像短线噪声。

如果扫到 250 日,则已经接近一年视角,策略含义也变了。

范围太宽,会把不同投资逻辑混在一起。

范围太窄,又可能看不到真实稳定区间。

4. A 股案例:一个简单均线过滤策略

假设我们研究一条入门规则。

当某只流动性较好的 A 股收盘价站上 N 日均线时,下一交易日按规则观察买入。

当收盘价跌破 N 日均线时,下一交易日按规则卖出。

每次交易都扣除佣金、印花税、过户费,并额外设置滑点。

这里的参数是 N,也就是均线天数。

我们先不要急着问“哪个 N 最好”。

更好的问题是:“N 在一段合理区域内,策略是否都还能活着?”

下面是一组教学用的虚拟结果,不代表任何真实收益承诺。

N 日均线年化收益最大回撤交易次数观察结论
107.2%24.0%96交易太频繁,成本压力较大
158.1%22.5%74表现开始稳定
208.4%21.8%61与邻近参数相近
258.0%22.1%54仍在同一区间
307.6%23.0%49略降但未崩掉
603.2%28.5%21策略节奏明显改变

如果只看最高收益,20 日均线最好。

但真正重要的是 15、20、25、30 日之间没有剧烈断层。

这说明策略可能存在一个“中期趋势过滤”的平台期。

如果表格变成下面这样,就要谨慎得多。

N 日均线年化收益最大回撤交易次数观察结论
182.0%30.0%70表现较弱
191.5%31.2%68表现较弱
2018.0%12.0%66单点特别亮眼
211.2%32.5%65立刻变差
222.4%29.8%63表现较弱

20 日看起来像“冠军参数”。

但它周围全部塌陷,更像孤岛最优。

这样的参数不能直接拿来实盘练习。

5. 扫描二维参数时,看“区域”而不是“冠军”

真实策略往往不止一个参数。

例如同时有均线天数和止损比例。

这时可以做二维扫描。

均线天数止损 6%止损 8%止损 10%
15可接受可接受一般
20可接受较好可接受
25一般可接受可接受
30较弱一般可接受

这张表的重点不是“20 日 + 8%”这一格。

重点是它附近有没有一片相对可接受的区域。

如果附近都是可接受,说明策略对参数不太敏感。

如果只有一个格子好,说明策略可能只是碰巧匹配历史。

常见误区

参数扫描不是把回测次数开到最大,然后选一个最漂亮的结果。扫描次数越多,越要警惕自己把噪声当规律。

6. 一个短小的 pandas 思路示例

下面的代码只展示思路,不要求你现在拿真实数据运行。

它的重点是:把每一次扫描结果都留下来,而不是只保存最优参数。

python
rows = []

for ma_days in [10, 15, 20, 25, 30, 40, 60]:
    result = run_backtest(
        data=sample_daily_data,
        ma_days=ma_days,
        commission=0.00025,
        stamp_tax=0.0005,
        slippage=0.001,
    )
    rows.append({
        "ma_days": ma_days,
        "annual_return": result["annual_return"],
        "max_drawdown": result["max_drawdown"],
        "trade_count": result["trade_count"],
    })

scan_table = pd.DataFrame(rows)

读这段伪代码时,不要被函数名吓到。

run_backtest 可以理解为一个“回测按钮”。

循环每次把均线天数换一下。

每次得到的年化收益、最大回撤和交易次数,都放进表格。

最后你要分析的是整张表,而不是表格里最大的一格。

7. 专业老师视角:参数要有解释

如果一个参数没有投资含义,就不应该被轻易接受。

20 日均线可以解释为约一个月的市场平均成本。

60 日均线可以解释为约一个季度的趋势背景。

8% 止损可以联系到单笔风险和 A 股波动特征。

但如果某个策略必须用 17.3 日均线或 6.7% 止损才有效,新手就要追问:为什么是这个数字?

能解释,不代表一定有效。

不能解释,却只因为历史收益高而采用,风险更大。

8. 投资者视角:稳健性决定你能否坚持

实盘里不会刚好复制历史。

下一次行情的波动节奏会不同。

成交可能遇到涨跌停、停牌、流动性不足。

成本也可能因为交易频率、佣金档位和滑点而变化。

如果策略对参数极度敏感,你执行时会非常痛苦。

今天回撤扩大,你会怀疑是不是参数错了。

明天少赚一点,你又想重新优化。

频繁换参数,最后就变成情绪交易。

稳健性检查的意义,是让你知道策略有没有足够宽的容错空间。

9. 量化开发视角:扫描要可复现

每次扫描都要记录数据版本。

每次扫描都要记录参数范围。

每次扫描都要记录成本假设。

每次扫描都要记录股票池和回测区间。

否则你今天看到的“最优参数”,明天可能连自己都复现不出来。

建议给每次实验一个编号。

例如 bt_2026_05_09_ma_scan_v01

报告里写清楚:这次只测试了均线天数,没有同时优化止损、换仓和选股条件。

这样别人复查时,知道你做了什么,也知道你没做什么。

10. 可执行练习:三步判断参数是否靠谱

第一步,找最优点。

这一步只用于定位,不用于直接决策。

第二步,看最优点周围的邻居。

如果左右相邻、上下相邻都不差,记录为“可能存在平台期”。

第三步,加严条件再看。

把滑点提高一点,把样本拆成牛市、熊市、震荡市,再观察结果是否完全崩掉。

如果一加严就崩,说明策略安全垫不足。

如果收益下降但逻辑仍存在,才值得进入下一节的滚动验证。

风险提醒

参数扫描只能降低“被单个漂亮数字欺骗”的概率,不能证明策略未来一定赚钱。


交互实验室

请把下面的练习当成一张纸面工作表。

你不需要真实行情数据,也不需要新增组件。

目标是训练“看区域”的眼睛。

练习 A:识别平台期和孤岛最优

假设某策略扫描 5 个参数后得到结果。

参数年化收益最大回撤交易次数
105.0%23.0%90
157.8%21.5%75
208.0%21.0%63
257.6%22.0%55
307.1%22.8%48

请回答:

  1. 最高收益参数是哪一个?

  2. 15 到 30 之间是否像平台期?

  3. 如果成本再提高 0.1%,你最担心哪一列先恶化?

  4. 你会把结论写成“20 最好”,还是“15 到 30 区间相对稳定”?

练习 B:给参数写理由

请任选一个你熟悉的规则,例如“收盘价站上均线后观察”。

把参数范围写成下面的表。

参数名称准备扫描的范围每个取值的间隔投资含义
均线天数10、20、30、60约半月到一季度趋势观察窗口
止损比例6%、8%、10%每次增加 2%单笔风险护栏
持有天数5、10、20一周到一个月信号有效观察期

如果某个参数写不出投资含义,先不要急着扫描。

这说明它可能只是为了追求历史漂亮结果而存在。

练习 C:写一句稳健性结论

请用下面模板完成一句话。

本次扫描中,参数 ______ 附近表现较稳定;但在 ______ 条件下结果明显变差,因此后续需要继续检查 ______。

一个合格答案可能是:

本次扫描中,均线 15 到 30 日附近表现较稳定;但在交易成本提高后交易次数较多的参数明显变差,因此后续需要继续检查成本敏感性和分年份表现。


核心复盘

知识清单

  • [ ] 我知道参数扫描的目的不是寻找神奇数字,而是寻找稳定区域。

  • [ ] 我能区分参数平台期和孤岛最优。

  • [ ] 我知道最优参数周围的邻居同样重要。

  • [ ] 我能解释参数背后的投资含义,而不是只看收益排序。

  • [ ] 我知道扫描次数越多,越要警惕过拟合。

  • [ ] 我会记录数据版本、成本假设、参数范围和回测区间。

金句总结

真正值得信任的参数,不是站在历史最高点上,而是站在一片还能呼吸的平台上。

本文档仅供学习交流用途,不构成任何投资建议。股市有风险,入市需谨慎。