用ai做个一个EA ,一直不开单,请教大神上面原因 - 页 2

XiaoMing Bao #:

我刚刚用ai完成一个。现在在跑着呢,正常开单。我建议你要一步一步排查。你的开不了单是挂上了没有开单还是挂不上开不了单。里面有很多细节的。

哥们,现在数据跑的怎么样,我也想弄一个

时区有问题,

还有,你设置的这个参数是互斥的,估计几十年也开不了一单

Gemini帮我写的 黄金策略EA 都是亏损的
[删除]
这帖已经列了很多可能原因。真正定位时,建议先不要同时改时间、指标阈值和止损参数;在模拟盘/策略测试器里给每个“不开单”出口各留一条带时间戳的日志:自动交易许可、交易时段、点差、各信号布尔值、手数与保证金检查、OrderSend 返回值和错误码。这样能区分“根本没出现信号”与“出现信号但被服务器拒单”。如果方便,贴一次触发附近的 Experts/Journal 日志和品种的 Digits、Point、Stops Level(隐去账号信息),大家才能针对具体失败点排查。
MT4 的 EA 不开单,从最简单的开始查:

1. 自动交易没开
   工具栏"自动交易"按钮是不是绿色?EA 属性里"允许实时自动交易"勾了吗?
   图表右上角有没有禁止图标?

2. 回测能开、实盘不开 → 大概率是 STOPS_LEVEL
   每个经纪商对挂单/止损与现价的最小距离有硬性要求,MT4 里是
   MarketInfo(Symbol(), MODE_STOPLEVEL),黄金上常见 20~150 点。
   距离不够订单直接被拒(错误码 130)。回测里这个值经常是 0,
   所以回测正常、实盘就是不开单。

3. 没检查返回码(最常见)
   OrderSend() 的返回值直接丢掉,问题就永远不暴露:

      int ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage,
                             sl, tp, comment, magic, 0, clrGreen);
      if(ticket < 0) Print("OrderSend failed, error=", GetLastError());

   MT4 错误码很能说明问题:
   130=止损或挂单距离太近 / 131=手数不对 / 134=资金不足 /
   138=重报价 / 4051=参数无效 / 4109=交易不允许

4. 手数和价格没对齐
   手数必须是 MarketInfo(Symbol(), MODE_LOTSTEP) 的整数倍,
   并夹在 MODE_MINLOT / MODE_MAXLOT 之间;
   价格按 MODE_TICKSIZE 对齐。
   0.1 手在步长 0.01 和 0.1 的账户上都合法,但 0.15 就不是 → 返回 131。

5. 入场条件永远不成立
   常见原因:用了当前未收盘 K 线的值判断;iCustom 参数顺序写错;
   指标缓冲区索引取错(0 和 1 搞反)。
   建议在 OnTick 里把条件里每个变量 Print 出来,
   一眼就能分清是"条件没满足"还是"下单被拒"。

先把第 3 条的错误日志加上,跑一天看有没有 OrderSend failed,
把日志贴出来,很容易定位。