大家好,最近在论坛里看到不少朋友问关于EA参数调优的问题,特别是新手刚接触自动化交易时,面对一堆输入参数往往不知从何下手。我去年开始系统整理自己的参数优化流程,经过大半年实盘验证,觉得这套方法对多数趋势型和震荡型EA都适用。今天抽空写个入门指南,希望能帮到有需要的朋友。
先强调一个原则:参数调优不是玄学,也不是单纯跑历史回测找最优解。很多新手喜欢用EA自带的遗传算法跑几千次,然后挑一个回测收益率最高的参数组合,结果实盘一跑就崩。原因很简单——过度拟合。历史数据里那些完美的参数往往只是噪音的产物。
我的调优流程分四步:数据准备、初步筛选、稳健性验证、实盘适配。
第一步,数据准备。选货币对时,尽量用该品种至少3年的M1数据,但回测周期用H1或H4。为什么?因为M1噪音太大,直接优化容易陷入局部最优。我习惯把数据分成三段:前60%做训练集(优化参数),中间20%做验证集(避免过拟合),后20%做盲测(模拟未来)。比如欧元兑美元,从2020年1月到2023年6月,训练集用2020-2022.6,验证集用2022.7-2023.3,盲测用2023.4-2023.6。这样能有效过滤掉那些只在特定行情下有效的参数。
第二步,初步筛选。打开EA的策略测试器,先固定几个核心参数(比如止损、止盈、仓位管理),只优化交易信号相关的参数。比如一个均线交叉EA,通常有快线周期、慢线周期、过滤条件三个变量。用遗传算法跑1000次左右,但不要只看净利润,重点关注三个指标:最大回撤小于20%、夏普比率大于1.5、交易次数超过200笔。如果某个参数组合回撤超过30%但利润很高,直接淘汰。然后从结果里选出前10组,手动检查每组的交易明细,看看盈利分布是否均匀。如果某组80%的利润来自两三次大单,这通常是运气而非策略能力。
第三步,稳健性验证。把选出的10组参数放到验证集和盲测集上分别跑一遍。一个合格参数组应该在三个数据集上表现一致,比如训练集年化收益20%,验证集和盲测集至少也要有15%以上,且最大回撤不超过训练集的1.2倍。如果某组在盲测集上收益翻倍但回撤翻三倍,果断弃用。这一步我习惯用自定义的稳健性评分公式:评分 = (验证集收益/训练集收益)*(盲测集收益/训练集收益)/(盲测集回撤/训练集回撤)。评分大于0.8的保留,低于0.5的直接丢掉。注意,这个评分不是唯一标准,但能快速过滤垃圾参数。
第四步,实盘适配。选出最稳健的3-5组参数后,用最小仓位挂到模拟盘上跑两周。观察几个点:滑点是否严重、订单执行时间是否过长、EA是否在非活跃时段频繁开仓。比如有些参数在历史回测中表现完美,但实盘遇到点差突然扩大时,策略逻辑会失效。这时候需要微调:比如把入场条件加一个时间过滤(只交易伦敦和纽约重叠时段),或者把止损加一个ATR浮动值。这种微调通常改动幅度不超过原参数的10%,否则重新走前三步。
最后说个细节:优化时别贪心。很多人总想把EA调成“全市场通吃”,结果参数越调越多,最后变成过拟合的怪物。我一般每个品种只保留一套参数,最多加个波动率自适应开关。比如黄金和原油的参数差异很大,不如分开写两个文件。
工具方面,我习惯用Excel记录每次优化的参数组合和三个数据集的表现,方便对比。MQL4自带的优化报告虽然能用,但建议导出CSV后再用Python或R语言做二次分析,比如画参数敏感度热力图。如果不会编程,至少手动记录下每次优化的回测曲线和订单明细。
以上是个人经验,欢迎拍砖。有朋友问具体代码实现的话,我可以下次分享个参数自动筛选脚本,用MQL4的OnTester()函数输出自定义统计指标,然后在Excel里直接排序。先写到这,希望对新人有帮助。
先强调一个原则:参数调优不是玄学,也不是单纯跑历史回测找最优解。很多新手喜欢用EA自带的遗传算法跑几千次,然后挑一个回测收益率最高的参数组合,结果实盘一跑就崩。原因很简单——过度拟合。历史数据里那些完美的参数往往只是噪音的产物。
我的调优流程分四步:数据准备、初步筛选、稳健性验证、实盘适配。
第一步,数据准备。选货币对时,尽量用该品种至少3年的M1数据,但回测周期用H1或H4。为什么?因为M1噪音太大,直接优化容易陷入局部最优。我习惯把数据分成三段:前60%做训练集(优化参数),中间20%做验证集(避免过拟合),后20%做盲测(模拟未来)。比如欧元兑美元,从2020年1月到2023年6月,训练集用2020-2022.6,验证集用2022.7-2023.3,盲测用2023.4-2023.6。这样能有效过滤掉那些只在特定行情下有效的参数。
第二步,初步筛选。打开EA的策略测试器,先固定几个核心参数(比如止损、止盈、仓位管理),只优化交易信号相关的参数。比如一个均线交叉EA,通常有快线周期、慢线周期、过滤条件三个变量。用遗传算法跑1000次左右,但不要只看净利润,重点关注三个指标:最大回撤小于20%、夏普比率大于1.5、交易次数超过200笔。如果某个参数组合回撤超过30%但利润很高,直接淘汰。然后从结果里选出前10组,手动检查每组的交易明细,看看盈利分布是否均匀。如果某组80%的利润来自两三次大单,这通常是运气而非策略能力。
第三步,稳健性验证。把选出的10组参数放到验证集和盲测集上分别跑一遍。一个合格参数组应该在三个数据集上表现一致,比如训练集年化收益20%,验证集和盲测集至少也要有15%以上,且最大回撤不超过训练集的1.2倍。如果某组在盲测集上收益翻倍但回撤翻三倍,果断弃用。这一步我习惯用自定义的稳健性评分公式:评分 = (验证集收益/训练集收益)*(盲测集收益/训练集收益)/(盲测集回撤/训练集回撤)。评分大于0.8的保留,低于0.5的直接丢掉。注意,这个评分不是唯一标准,但能快速过滤垃圾参数。
第四步,实盘适配。选出最稳健的3-5组参数后,用最小仓位挂到模拟盘上跑两周。观察几个点:滑点是否严重、订单执行时间是否过长、EA是否在非活跃时段频繁开仓。比如有些参数在历史回测中表现完美,但实盘遇到点差突然扩大时,策略逻辑会失效。这时候需要微调:比如把入场条件加一个时间过滤(只交易伦敦和纽约重叠时段),或者把止损加一个ATR浮动值。这种微调通常改动幅度不超过原参数的10%,否则重新走前三步。
最后说个细节:优化时别贪心。很多人总想把EA调成“全市场通吃”,结果参数越调越多,最后变成过拟合的怪物。我一般每个品种只保留一套参数,最多加个波动率自适应开关。比如黄金和原油的参数差异很大,不如分开写两个文件。
工具方面,我习惯用Excel记录每次优化的参数组合和三个数据集的表现,方便对比。MQL4自带的优化报告虽然能用,但建议导出CSV后再用Python或R语言做二次分析,比如画参数敏感度热力图。如果不会编程,至少手动记录下每次优化的回测曲线和订单明细。
以上是个人经验,欢迎拍砖。有朋友问具体代码实现的话,我可以下次分享个参数自动筛选脚本,用MQL4的OnTester()函数输出自定义统计指标,然后在Excel里直接排序。先写到这,希望对新人有帮助。
专注交易策略编程实现,分享MQL开发技巧与代码优化方案