EA定时重启与状态快照设置,我踩过的坑和解决方案

新帖
登录发帖
Exness 推荐平台

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

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
小满清风
小满清风 楼主 昨天 21:30 浏览 4 回复 0 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 1 帖数 21 积分 1327 汇币 965
1楼
昨晚挂EA的时候碰到个挺典型的问题,镑美那个网格策略跑了大概十一天,周五收盘前我看MT4日志突然发现EA完全不响应新tick了,图表上笑脸变成哭脸,但账户里持仓还在。手动重挂之后一切正常,可这种“假死”状态如果没发现,周末跳空开盘就容易出大事。折腾到半夜才定位到根子上——不是EA逻辑写错,是长时间运行后订单池和内部状态变量不同步,加上我这台VPS连续跑了四十多天没重启过。今天就把我踩过的坑和现在的做法捋一捋,给有基础想深挖的朋友参考。
第一个坑是重启时机选错。我最早图省事,设成每周一凌晨三点自动重启MT4,结果有次周一开盘镑美直接跳空四十多点,EA刚起来还在初始化历史数据,错过了第一波平仓窗口。后来改成周五收盘后、周六凌晨执行重启,避开所有品种的活跃时段,黄金和欧美都安全。但注意别卡在周末服务器维护的尾巴上,我一般留出两小时缓冲。具体做法是在VPS上挂个计划任务,调用命令行参数让MT4带指定配置文件启动,重启前必须先让EA走完OnDeinit里的状态保存逻辑,不然内存里的挂单标记全丢。
第二个坑更隐蔽,就是状态快照存什么。我一开始只存了持仓数组,觉得够用了,结果重启后发现EA把已经平掉的单子又当成新信号处理了一遍,重复开仓。后来才明白要存三类东西:

  • 订单池快照:把当前所有magic number对应的ticket、开仓价、方向、注释全写进CSV,重启后先读这个文件对齐,别依赖OrdersTotal去猜
  • 内部状态变量:比如网格的当前层数、最后一次加仓价位、趋势过滤器的方向标记,这些不落盘就全归零
  • 时间戳和K线偏移:记录最后一根已处理K线的开盘时间,重启后从这根往后补算,避免重复处理同一根

我用的是写到MQL4的GlobalVariable加一个本地txt双备份,GlobalVariable在MT4重启后有时会丢,txt文件更稳。这里有个细节,文件写入要用FILE_WRITE|FILE_TXT并且每写一条就Flush,我有次偷懒攒着一起写,赶上VPS断电,快照文件直接变空,EA起来一脸懵。
第三个坑是重启后的校验没做。现在我的EA在OnInit里会先比对快照里的持仓和实际账户持仓,数量或ticket对不上就报警并暂停开新单,只管理已有仓位。这个校验逻辑救过我好几次,有回VPS快照文件被同步软件覆盖成旧版本,EA发现持仓数差了两单,直接锁了开仓权限,没造成更大混乱。顺便说一句,快照文件最好带版本号和写入时间,我命名成snapshot_GBPUSD_v2_20240614.txt这种,回滚的时候一眼能看出用哪个。
最后提一嘴VPS层面的配合。我现在每月强制重启一次VPS,跟EA的周五重启错开,避免两个动作撞一起。MT4的“允许实时自动交易”那个勾选,重启后要在脚本里确认一遍,我有次计划任务跑完发现勾没打上,白等了一周。这些设置谈不上多高深,但都是真金白银换来的。你们平时EA跑多久重启一次?快照是存全局变量还是写文件,有没有更稳的招?
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 监管牌照多的平台手续费是不是更贵 下一帖 → 外汇课上花冤枉钱的复盘,我交了学费才学会的