You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:48:02