冷清0.2

从入门到放弃再到搞定:EA异常处理与日志记录

Exness 推荐平台

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

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
策略部署客
策略部署客 楼主
1 小时前 2 0 1分钟 新汇友(注册会员) Lv.1 主题1 帖数3 积分2330 汇币1880
1楼
说实话,我见过太多EA死在“看起来没问题”上。回测跑得漂亮,实盘一挂就翻车,最后一看日志,全是些莫名其妙的断点。很多人觉得日志就是print一下,能跑就行,但真正到了异常处理这个层面,你会发现,日志写不好,你连死因都查不出来。今天不聊策略逻辑,就聊聊怎么把EA的“尸体”解剖明白。
先说一个最容易被忽略的坑: MT4/MT5的日志缓冲区是内存优先的 ,你直接Print()出来的东西,在崩溃瞬间大概率没来得及写入文件。我早期做欧美EA的时候,遇到过凌晨三点准时掉线,重启后日志文件里干干净净,跟没发生过一样。后来才明白,必须主动把关键状态写入自定义文件,而且要控制写入频率。别用FileWrite每次都开文件,那会卡顿,用 FileOpen+FileSeek+FileWriteString 组合,配合一个全局变量做节流,比如每5秒或者每10个tick才写一次。这样即使崩溃,你丢的数据最多是几秒内的,不影响定位问题。
再来说异常捕获。MQL4/5的OnTick()里,你没法用try-catch,这是个硬伤。所以我的做法是,在每次交易操作前做前置检查,而不是等它报错。比如你挂单,先检查 MODE_TRADEALLOWEDTERMINAL_CONNECTED ,再检查账户的 MARGIN_LEVELFREE_MARGIN 。这些检查不是多余,是保命。我见过有人做黄金EA,止损设得很近,结果周五晚上点差突然从20拉到80,止损直接变成滑点成交,账户瞬间爆掉。如果日志里记录了当时的点差和可用保证金,你就能复现问题,否则只能瞎猜。
具体我的日志结构大概是这样的,供参考:

  • 时间戳(用TimeLocal(),别用TimeCurrent(),因为服务器时间和本地时间在VPS上可能差好几个小时)
  • 订单类型和手数(比如OP_BUY,0.5手)
  • 当前点差(Ask-Bid,这个关键时刻能救命)
  • 账户权益和可用保证金(判断是否接近爆仓线)
  • 最近一次错误码(GetLastError(),这个必须记,很多新手忽略)
  • 自定义状态标记(比如“等待回调”“已挂单”“止损触发”等)

写的时候用 FileWriteString 加个分隔符,比如“|”,后面用Excel或者Python脚本拉出来分析,比在MT4里翻日志高效多了。我这边是每天凌晨定时把日志文件打包,然后通过FTP传到本地服务器,写个简单的Python脚本做异常关键词扫描,比如“Error”“Invalid”“Margin”这些,自动发邮件提醒。这套东西跑了大半年,帮我抓出过两个隐藏bug,一个是周末跳空时止损价没更新,另一个是API返回的报价数组越界。
还有一个坑,VPS上的时区问题 。你本地跑得好好的,放VPS上就各种对不上。因为VPS默认UTC时间,你MT4里设置的GMT+2,日志里记录的时间和你实际看盘时间差了6个小时,排查问题的时候特别容易混乱。我的建议是日志里统一用 TimeGMT() 记录,然后分析的时候再转换,这样不管你在哪台机器上跑,时间线都是对齐的。
最后说下重试机制。EA调用交易函数失败,很多人直接return,这是不对的。比如下单失败,错误码是 ERR_TRADE_TIMEOUT (148),这时候应该等待几秒再重试,而不是放弃。但重试次数要有限制,我一般设3次,每次间隔5秒,超过就放弃并写日志。注意,重试的时候要重新检查价格和点差,因为市场可能已经变了,你拿旧价格重试,等于白试。另外,别在同一个tick里连续重试 ,那样会卡死主线程,导致掉线。
说到底,日志这东西,不是为了给别人看的,是给你自己复盘用的。我每次改完EA,都会跑一周的模拟盘,然后专门看日志里有没有异常记录。很多时候,行情没变,但日志里出现了之前没见过的错误码,那就要警惕了,多半是代码里某个边界条件没处理好。
你们现在跑EA,日志文件一般保留多久?我这边是保留30天,超过就自动清理,但关键的错误日志会单独备份。有没有人遇到过日志文件太大导致EA卡顿的情况?可以聊聊你们怎么处理的。
0 回复 复制 众裁0
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。汇友之家合作的各家经纪商均为持有正规外汇牌照的经纪商,我们不参与经纪商的任何经营活动。经纪商在经营过程中可能出现破产清算、资不抵债、跑路或躲避责任等情况,这些问题汇友之家无法控制,亦不承诺任何经纪商资金的绝对安全。请知悉!
← 上一帖 地缘政治避险行情的交易应对框架 下一帖 → EA策略失效后的应对方案,我交了学费才学会的