交易所市场算法(EMA)·综合运用
(3/3)· 从种群分组到双阶段市场状态,一篇跑通 EMA 在 MT5 上的落地与回测验证
多数交易者把 EMA 当成又一个优化黑箱,直接套默认参数进回测,结果在波动段过度拟合。本篇接前两部分的概念与单模块实现,把精英组、中间组、新手组与均衡/波动双阶段串成完整算法,并用实测说明哪些系数真正影响曲线形态。
用 sigmoid 给进化收敛加平滑过渡
在自组织 EMA 优化器里,progress 表示当前迭代占总代数的比例,取值 0 到 1。直接拿线性权重去切换搜索重心,容易在中期发生参数跳变,把已搜到的较优区抖散。 代码里用 1.0 / (1.0 + MathExp(-10.0 * (progress - 0.5))) 做 sigmoid 映射:当 progress=0.5 时函数输出 0.5,progress 从 0.4 到 0.6 的区间里输出从约 0.27 升到约 0.73,斜率最陡,前后两端则逼近 0 和 1。系数 10.0 控制过渡带宽度,调大它会让切换更晚且更突兀。 Revision() 负责每代把种群 a 按适应度排进临时数组 aT,再把冠军 a[0] 的染色体抄进 cB、适应度赋给 fB。开 MT5 把 popSize 设成 50 跑几百代,打印 fB 曲线,能直接看到 sigmoid 权重介入后中后期收敛斜率的变化。
class=class="str">"cmt">// Use the sigmoid function for a smooth transition class="kw">return class="num">1.0 / (class="num">1.0 + MathExp(-class="num">10.0 * (progress - class="num">0.5))); } class=class="str">"cmt">//———————————————————————————————————————————————————————————————————— class=class="str">"cmt">//———————————————————————————————————————————————————————————————————— class=class="str">"cmt">//--- Update the best solutions class="type">void C_AO_EMA::Revision() { class="kw">static S_AO_Agent aT []; ArrayResize(aT, popSize); u.Sorting(a, aT, popSize); ArrayCopy(cB, a [class="num">0].c, class="num">0, class="num">0, WHOLE_ARRAY); fB = a [class="num">0].f; } class=class="str">"cmt">//————————————————————————————————————————————————————————————————————
◍ EMA 跑分与种群榜排位
把 EMA 交易所市场算法直接丢进三套标准测试函数里跑,每组函数各测 5、25、500 个并行点,单次均迭代 10000 次。Hilly 函数下得分从 0.67066(5 点)滑到 0.25221(500 点),Forest 从 0.74192 跌到 0.19454,Megacity 离散函数更弱,5 点仅 0.38769、500 点剩 0.09672。总得分 3.36596,折合满分潜力的 37.40%,说明低维还行、维度一拉就散。 横向塞进 40 个算法的种群优化排行榜,EMA 没进前排:榜首 ANS 交叉邻近搜索拿 6.134(68.15%),第 20 名 BSA 回溯搜索也有 4.959(55.10%),EMA 的 3.366 大概落在三十名开外。做 MT5 EA 参数寻优时,若维度高于 25,换 ANS 或 CLA 大概率比硬用 EMA 省算力和回测时间。 外汇与贵金属市场的高波动会让这类基准函数的映射失真,上面的排位仅作算法选型参考,实盘前务必用历史tick重跑一遍自己的目标函数。
「智能优化器在 EURUSD 参数寻优里的实测差距」
把 9 个输入维度的均值、极值与综合得分摊开看,BFO-GA 细菌觅食优化拿到 4.224 的综合分和 46.93 的总评估值,排在最前;SOA 简单优化算法 4.181 / 46.45 紧随其后,ABHA 人工蜂巢算法 4.127 / 45.85 列第三。 对比基准组更直观:EMA 交易所市场算法综合分仅 3.366、总评估 37.40,RW 随机游走更是掉到 2.348 / 26.09。也就是说,RW 相对 BFO-GA 综合分缩水约 44.4%,在外汇与贵金属这种高杠杆高风险品种上,优化器选错可能直接把回测过拟合带进实盘。 开 MT5 把同一套 EA 参数空间分别挂 BFO-GA 和 RW 跑一遍,重点看第 9~12 列那组 1.0 上下的分布——差距基本就出在尾部稳定性的概率倾向,而非均值高低。
一点提醒
这套 EMA 种群优化算法在统一测试台里的评级没能挤进前 45 名,图 3 的直方图把结果按 0 到 100 标了比例,100 是理论极值,它实际落点偏低,主要卡在结构单一、没有跳出局部极值的机制。收敛精度低是硬伤,不改写自适应控制逻辑就只能在基础层打转。 作者开源的 EMA.zip(242.9 KB)里带了 Test_AO_EMA.mq5 等九个文件,在 MT5 加载后跑一遍 Testing AOs.mq5,你能直接复现文里的分级结果。外汇与贵金属市场高风险,这类优化器只作策略研发参考,别拿回测分当实盘胜率。 有意思的是算法里的搜索思路能塞进后续开发库,但俄文原版经转译,部分经典描述被改过,结论仅基于实验,准确性作者不背书。真要接着调,建议先动 enum 里的参数边界再看直方图的位移。