Appearance
第 6 讲:参数扫描——寻找最优均线
本讲要点
在同一段历史上挑出的「最优」参数,常常只是运气最好的那个。
1. 本讲任务
上一讲只试了 3 个均线天数。本讲做参数优化:在固定样本上系统扫描,找出收益率最高的均线周期 (N)。
- 扫描
MA = 5, 10, 15, …, 120(步长 5,共 24 个) - 每个都跑一遍「定投 + 均线门禁」
- 挑最终收益率最高的当「样本内最优」
- 同时与无门禁定投对照
听起来很科学——危险也在这里:本讲只负责「找最优」;该参数换一段时间是否仍成立,留给第 7 讲检验过拟合。
2. 完整代码
python
rows = []
for ma in range(5, 121, 5):
r = backtest_dca_with_ma(df, ma_period=ma)
rows.append({"ma": ma, "return": r["return"].iloc[-1]})
scan = pd.DataFrame(rows)
best = scan.loc[scan["return"].idxmax()]
dca_ret = backtest_dca(df)["return"].iloc[-1]
print(f"冠军参数: MA{int(best['ma'])}")
print(f"冠军收益: {best['return']:.2%}")
print(f"定投: {dca_ret:.2%}")
print(f"提升: {best['return'] - dca_ret:.2%}")
colors = ["green" if x > dca_ret else "steelblue" for x in scan["return"]]
plt.figure(figsize=(10, 4))
plt.bar(scan["ma"], scan["return"] * 100, color=colors, alpha=0.75)
plt.bar(best["ma"], best["return"] * 100, color="gold", edgecolor="black", label="冠军")
plt.axhline(dca_ret * 100, color="gray", linestyle="--", label="定投")
plt.axhline(0, color="black", linewidth=0.8)
plt.xlabel("均线天数")
plt.ylabel("收益率 (%)")
plt.legend()
plt.tight_layout()
plt.show()脚本:easy-quant/code/06_param_scan.py
3. 运行结果
固定窗口 2021-01-01—2026-03-04,标的沪深 300ETF(510300.SS):
text
冠军参数: MA5
冠军收益: 18.53%
定投: 17.70%
提升: 0.82%
跑赢定投: 1/24
对照 MA 5: 18.53% vs定投 +0.82% 买入 37/63
对照 MA 10: 15.83% vs定投 -1.88% 买入 33/63
对照 MA 20: 14.71% vs定投 -3.00% 买入 26/63
对照 MA 60: 14.36% vs定投 -3.34% 买入 28/63
对照 MA120: 16.26% vs定投 -1.44% 买入 27/63| 方案 | 收益 | 相对定投 | 买入次数 |
|---|---|---|---|
| 定投(无门禁) | 17.70% | — | 63/63 |
| 冠军 MA5 | 18.53% | +0.82% | 37/63 |
| MA10 | 15.83% | −1.88% | 33/63 |
| MA20 | 14.71% | −3.00% | 26/63 |
| MA60 | 14.36% | −3.34% | 28/63 |
| MA120 | 16.26% | −1.44% | 27/63 |

4. 柱状图与表格怎么读
- 金色柱:样本内收益率最高的参数(本例为 MA5)
- 灰虚线:定投水平(17.70%)
- 24 个参数中,仅 MA5 略高于定投;MA10 / 20 / 60 等常用周期全部低于定投
- 冠军相对定投只高 0.82 个百分点,且 MA5 门禁较松(仍买入 37/63 个月)——更像轻微择时,而非稳定优势
因此,就本样本而言:谈不上「哪条均线适合沪深 300ETF」;扫描给出的只是这段历史上终点收益最高的 (N),不是可外推的配置结论。
5. 为什么这时候要警惕
想象教室里测 24 个人的身高,挑最高的那个:
- 他确实最高
- 但这不代表「挑人规则」能迁移到隔壁班
参数扫描也一样:你给了波动 24 次「碰巧第一」的机会。冠军只比定投高一点点时,更要怀疑这是选择偏差,而不是找到了规律。
下一讲冻结本讲得到的最优参数(MA5),拿到 2017–2021 另一段历史上再考——专门看过拟合。