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 日附近表现较稳定;但在交易成本提高后交易次数较多的参数明显变差,因此后续需要继续检查成本敏感性和分年份表现。


核心复盘 ​

知识清单:

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

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

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

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

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

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

金句总结

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

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