Simulink: EA 交易开发人员指南(基础篇)
用 Simulink 给 EA 搭控制骨架
在 MT5 里写 EA,多数人直接从 OnInit / OnTick 硬撸逻辑,但复杂策略的状态切换很容易写成一团乱麻。把策略先当作一个动态系统,用 Simulink 做框图建模,再转成 MQL5 代码,是条更稳的路子。 Denis Kirichenko 在 2013-11-08 发布的这篇指南,截至统计时点累计阅读 5651、收藏 10,说明即便小众,控制论视角在 EA 开发里一直有刚需。 思路核心是:行情输入 → 指标运算块 → 决策块 → 下单执行块,每块在 Simulink 里是独立模块,信号线即数据依赖。开发者先在可视化环境跑通闭环,再逐块翻译成 MQL5 函数,比直接调 OrderSend 更容易排错。 外汇与贵金属杠杆高、滑点跳空频繁,任何自动化闭环都要先在策略测试器用真实点差回测,再上模拟盘验证信号延迟。
◍ 用 Simulink 给 EA 开发换条可视化路子
做自动化交易系统的痛点从来不是写不出代码,而是验证逻辑太抽象。Simulink 作为 MATLAB 旗下的可视化建模工具,能把交易系统的信号流、条件判断直接画成模块连线,省掉大量手写代码,对非职业程序员的交易者更友好。 作者明确把自己定位为非专业程序员,所以坚持“由简入繁”:系统结构先能看见、逻辑先能跑通,再谈落地到 MT5。这套思路里,在 Simulink 里搭的模型叫 MTS,导出到 MQL5 里运行的才叫 EA 交易,术语上先切干净,后面不至于混。 实际路径是:Simulink 内完成系统创建与验证,再生成 MetaTrader 5 的 EA,最后用 MT5 全量历史数据做事后检验。你想验证这条路是否适合自己,可先装 MATLAB+Simulink,照此流程跑一个均线交叉 MTS,再看导出 EA 在 MT5 策略测试器的表现。外汇与贵金属杠杆高,任何建模方式都不消除实盘风险,回测通过仅代表历史概率倾向。
「用 Simulink 与 Stateflow 搭事件驱动模型」
Simulink 是 MATLAB 里的动态系统建模组件,能建线性、非线性、离散或连续混合模型。它自带可扩展模块库和图形化方框图编辑器,还提供 Model Explorer 统一管理信号、参数与属性,并允许通过 API 接外部程序或手写代码。
初始化只靠两种方式:在 MATLAB 命令窗口敲 simulink,或点工具栏的 Simulink 图标。随后弹出库浏览器,左侧是组件树,右侧显示选中库的图标块,所有操作都依赖一个已开的 MATLAB 会话来监控执行。
建空白模型后先改配置:菜单 Simulation → Configuration Parameters 里,Solver 选项卡将 Type 设 Fixed-step、solver 设 discrete、步幅填 1;Simulation time 中 Start time 设为 1,Stop time 保持默认。这样解算器按固定步长 1 推进,适合后续离散事件逻辑。
Stateflow 是 Simulink 里基于有限状态自动机的子系统,用规则加事件驱动系统行为。从库里拖出 Chart 块双击,进入 SF 编辑器,左侧工具栏 9 个按钮中最常用的是状态、默认转换、连接节点和嵌入式 MATLAB 函数。状态用圆角矩形画,可嵌套父子层级,活动与非活动状态决定流程走向;转换用带箭头的曲线连对象,条件写进尖括号,执行动作跟在斜杠后。
事件和数据是两类非图形对象:事件触发图表流程,数据在各层级定义数值属性但不显示。外汇与贵金属 EA 逻辑若用这套建模,回测前务必认清事件触发时序误差可能导致信号漂移的高风险。
用双 EMA 穿越搭一个极简 EA 骨架
把策略压到最薄一层:EA 只在两条指数移动平均线发生穿越时动作。周期取 21 和 55,这两个数是斐波那契序列里的相邻项,不少价格行为派习惯拿它们当趋势切换的参考窗。 具体规则很直白——EMA21 从下向上穿过 EMA55,开多;反方向穿越,开空。为滤掉穿越当根 K 线的毛刺,实际建仓放在穿越确认后的下一根 K 线,品种锁在 EURUSD H1,且同一时刻只持一个仓位。 平仓条件只有两个硬边界:触到 Take Profit 或 Stop Loss 才离场,中间不手动干预、不马丁不加仓。这套逻辑在 MT5 里跑历史回测时,属于故意做薄的“教学级”简化。 需要提醒的是,上面这套没有检查经纪商对信号的真实成交环境(滑点、拒绝、点差跳变),外汇与贵金属属高风险品种,实盘和回测结果可能出现明显偏离,上线前务必在策略核心补上执行层限制。