MQL5调用OrderSend提交挂单提示Invalid expiration错误如何解决
MQL5 OrderSend 报错Invalid expiration 解决方案
- 补充
MqlTradeRequest的type_time字段赋值:你当前代码只设置了expiration,但MQL5要求使用过期时间时必须指定时间类型,你需要加一行request.type_time = ORDER_TIME_SPECIFIED;,这个枚举值代表你指定了明确的过期时间点,是挂单场景下最常用的时间类型。 - 校验过期时间属性:
- 确保你填写的
expiration时间晚于订单提交时的服务器时间,回测时提交订单的时间是回测周期起始的2021.10.01 00:00:00,你设置的过期时间必须大于这个时间点 - 确认你填写的时间对应标的的交易时段,不要设置在休市、周末等非交易时间,否则会被判定为无效时间
- 如果你不确定固定时间格式是否合规,可以用时间戳运算生成,比如设置7天后过期可以写
request.expiration = TimeCurrent() + 7*24*60*60;,避免手动写固定时间出错
- 确保你填写的
- 确认回测环境/经纪商的规则:部分经纪商对挂单的最小过期间隔有要求,比如要求过期时间至少距离当前时间1分钟以上,不要设置过近的过期时间。
修正后可运行的代码示例:
int OnInit() { MqlTradeRequest request = {0}; // 初始化结构体避免脏数据干扰 MqlTradeResult result = {0}; request.action = TRADE_ACTION_PENDING; request.type = ORDER_TYPE_BUY_LIMIT; request.symbol = _Symbol; request.volume = 100 ; request.type_time = ORDER_TIME_SPECIFIED; // 新增必填项:指定时间类型 request.price = 45400 ; request.sl = request.price - (request.price*0.1); request.tp = request.price + (request.price*0.2); request.expiration = D'2021.10.10 13:00:00'; request.type_filling = ORDER_FILLING_RETURN ; if(!OrderSend(request,result)) { Print("订单发送失败,错误码:",GetLastError()); // 新增错误打印方便后续排查问题 } else { Print("订单发送成功,订单号:",result.order); } return(INIT_SUCCEEDED); }
内容的提问来源于stack exchange,提问作者tinivini
相关产品推荐
相关产品推荐

