🏗️
交易机器人原型架构:基类与模块化
用三大支柱与基类封装,把 EA 开发缩到几小时
#EA#架构#基类#模块化#事件驱动
任何交易系统都能简化成开仓与平仓。把系统抽象成环境→决策→动作的循环,EA 不必知道状态怎么来的,只看当前参数决定现在要做什么。
一、任何交易系统都能简化成两件事
开仓与平仓。围绕这两件事组织代码,比堆满 if-else 的分支清晰得多。
二、三大设计原则
- 服务于条件(事件驱动):按环境决定动作,不用 while 等待;
- 尽可能抽象:用宏函数取代类型/品种依赖,做到独立于交易;
- 逻辑细分:开仓/追踪/平仓拆成独立模块,互不耦合。
三、CExpertAdvisor 基类框架
工作循环:报价/定时器进入 → 过滤 → 处理持仓模块 → 调事件块。分宏函数(BaseType/ReversType 等自动转类型)、服务函数(算手数/改止损)、事件处理模块(OnTick/OnTrade/OnTimer 等)。
四、EA 的事件源
- 指标(均线交叉、时间、网络数据);
- 现有订单/持仓及状态(盈亏、是否存在);
- 外部事件(按钮、图表对象、交易错误);
- 对应 OnTick/OnTrade/OnChartEvent/OnTimer/OnBookEvent/OnTester。
✦ 用 OnTimer 代替 Sleep
用 OnTimer 替代 while(true)+Sleep 做周期分析,既不让 EA 卡死,也更符合事件驱动模型。
五、两个可运行范例
- 指标型 MA EA:上穿 MA 开、反向穿平、限交易时段、TS 追踪;
- 鞅型 EA:首单买初始手,盈则同向往、亏则反向×系数,用 OnTrade 接单提效。
常见问题
反向逻辑先取指标值再想怎么处理,分支越写越乱;直接逻辑先声明开仓/平仓模块,模块内检查信号,易扩展也好读。
把宏/服务/事件三层固化,新 EA 只需继承填信号与参数,开发从几天缩到几小时,且不易出底层 bug。
OnTick 处理报价驱动的实时逻辑;OnTimer 做定时分析(如每分钟检查一次),避免用 Sleep 阻塞。
亏了加倍手数,连亏时仓位指数膨胀,一次大反向就爆仓;文章只是架构演示,实盘慎用或必须加层数/总风险上限。
用宏函数把买/卖、止损/限价等按方向自动转换,EA 不显式写死品种与买卖分支,换品种换方向改动极小。