3. 移动平均线策略:双均线金叉死叉策略,参数(快线、慢线周期)的优化
双均线策略,说白了就是两条不同周期的移动平均线打架。快线上穿慢线,我们叫它「金叉」,做多;快线下穿慢线,叫「死叉」,做空。听起来简单吧?但参数怎么选,才是真正的学问。
我个人习惯把这个问题拆成三步:参数空间定义 → 回测评估 → 稳健性检验。咱们一步步来。
3.1 参数空间:别瞎蒙,要有边界
快线周期通常取 5~50 日,慢线周期取 20~200 日。但有个硬约束:慢线必须大于快线,否则逻辑就乱了。
我建议用网格搜索,步长可以设 5 或 10。比如快线从 5 到 50,步长 5;慢线从 20 到 200,步长 10。这样一共也就 10×19=190 组参数,算起来很快。
核心原则:参数范围要覆盖「过拟合区」和「欠拟合区」。太短的周期容易频繁交易,太长的周期反应迟钝。
3.2 回测评估:别只看收益率
很多人一上来就看总收益率,这是大忌。我见过一个策略,回测年化 80%,但最大回撤 60%,你敢用吗?
我一般用这几个指标综合评估:
| 指标 | 说明 | 我的经验阈值 |
|---|---|---|
| 年化收益率 | 年化后的平均收益 | > 15% |
| 最大回撤 | 账户从峰值跌落的幅度 | < 20% |
| 夏普比率 | 风险调整后收益 | > 1.5 |
| 胜率 | 盈利交易占比 | > 40% |
| 交易次数 | 总交易笔数 | > 50 次(统计意义) |
嗯,这里要注意:交易次数太少,统计结果不可信。我曾经优化出一组参数,年化 30%,但只交易了 12 次。后来实盘发现,那纯粹是运气。
3.3 代码实现:用 Python 跑一遍
下面是我常用的优化框架,你直接拿去改参数就行:
import pandas as pd
import numpy as np
def backtest_ma(data, fast, slow):
# 计算均线
data['ma_fast'] = data['close'].rolling(fast).mean()
data['ma_slow'] = data['close'].rolling(slow).mean()
# 生成信号
data['signal'] = 0
data.loc[data['ma_fast'] > data['ma_slow'], 'signal'] = 1
data.loc[data['ma_fast'] < data['ma_slow'], 'signal'] = -1
# 计算每日收益
data['return'] = data['close'].pct_change()
data['strategy_return'] = data['signal'].shift(1) * data['return']
# 累计收益
data['cum_return'] = (1 + data['strategy_return']).cumprod()
# 计算指标
total_return = data['cum_return'].iloc[-1] - 1
max_drawdown = (data['cum_return'] / data['cum_return'].cummax() - 1).min()
return total_return, max_drawdown
# 网格搜索
results = []
for fast in range(5, 55, 5):
for slow in range(20, 205, 10):
if slow <= fast:
continue
ret, dd = backtest_ma(data, fast, slow)
results.append([fast, slow, ret, dd])
# 转成 DataFrame 方便分析
df_results = pd.DataFrame(results, columns=['fast', 'slow', 'return', 'drawdown'])
小技巧:我习惯把结果画成热力图,一眼就能看出哪些参数区域表现好。颜色越深,收益越高。
3.4 稳健性检验:别被「最优参数」骗了
找到一组最优参数后,别急着高兴。我踩过最大的坑就是:最优参数往往只在特定行情下有效。
怎么做稳健性检验?我推荐三种方法:
- 滚动窗口测试:把数据分成 3~5 段,每段单独优化,看参数是否稳定。
- 参数敏感性分析:在最优参数附近微调,比如快线 ±2,慢线 ±5,看收益变化大不大。
- 蒙特卡洛模拟:随机打乱交易顺序,模拟 1000 次,看收益分布是否显著为正。
警告:如果最优参数周围 10% 的范围内,收益就大幅下降,那这个策略基本是废的。我曾经优化出一组 (12, 48) 的参数,回测年化 25%,但改成 (14, 50) 就变成 8%——果断放弃。
3.5 知识体系:一张图看懂
下面这张图总结了双均线参数优化的完整流程,我建议你保存下来,每次做优化时对照着看:
3.6 避坑指南:我踩过的三个坑
最后分享几个实战教训,都是真金白银换来的:
- 别用未来数据:计算均线时,一定要用当天的收盘价,不能包含未来信息。我见过有人用未来数据回测,年化 100%,实盘直接亏光。
- 注意交易成本:双均线策略交易频率不低,如果忽略手续费和滑点,回测结果会虚高 30%~50%。
- 别过度优化:参数越精确,越容易过拟合。我一般选一个「参数高原」上的点,而不是尖峰上的点。
总结一句话:双均线参数优化的核心不是找到「最好」的参数,而是找到「最不容易变坏」的参数。稳健性比收益率重要得多。