EA跑回测正常,实盘却报134,是VPS时钟同步漂移在作怪吗?

较热64.4
登录发帖
Exness 推荐平台

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

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
amber171
amber171 楼主 2026-9-18 21:47:25 浏览 544 回复 5 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 2 帖数 9 积分 1309 汇币 1207
1楼
前两天一个汇友私信我,说他那套做欧美M15的EA回测三年数据漂漂亮亮,一上实盘就频繁报134,问我是不是VPS时钟漂移搞的鬼。这个问题我去年自己也踩过一次,当时折腾了两天才定位到,今天就把排查思路完整捋一遍。
先说结论:134是“Not enough money”,不是时钟问题。很多人一看到实盘和回测表现不一致,第一反应就是怀疑VPS时间同步,因为时钟漂移确实会导致K线时间戳错乱、指标计算偏移,但那类问题的报错通常是4060(无连接)或4109(交易不允许),跟134完全不是一回事。134的官方定义就是可用保证金不足,订单被服务器拒绝。
那为什么回测不报?因为回测时用的是历史数据加静态点差,而且多数人测的时候账户是全额虚拟资金,不涉及真实保证金占用逻辑。实盘报134,我总结下来一般卡在三个地方:

  • 手数计算没考虑挂单占用的保证金。我那个案例就是同时挂了两个Buy Limit,EA只判断了余额够不够开新单,没算已挂订单的冻结保证金,结果第二单直接被拒。
  • 杠杆跟回测环境不一致。回测默认用的可能是1:500,实际账户是1:100,保证金需求翻了五倍,同样的手数就爆了。
  • 点差和滑点没预留缓冲。欧美在数据公布前后点差能拉到3-5个点,保证金按实时点差算,开仓瞬间就不够了。

排查步骤我是这么走的:
第一步,先把MT4的日志调出来,不是看EA面板,是看终端里“交易”标签页的原始报错。134后面通常会跟一行可用保证金和所需保证金的数值,拿这两个数一比就知道差多少。
第二步,在EA里加一段保证金预检。我现在的写法是在OrderSend之前调MarketInfo拿保证金需求,加上20%的缓冲再判断,简单几行代码就能挡掉大部分134。别用AccountFreeMargin直接判断,那个是静态值,遇到点差扩大会失效。
第三步,核对VPS和经纪商服务器的时间。这一步不是为了解决134,但能顺手排掉其他坑。我一般用命令行跑w32tm /stripchart看偏移,超过2秒就该让VPS商处理了。时钟漂移影响的是EA的定时逻辑和News Filter,跟保证金无关,但排查时容易混淆方向。
第四步,如果上面都排了还报,那就去看经纪商的保证金计算方式。有些平台是净额对冲,有些是锁仓占用双倍保证金,换平台跑同一套EA结果可能完全不同。
我自己的结论是:EA实盘和回测对不上,先分清楚是环境差异(点差、杠杆、执行延迟)还是代码逻辑漏洞(保证金预检、订单重试),绝大部分134都是后者。VPS时钟同步是另一个独立问题,别把它当万能背锅侠。
你们跑EA的时候有没有遇到过134跟其他报错混在一起的情况?最后是怎么定位到根因的,评论区聊聊。

补充一句:还有种情况是账户开了对冲模式,多空双向持仓保证金按较大一边算,回测默认净持仓根本模拟不出来,这个坑也挺隐蔽的。
0 回复 众裁0 复制
#1
MistyMeadow
MistyMeadow #6· 6 天前
6楼
原来134是保证金不足啊,我还一直以为是VPS时钟漂移!你说的“挂单占用的保证金”这点太有用了,我自己也遇到过,MT4上两个Buy Limit一挂就报134,后来把杠杆从1:100换到1:500才好。
赞 回复 众裁0 复制
6 天前 #6
WarmLightf
WarmLightf #5· 7 天前
5楼
你说的20%缓冲,在挂单也占保证金时是不是得单独再加?我实盘1:100杠杆跑欧美M15,挂两单就报134。
赞 回复 众裁0 复制
7 天前 #5
dream6530
dream6530 #2· 2026-9-19 11:37:03
2楼
你提到的“手数计算没考虑挂单占用的保证金”这点太关键了,我那个欧美M15的EA也栽在这,两个Buy Limit一挂,第二单就报134。我自己后来在OrderSend前用MarketInfo加20%缓冲才搞定。顺便说下,我MT5上还得算对冲账户的保证金,比MT4更绕。
赞 回复 众裁0 复制
2026-9-19 11:37:03 #2
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 MT5的EA回测盈利曲线漂亮,实盘一上线就报错130,是滑点没设对吗? 下一帖 → 我最大的盈利来自等待,不是频繁动手