EA运行监控看板搭建实战:多实例状态与绩效集中展示方案
EA运行监控看板搭建实战:多实例状态与绩效集中展示方案
2023年3月,硅谷银行被接管的那两天,我手里同时跑着六个EA实例,分布在三个不同的VPS上。周五晚上我还在盯黄金的剥头皮信号,周六早上醒来发现其中一个实例的净值曲线直接断了一截——不是策略爆仓,是VPS服务商那台母机在凌晨四点做了一次静默迁移,MT5终端被强制重启,EA加载失败,挂单全留在市场上裸奔。等我发现的时候,已经过了将近九个小时。

那次之后我就明白一件事:EA跑得好不好,跟你写策略花了多少功夫关系不大,跟你有没有一套靠谱的监控体系关系极大。多实例运行的场景下,靠人肉登录MT5看账户状态,迟早出事。你得有一个集中看板。
为什么MT5自带的警报不够用
MT5本身有推送通知和邮件提醒,但它的触发条件太粗。比如「EA停止运行」这个事件,终端只有在EA被显式移除或者崩溃时才会触发,而VPS断线重连、终端静默重启这类情况,它根本不报。我做过一次统计,过去半年里我遇到的EA异常中,MT5自带警报能覆盖的不到四成。
另一个问题是多实例。你有五个账户跑在不同服务器上,每个终端各弹各的,信息是散的。你需要的是一个页面,打开就能看到所有实例的净值、持仓、回撤、最后一次心跳时间。哪个掉线了,哪个回撤超阈值了,一眼扫过去就知道。
看板的核心:心跳检测与数据采集
搭建看板的第一步不是画界面,是解决数据怎么出来。MT5端最直接的方式是写一个监控EA,挂到每个需要监控的图表上,定时把账户状态写到一个共享位置。伪代码逻辑大致是这样:
- 每30秒读取一次AccountInfoDouble(ACCOUNT_EQUITY)、ACCOUNT_MARGIN_FREE、PositionsTotal()
- 计算当前浮亏占净值比例,超过设定阈值(比如8%)标记为预警状态
- 把账户号、净值、持仓数、浮亏比例、时间戳拼成一行CSV或JSON
- 通过FileWrite写入本地文件,或者用WebRequest POST到你的看板服务器
这里有个坑:MT5的WebRequest需要提前在终端设置里把目标域名加入白名单,否则请求会被静默拦截,不报错但也不发送。我第一次搭的时候排查了两个小时,最后才发现是这个问题。如果你用文件方式,注意MT5的文件沙箱机制,写入路径是MQL5/Files目录下,外部程序读取时要找对位置。
心跳检测的关键在于「最后一次更新时间」。看板端维护一个定时任务,每隔一分钟扫描所有实例的最新时间戳,超过90秒没更新的直接标红。这个90秒是我实测下来比较合理的值,太短容易误报,太长失去意义。
看板界面不用花哨,但要能一眼定位问题
我不推荐一上来就搞Grafana那一套,配置成本高,对个人交易者来说过重。一个简单的HTML页面加一段Python Flask后端就够了。核心展示三块内容:
- 实例列表:账户号、服务器、当前净值、今日盈亏、持仓数量
- 状态灯:绿色正常、黄色预警(浮亏超阈值或心跳延迟)、红色异常(超过3分钟无心跳)
- 绩效摘要:近7日净值曲线、最大回撤、当前回撤
我在实际使用中发现,最有价值的不是净值曲线,而是「当前回撤」这个数字。净值曲线是滞后的,回撤是实时的。当某个实例的回撤突然跳到历史最大回撤的80%以上,你就该去看一眼是不是策略失效了,还是单纯遇到了不利行情。
另外提醒一点:如果你同时跑XM和Exness的账户,注意品种命名差异。XM的黄金代码通常是GOLD,Exness是XAUUSDm,白银XM用SILVER,Exness用XAGUSDm。看板在做品种聚合统计时,如果不做映射,同一个品种会被拆成两条记录,持仓统计就乱了。合约大小也不一样,Exness的XAUUSDm标准合约是100盎司,XM的GOLD是100盎司但点值计算方式有细微差别,这些在看板里做盈亏汇总时都要处理。
部署与踩坑记录
整套东西的部署步骤不复杂:一台最低配的VPS跑看板服务(1核1G足够),每个交易VPS上挂监控EA,数据通过HTTP POST汇总。Python端用Flask接收,SQLite存历史数据,前端用Chart.js画曲线。
我踩过最大的坑是内存。监控EA如果每30秒写一次文件,一个月下来单个实例的CSV能到几十兆,MT5读文件时如果没做好句柄释放,内存会慢慢涨。后来改成每天一个文件,并且用FileClose显式关闭,问题就解决了。还有一个细节:监控EA本身不要做任何交易操作,它只负责读和写。我见过有人把监控逻辑和交易逻辑写在一个EA里,结果监控部分的bug导致交易EA被拖死,得不偿失。
回测数据方面,我用这套监控体系跑了三个月的实盘统计,六个实例中,心跳检测成功捕获了四次VPS断线、两次EA加载失败、一次终端崩溃。平均发现时间从原来的人工巡检几小时缩短到两分钟以内。看板本身不产生Alpha,但它能保证你的Alpha不会因为技术故障白白流失。
新手最容易忽略的一件事
很多人搭好看板就完了,忘了给看板本身加监控。你的看板服务器如果挂了,所有实例都变成盲区。我的做法是在看板服务上加一个外部心跳,用UptimeRobot这类免费服务每分钟ping一次,一旦看板失联,手机直接收到告警。监控系统本身也需要被监控,这个环节最容易被跳过,但恰恰是最不该省的。你的看板如果超过两分钟没更新,你至少得知道是看板挂了还是所有实例都挂了。
免责声明:本文仅代表作者观点,不构成任何投资建议。市场有风险,交易需谨慎。
