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

如何检测MQL5中是否存在挂单?OrdersTotal返回0的问题

解决MQL5中OrdersTotal()返回0无法检测挂单的问题

首先明确:OrdersTotal()返回的是终端中所有可见订单的总数,但如果你的挂单没被统计到,大概率是以下原因之一,对应解决方案如下:

常见原因及修复

  • 权限不足:终端未允许自动交易或程序未获得交易权限
    打开终端菜单「工具 > 选项 > 交易」,勾选「允许自动交易」;运行EA/脚本时,确认弹出的权限请求弹窗选择允许。

  • 未筛选挂单类型:OrdersTotal()包含已成交订单、挂单等所有订单,直接用它判断是否有挂单不准确
    要单独统计挂单,需要遍历所有订单并筛选挂单类型,示例代码:

    int GetPendingOrderCount()
    {
        int pendingCount = 0;
        for(int i = 0; i < OrdersTotal(); i++)
        {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
                ENUM_ORDER_TYPE type = (ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
                // 匹配所有挂单类型
                if(type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_SELL_LIMIT ||
                   type == ORDER_TYPE_BUY_STOP  || type == ORDER_TYPE_SELL_STOP ||
                   type == ORDER_TYPE_BUY_STOP_LIMIT || type == ORDER_TYPE_SELL_STOP_LIMIT)
                {
                    pendingCount++;
                }
            }
        }
        return pendingCount;
    }
    

    调用这个函数就能得到真实的挂单数量。

  • 终端未显示目标订单:检查终端的「交易」标签,确认挂单确实存在且未被过滤(比如没有隐藏某类订单)。

  • 品种匹配问题:如果你的挂单是在其他品种下,而程序默认只关注当前图表品种,需要在筛选时增加品种判断:

    // 在挂单类型判断后追加
    if(OrderSymbol() == _Symbol)
    {
        pendingCount++;
    }
    

额外注意事项

  • OrderSelect()必须指定MODE_TRADES参数,否则会默认遍历历史订单,而挂单属于当前交易订单。
  • 如果订单已成交、取消或过期,OrdersTotal()不会再统计该订单。

内容的提问来源于stack exchange,提问作者Gabriele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:04:59