交易所市场算法(EMA)(基础篇)
📘

交易所市场算法(EMA)(基础篇)

第 1/3 篇

◍ EMA 算法在 MT5 里的落地与回测起点

把指数移动平均(EMA)做成交易所品种的自动化算法,核心在 MetaTrader 5 的自定义指标与 EA 框架里完成。MQL5 的 iMA 函数可直接调用 EMA 句柄,比 MT4 时代手算平滑系数更省事,也更容易接上订单管理逻辑。 作者 Andrey Dik 在 2026 年 7 月 16 日发布的这一版算法,原文页面显示 91 次查看、0 条评论,属于冷启动阶段的技术贴,没有经过社区大规模挑刺,验证时建议自己跑一遍再信。 原文结构分三块:引言讲动机,算法实现给代码,测试结果贴曲线。对读者来说,最实在的动作是打开 MT5 的 MetaEditor,新建 EA 把 EMA 周期先设成 14,加载到 XAUUSD 的 H1 图表观察信号延迟——外汇与贵金属杠杆高、滑点大,EMA 交叉在震荡市可能频繁假突破,仅作概率参考。

从种群算法到交易者行为建模

数值优化里新算法扎堆,但真能在不确定、高维条件下打穿全局最优的并不多。基于种群的元启发式算是一类特殊选手,它借自然或社会过程去找解,实战里常比梯度类方法更扛局部极值。 交易所市场算法(EMA)是这类方法里比较另类的代表,它不直接仿生,而是把股票市场里成败不一的交易者搬进模型。参与者各自用不同策略冲利润最大化,算法靠这种群体博弈结构去逼近最优。 做 MT5 上的参数寻优时,可以把 EMA 当成替代遗传算法的候选跑一遍;外汇与贵金属波动大、杠杆高,任何优化结果都只是概率倾向,实盘前必须用历史数据回测验证。

「把交易者分成三层来跑搜索」

EMA 把种群先按目标函数(组合收益)降序排,再切成三块:精英组守住已找到的高收益位置不动,中间组向精英学但留适度风险,新手组愿意高换手搏反转。每次迭代等于一个交易轮次,内部切均衡与波动两种市况分别更新。 均衡阶段里,中间组成员从精英随机挑一位导师,按吸收系数 r1=1.5 起步、随迭代自适应递减的步长偏移,且乘随机数模拟决策不确定性;新手同时选精英与中间组各一导师,位置取两者方向的组合。波动阶段切换激进逻辑:中间组 50% 概率直接复制历史全局最优,其余绕精英质心加 riskAlpha=0.3 的噪声探索,噪声随时间长衰减。 新手在波动期风险最高——30% 概率完全丢弃当前位置随机重启,35% 概率以大半径围绕现位广搜,剩余用对立学习远离最差中心。衰减系数靠 S 型函数算,保证前期探索、后期利用平滑过渡。每轮除精英外全量更新位置,重算目标函数再排序,因此开 MT5 写 EA 时精英数组必须单独保护、不能进随机刷新循环。

◍ 种群与风险因子的冷启动

把优化问题映射成一群虚拟交易者,种群规模取 N = 60,这个数必须是 3 的倍数,因为后面要均分成三组跑不同策略倾向。初始化时给每位交易者一个随机位置,代表他在参数空间里的起点,还没经过任何迭代筛选。 三个控制量先钉死:r₁ = 1.5 管个体向自身历史最优的拉扯强度,r₂ = 0.8 管向群体最优的跟随强度,α = 0.3 是风险因子,直接压住仓位或止损阈值的上限。每组规模 m = N/3 = 20,三组各 20 人,后续迭代里分别走探索、开发、保守三条路。 外汇与贵金属杠杆高、滑点跳空频繁,α 设 0.3 只是初始保守值;真上 MT5 跑 EA 前,建议先用历史数据测一遍 N=60 在 EURUSD 15M 上的收敛速度,再决定是否调大种群。 迭代从 t = 1 一直跑到 T,每一轮都重算三组的位置更新,下一节才展开更新公式。

把交易者按适应度切成三层

遗传算法跑完一轮后,先给种群里每个交易者算适应度,再按数值从高到低排个序。这一步直接决定下一轮谁有资格繁殖、谁被淘汰。 排好序后把总数 N 均分成三份:前 m 个进 G₁ 精英组,中间 m 个归 G₂ 中产阶级,剩下 2m+1 到 N 的进 G₃ 新手组。以 N=300、m=100 为例,精英组锁定排名 1–100,中产占 101–200,新手覆盖 201–300。 分组不是装饰,后续交叉和变异的概率权重都挂在组号上。精英组倾向直接保留,新手组倾向被随机重组,开盘前用 MT5 脚本打印一次分组分布,能快速看出当前种群是否退化。

「训练后期自动收束网格间距」

网格策略最怕后半程还在大幅扩距,容易在趋势末端吃满反向单。用一条 sigmoid 把衰减系数绑在训练进度上,能让 r1、r2 随进度平滑收敛。 具体做法:先算 progress = t / T,即当前回合占总回合的比例;再用 decay = 1 / (1 + exp(-10(progress - 0.5))) 得到 0~1 之间的 S 形曲线,中点落在进度一半处。 r1ᵃᵈᵃᵖᵗ = r1 × (1 - decay × 0.5),r2ᵃᵈᵃᵖᵗ = r2 × (1 - decay × 0.3)。意味着训练刚启动时 decay 近 0,间距几乎不变;进度过半后 decay 快速拉升,r1 最多缩 50%、r2 最多缩 30%。 在 MT5 策略测试里把 T 设为 200 代,进度 0.5 之后网格密度肉眼可见变紧,回测曲线回撤倾向小于固定间距版本。外汇与贵金属波动剧烈,实盘前请用历史数据验证该衰减是否匹配你的品种周期。

常见问题

建议先用50和200双EMA做快慢线金叉死叉判定,并在4小时图回测;贵金属与外汇波动大,需加一层ATR过滤减少假信号。
先算每个个体的适应度值,用分位数(如33%、66%)切三档,分别赋予不同变异率;低适应度层加大扰动,高适应度层缩小步长。
可以。小布内置AIGC分析,打开对应品种页就能让它替你跑多层适应度切分与网格收束诊断,你只管看结论调参。
有可能。收束说明搜索在局部收敛,建议在收束前保留验证集误差曲线,若验证误差回升则提前停止。
用模拟盘随机种子生成前100代种群,风险因子设宽先验(如波动率0.5~2倍),跑完再按幸存者分布裁剪。