首页 / 交易学院 / 小布知识库 / 交易机器人原型架构:基类与模块化
交易机器人原型架构:基类与模块化
🏗️

交易机器人原型架构:基类与模块化

用三大支柱与基类封装,把 EA 开发缩到几小时

EA 开发实战 难度 · 进阶 2026-07-15 12 分钟阅读
#EA#架构#基类#模块化#事件驱动

任何交易系统都能简化成开仓与平仓。把系统抽象成环境→决策→动作的循环,EA 不必知道状态怎么来的,只看当前参数决定现在要做什么。

一、任何交易系统都能简化成两件事

开仓与平仓。围绕这两件事组织代码,比堆满 if-else 的分支清晰得多。

二、三大设计原则

三、CExpertAdvisor 基类框架

工作循环:报价/定时器进入 → 过滤 → 处理持仓模块 → 调事件块。分宏函数(BaseType/ReversType 等自动转类型)、服务函数(算手数/改止损)、事件处理模块(OnTick/OnTrade/OnTimer 等)。

四、EA 的事件源

✦ 用 OnTimer 代替 Sleep
用 OnTimer 替代 while(true)+Sleep 做周期分析,既不让 EA 卡死,也更符合事件驱动模型。

五、两个可运行范例

六、用三层分离搭原型

可复用的 EA 原型通常拆三层:CSignal 只负责出 1/-1/0 信号、CStrategy 把信号翻译成下单意图、CTrade 执行。信号层不碰下单、执行层不判方向,单测和替换策略都轻松。原型阶段先打通这一条流水线,再往里塞具体指标。

七、信号/风控/执行三层模块

任何交易系统都能拆成三层:信号层出方向、风控层定仓位与止损、执行层负责下单与对账。三层解耦后,换信号不影响风控,改手数算法不动信号,维护成本骤降。 反过来说风控层也独立演进:你今天用手数百分比、明天换成波动率目标,信号层完全无感。这种「各自演进不互相污染」正是分层架构最大的长期价值。

新手常把所有逻辑塞进 OnTick 一个函数,几百行纠缠在一起,出 bug 无从下手。分层是 EA 能不能长期迭代的分水岭。 一旦分层后,你会发现「加一个新信号」「换一种平仓逻辑」都变成改一个独立文件,而不用通读几百行纠缠代码,迭代速度天差地别。

八、基类接口设计

用 CExpertAdvisor 这类基类定义虚函数 OnTick / OnTrade / OnInit,子类只填策略。基类管生命周期与公共工具(日志、手数),子类管个性。继承让多个 EA 共享同一套健壮骨架。

✦ 分层即可维护
信号、风控、执行三层解耦,是 EA 能长期迭代的前提。全塞 OnTick 里,几百行纠缠,改一处崩全局。

九、用组合而非继承扩展信号

信号多的时候,与其为每种组合写新子类,不如把信号做成可插拔组件,EA 在配置里选哪几个、怎么融合。组合比继承更灵活,新增信号不必动旧代码结构。

工程上推荐「基类管框架 + 组件做策略」:框架稳定不变,策略像积木一样替换。这也是专业 EA 开发商的通用做法。 组件还能热插拔:同一框架挂不同信号组件,A/B 对照跑回测,哪个真有效一目了然,决策从「我觉得」变成「数据说」。

十、小结

✦ 小结
EA 原型架构 = 信号/风控/执行三层解耦 + 基类管生命周期 + 信号组件化组合。分层后换信号不动风控、改手数不动信号,继承给骨架、组合给策略,是 EA 能长期迭代的分水岭。

常见问题

反向逻辑先取指标值再想怎么处理,分支越写越乱;直接逻辑先声明开仓/平仓模块,模块内检查信号,易扩展也好读。
把宏/服务/事件三层固化,新 EA 只需继承填信号与参数,开发从几天缩到几小时,且不易出底层 bug。
OnTick 处理报价驱动的实时逻辑;OnTimer 做定时分析(如每分钟检查一次),避免用 Sleep 阻塞。
亏了加倍手数,连亏时仓位指数膨胀,一次大反向就爆仓;文章只是架构演示,实盘慎用或必须加层数/总风险上限。
用宏函数把买/卖、止损/限价等按方向自动转换,EA 不显式写死品种与买卖分支,换品种换方向改动极小。