EA参数调优入门指南 - 06月28日更新
兄弟们,最近在群里看到不少朋友问EA参数怎么调,说实话这问题我当年也踩过不少坑。今天抽空把这几年的实战经验整理下,希望能帮刚入门的少走弯路。先声明,这帖子不是教你怎么写代码,而是针对现成EA的优化思路。如果你连回测都不会,建议先补基础。
优化参数前,先搞清楚你的EA想抓什么行情。趋势型EA和震荡型EA的优化方向完全相反。比如我常用的那个双均线突破策略,默认参数是周期20和50,但实际挂单时发现它在欧元兑美元1小时图上表现极差,后来改成15和30反而能稳定盈利。为什么?因为默认参数是开发者在4小时图上测出来的,换周期必须重新调整。这是第一点:不要迷信默认值。
具体步骤分五步走。第一步,确定优化范围。别上来就全盘改,先锁定关键参数。比如移动平均线周期、止损止盈点数、仓位管理系数,这些直接影响盈亏比。我习惯用MT5自带的策略测试器,设置参数步长后跑循环测试。注意步长不能太小,否则数据量太大容易过拟合。比如MA周期从10到50,步长设5,这样才10组数据,配合1000次回测,半小时就能出结果。
第二步,看报告里的关键指标。很多人只盯着总盈利,这是新手误区。正确顺序是:胜率、盈亏比、最大回撤、夏普比率。比如一个EA胜率40%,但盈亏比3:1,实际比70%胜率但盈亏比1:1的更靠谱。我见过有人把参数调到胜率85%但回撤30%,结果实盘一个月爆仓。所以回撤必须控制在20%以内,尤其对于小账户。
第三步,做交叉验证。单次回测结果可能有偶然性,我的做法是分三段:2018-2020年数据做优化区,2021年做验证区,2022年再做盲测。如果优化区表现好但验证区崩了,说明参数过拟合了。比如上周调整一个多币种EA,优化区年化40%,但验证区直接亏损20%,后来发现是参数对2019年单边行情过度适应,换成2021年震荡市就失效。这时需要缩小参数范围,或者增加止损条件。
第四步,动态参数与静态参数的选择。静态参数简单粗暴,但市场结构变了就容易失效。我现在更倾向用自适应参数,比如把移动平均线周期改成基于ATR的动态值。代码实现也不复杂,在EA里加个函数:maPeriod = (int)MathMax(10, MathMin(50, iATR(NULL,0,14,0)/Point*10))。这样参数会随波动率自动调整,回测时虽然复杂,但实盘抗性明显增强。注意动态参数需要额外测试稳定性,我曾经因为ATR计算周期设太大,导致参数变化过于剧烈,反而增加了噪声。
第五步,别忘了货币对和时间的差异。同一个EA,黄金和欧元兑美元的参数天差地别。比如我那个趋势EA,在欧元兑美元上用50周期均线,但换到英镑兑美元就得改成30,因为英镑波动更大。还有时间过滤,比如避开亚洲盘低波动时段。我习惯在EA里加个时间判断:if (Hour()>=8 && Hour()<=22) 才开仓,这样能过滤掉凌晨的假突破。优化时记得把时间区间也纳入参数范围。
最后说个常见坑:优化过度追求高回报率。之前有个朋友把参数调到年化200%,结果实盘一个月亏30%。为什么?因为回测数据里包含极端行情,比如2020年3月熔断,那些参数实际上是在赌黑天鹅。正确做法是剔除极端数据,或者用WFA(滚动窗口回测)来模拟真实环境。我一般用5年数据,每2年滚动一次,这样能测试参数在不同市场阶段的适应性。
补充一点,实盘和回测的差异。滑点、延迟、点差变化,这些在回测里无法完全模拟。所以我优化时会把点差设成当前市场平均值,比如欧元兑美元设2点,黄金设50点。再开个模拟账户跑两周,如果回测盈利20%,模拟只盈利5%,那说明参数还有问题。别急着挂真仓,多跑几次模拟。
写完发现篇幅不短,但都是实战教训。最后提醒一句:没有万能参数,每季度根据市场波动率重新优化一次是必要的。比如2023年美联储加息周期,很多趋势EA表现差,就是因为参数没跟上波动率变化。保持定期复盘的习惯,比追求完美参数更重要。如果还有疑问,可以跟帖交流,我尽量回复。
兄弟们,最近在群里看到不少朋友问EA参数怎么调,说实话这问题我当年也踩过不少坑。今天抽空把这几年的实战经验整理下,希望能帮刚入门的少走弯路。先声明,这帖子不是教你怎么写代码,而是针对现成EA的优化思路。如果你连回测都不会,建议先补基础。
优化参数前,先搞清楚你的EA想抓什么行情。趋势型EA和震荡型EA的优化方向完全相反。比如我常用的那个双均线突破策略,默认参数是周期20和50,但实际挂单时发现它在欧元兑美元1小时图上表现极差,后来改成15和30反而能稳定盈利。为什么?因为默认参数是开发者在4小时图上测出来的,换周期必须重新调整。这是第一点:不要迷信默认值。
具体步骤分五步走。第一步,确定优化范围。别上来就全盘改,先锁定关键参数。比如移动平均线周期、止损止盈点数、仓位管理系数,这些直接影响盈亏比。我习惯用MT5自带的策略测试器,设置参数步长后跑循环测试。注意步长不能太小,否则数据量太大容易过拟合。比如MA周期从10到50,步长设5,这样才10组数据,配合1000次回测,半小时就能出结果。
第二步,看报告里的关键指标。很多人只盯着总盈利,这是新手误区。正确顺序是:胜率、盈亏比、最大回撤、夏普比率。比如一个EA胜率40%,但盈亏比3:1,实际比70%胜率但盈亏比1:1的更靠谱。我见过有人把参数调到胜率85%但回撤30%,结果实盘一个月爆仓。所以回撤必须控制在20%以内,尤其对于小账户。
第三步,做交叉验证。单次回测结果可能有偶然性,我的做法是分三段:2018-2020年数据做优化区,2021年做验证区,2022年再做盲测。如果优化区表现好但验证区崩了,说明参数过拟合了。比如上周调整一个多币种EA,优化区年化40%,但验证区直接亏损20%,后来发现是参数对2019年单边行情过度适应,换成2021年震荡市就失效。这时需要缩小参数范围,或者增加止损条件。
第四步,动态参数与静态参数的选择。静态参数简单粗暴,但市场结构变了就容易失效。我现在更倾向用自适应参数,比如把移动平均线周期改成基于ATR的动态值。代码实现也不复杂,在EA里加个函数:maPeriod = (int)MathMax(10, MathMin(50, iATR(NULL,0,14,0)/Point*10))。这样参数会随波动率自动调整,回测时虽然复杂,但实盘抗性明显增强。注意动态参数需要额外测试稳定性,我曾经因为ATR计算周期设太大,导致参数变化过于剧烈,反而增加了噪声。
第五步,别忘了货币对和时间的差异。同一个EA,黄金和欧元兑美元的参数天差地别。比如我那个趋势EA,在欧元兑美元上用50周期均线,但换到英镑兑美元就得改成30,因为英镑波动更大。还有时间过滤,比如避开亚洲盘低波动时段。我习惯在EA里加个时间判断:if (Hour()>=8 && Hour()<=22) 才开仓,这样能过滤掉凌晨的假突破。优化时记得把时间区间也纳入参数范围。
最后说个常见坑:优化过度追求高回报率。之前有个朋友把参数调到年化200%,结果实盘一个月亏30%。为什么?因为回测数据里包含极端行情,比如2020年3月熔断,那些参数实际上是在赌黑天鹅。正确做法是剔除极端数据,或者用WFA(滚动窗口回测)来模拟真实环境。我一般用5年数据,每2年滚动一次,这样能测试参数在不同市场阶段的适应性。
补充一点,实盘和回测的差异。滑点、延迟、点差变化,这些在回测里无法完全模拟。所以我优化时会把点差设成当前市场平均值,比如欧元兑美元设2点,黄金设50点。再开个模拟账户跑两周,如果回测盈利20%,模拟只盈利5%,那说明参数还有问题。别急着挂真仓,多跑几次模拟。
写完发现篇幅不短,但都是实战教训。最后提醒一句:没有万能参数,每季度根据市场波动率重新优化一次是必要的。比如2023年美联储加息周期,很多趋势EA表现差,就是因为参数没跟上波动率变化。保持定期复盘的习惯,比追求完美参数更重要。如果还有疑问,可以跟帖交流,我尽量回复。
专注交易策略编程实现,分享MQL开发技巧与代码优化方案