很热85.7

EA日志分析与故障诊断实操分享

Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
拾光旅人
拾光旅人 楼主
2026-8-11 15:49:06 598 0 1分钟 Lv.4 实盘汇友 Lv.4 主题6 帖数12 积分1014 汇币904
1楼
凌晨三点半,EURUSD的订单又没按预期平仓,EA日志里躺着一行“invalid ticket”就没了下文。这种时候最烦的不是行情,是连个报错都看不懂。我自己的VPS上挂了七八个EA,这几年跟日志死磕下来,发现大部分人根本不会系统性地看日志,全是等出问题才翻两页,然后瞎猜。今天就把我常用的日志诊断流程拆开讲,顺便对比一下两种主流方案:手动翻日志 VS 用外部脚本自动解析,各有各的坑,看你自己情况选。
先说手动翻日志这个方案。说白了就是打开MT4的“日志”标签页,或者到数据文件夹里找YYYYMMDD.log文件。优点是零成本,MT4自带,而且能直接看到实时上下文,比如价格变动、点差波动和EA动作的先后顺序。我踩过最大的坑是,日志文件默认只保留最近7天,如果你VPS硬盘小或者没设置自动清理,老日志会被直接覆盖,等你想回溯上周的故障点,连影子都找不到。另一个坑是,日志里同一秒可能刷十几条信息,尤其是多个EA共用一个账户时,订单号和时间戳对不上会让你误判是哪个EA出的错。手动方案适合单EA、低频交易的场景,但你要是跑网格或者马丁,日志量一大,肉眼根本盯不过来。
再说外部脚本自动解析,比如用Python写个脚本定期抓取日志文件,或者直接挂个EA把Print()输出重定向到数据库。优点很明显,可以按订单号、时间范围、错误类型做筛选,还能自动统计每天“invalid ticket”出现的频率,配合价格数据做关联分析。我自己的做法是每天凌晨用任务计划程序跑一次脚本,把前一天的日志里的ERROR和WARN级别行抽出来,按错误码分类存成CSV。但这里有个大坑:MT4的日志文件在EA运行时是锁定的,你直接读会报权限错误,必须先把文件复制到临时目录再解析,或者用FileCopy()在EA内部做快照。另外,脚本解析对日志格式变化很敏感,MT4更新版本后偶尔会改时间戳格式,我就遇到过正则表达式突然匹配不上,排查了半天发现是多了个毫秒字段。
具体实操步骤我按我的流程走,分四步:

  • 第一步,开启详细日志级别。在EA代码里用Print()输出关键变量,比如订单开仓价、止损价、当前Bar的收盘价,别偷懒只打“order opened”这种废话。我习惯在OrderSend()前后各打一行,带OrderTicket()和OrderStopLoss(),这样出问题能直接看到是参数传递错了还是服务器拒绝。
  • 第二步,设置日志文件按天分割。MT4默认是单个文件写到满,但你可以用FileOpen()自己写一个按日期命名的文件,把EA的自定义错误信息单独存,别跟MT4主日志混在一起。
  • 第三步,定期抓取错误码映射表。MT4的错误码从1到几百,比如138是“requote”,145是“modify failed”,这些在官方文档里有,但没人会背。我建议把常见错误码做成一个常量数组放EA里,Print()时直接输出文字描述,而不是数字,省得回头查。
  • 第四步,用外部脚本做二次过滤。我上面说的Python脚本,重点抓“invalid ticket”和“no money”这两个高频错误,因为前者通常是你用了过期的ticket号去修改订单,后者是保证金不足或者手数超出限制。脚本里加个逻辑,如果同一错误码在10分钟内出现超过5次,就发邮件提醒,这样不用每天盯日志。

踩过的坑里最典型的一次,是我有个EA在周五晚上频繁报“trade context busy”,手动翻日志发现是跟另一个EA同时调用OrderSend()抢上下文。后来改成在EA里加个互斥锁标志,用GlobalVariableSet()控制同一时刻只能有一个EA发单,问题就解决了。还有一次是VPS时间不同步,导致日志里的时间戳和服务器时间差了8小时,我以为是EA休眠逻辑出bug,折腾了两天,最后发现是Windows的自动同步时间被组策略关了。这种环境问题,日志本身根本看不出来,得配合系统事件查看器一起看。
最后说句实在话,手动方案适合刚上手的人,能帮你建立对EA运行机制的感觉;自动解析适合已经跑了一段时间、需要量化错误频率的。我个人现在是混合着来,平时靠脚本盯,出大问题才手动翻原始日志找上下文。你们有没有遇到过日志里明明没报错,但EA就是不下单的情况?那种最头疼,我目前只能靠加Print()埋点排查,不知道有没有更好的办法,欢迎交流。
4 回复 复制 众裁0
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。汇友之家合作的各家经纪商均为持有正规外汇牌照的经纪商,我们不参与经纪商的任何经营活动。经纪商在经营过程中可能出现破产清算、资不抵债、跑路或躲避责任等情况,这些问题汇友之家无法控制,亦不承诺任何经纪商资金的绝对安全。请知悉!
← 上一帖 手把手教你搞定MT5对冲账户EA配置详解 下一帖 → MT5回测数据与实盘差异巨大,原来是订单执行模式搞的鬼