EA参数调优入门指南 - 07月02日更新
兄弟们,最近后台私信问参数调优的不少,我整理了下自己踩过的坑,尽量说人话。调优不是玄学,是统计学和逻辑的结合,别信什么万能参数。
第一步,先明确你的策略类型。趋势跟踪、震荡剥头皮、网格马丁?每种策略的参数敏感度差异巨大。比如我的双均线突破EA,核心参数是周期和止损倍数,而网格类更依赖间距和层数。不要一上来就优化所有参数,先固定最不敏感的几个,通常包括手数、滑点设置。
第二步,数据样本要干净。我习惯用2018-2022年的M15数据做初始测试,剔除跳空和新闻数据时段。优化前先跑一次默认参数,记录胜率、最大回撤、盈亏比。如果默认参数盈利,说明策略逻辑成立,否则直接换思路。注意,过度优化会导致过拟合,我的原则是:优化后参数在样本外测试至少亏损不超过原始参数的20%才算合格。
第三步,遗传算法优化。MT4自带的优化器效率低,我通常用自定义脚本。核心参数设置:种群大小50-80,变异率0.1,交叉率0.8。优化目标选“利润因子*回撤系数”,权重自己调,我习惯利润因子权重0.6,最大回撤权重0.4。跑完看帕累托前沿,别只盯着最高利润,回撤超过30%的直接淘汰。
第四步,稳定性验证。把优化出的前10组参数放到不同时间周期(H1、H4)和不同品种(EURUSD、GBPUSD)测试。如果某组参数在EURUSD上盈利,但在GBPUSD上亏损超过30%,说明参数过度依赖品种特性,剔除。我还会用蒙特卡洛模拟跑1000次,参数组必须保证95%置信区间内回撤不超过25%。
最后,实盘前用Demo跑两周,每天手动记录参数表现。如果连续3天亏损超过10%,立即暂停并回测原因。别迷信“稳定盈利”的幻象,参数调优的本质是控制风险,不是预测未来。
附一段我常用的MQL4代码片段,用于快速计算参数稳定性指标:
double CalculateStability(int params[], int periods) {
double returns[];
ArrayResize(returns, periods);
for(int i=0; i<periods; i++) {
returns = AccountBalance() - AccountBalance();
}
double mean = Mean(returns);
double variance = Variance(returns, mean);
return MathSqrt(variance) / mean; // 变异系数越低越稳定
}
注意,这段代码需要配合你的EA数据接口使用。参数调优是门手艺活,多动手多复盘,别指望一步到位。有问题留言,我尽量回复。
兄弟们,最近后台私信问参数调优的不少,我整理了下自己踩过的坑,尽量说人话。调优不是玄学,是统计学和逻辑的结合,别信什么万能参数。
第一步,先明确你的策略类型。趋势跟踪、震荡剥头皮、网格马丁?每种策略的参数敏感度差异巨大。比如我的双均线突破EA,核心参数是周期和止损倍数,而网格类更依赖间距和层数。不要一上来就优化所有参数,先固定最不敏感的几个,通常包括手数、滑点设置。
第二步,数据样本要干净。我习惯用2018-2022年的M15数据做初始测试,剔除跳空和新闻数据时段。优化前先跑一次默认参数,记录胜率、最大回撤、盈亏比。如果默认参数盈利,说明策略逻辑成立,否则直接换思路。注意,过度优化会导致过拟合,我的原则是:优化后参数在样本外测试至少亏损不超过原始参数的20%才算合格。
第三步,遗传算法优化。MT4自带的优化器效率低,我通常用自定义脚本。核心参数设置:种群大小50-80,变异率0.1,交叉率0.8。优化目标选“利润因子*回撤系数”,权重自己调,我习惯利润因子权重0.6,最大回撤权重0.4。跑完看帕累托前沿,别只盯着最高利润,回撤超过30%的直接淘汰。
第四步,稳定性验证。把优化出的前10组参数放到不同时间周期(H1、H4)和不同品种(EURUSD、GBPUSD)测试。如果某组参数在EURUSD上盈利,但在GBPUSD上亏损超过30%,说明参数过度依赖品种特性,剔除。我还会用蒙特卡洛模拟跑1000次,参数组必须保证95%置信区间内回撤不超过25%。
最后,实盘前用Demo跑两周,每天手动记录参数表现。如果连续3天亏损超过10%,立即暂停并回测原因。别迷信“稳定盈利”的幻象,参数调优的本质是控制风险,不是预测未来。
附一段我常用的MQL4代码片段,用于快速计算参数稳定性指标:
double CalculateStability(int params[], int periods) {
double returns[];
ArrayResize(returns, periods);
for(int i=0; i<periods; i++) {
returns = AccountBalance() - AccountBalance();
}
double mean = Mean(returns);
double variance = Variance(returns, mean);
return MathSqrt(variance) / mean; // 变异系数越低越稳定
}
注意,这段代码需要配合你的EA数据接口使用。参数调优是门手艺活,多动手多复盘,别指望一步到位。有问题留言,我尽量回复。
专注交易策略编程实现,分享MQL开发技巧与代码优化方案