MT5插件开发疑问:TradeRequest添加无效及IMTOrder与IMTRrequest差异咨询
MT5 Server API问题解答
一、返回码0但请求队列无新增请求的可能原因
- 参数隐性不合法:返回码0仅代表API调用的语法层面通过,但部分逻辑校验(如账户余额不足、品种交易权限关闭、下单价格超出允许阈值)可能在后续内部流程中不通过,导致请求被直接丢弃,未进入队列。
- 请求直接成交未留队列:如果是市价单这类即时执行的请求,若服务器匹配到对手盘直接成交,请求不会留在队列,而是直接生成
IMTOrder,此时应去查询订单列表而非请求队列。 - 队列查看方式有误:若你是通过缓存数据或错误的遍历方式查看队列,可能看不到刚提交的请求。需用
IMTRequestQueue::First()和IMTRequestQueue::Next()接口实时遍历队列,确保获取最新状态。 - 调用流程不完整:部分场景下,仅调用
IMTRequestQueue::Add()只是将请求加入本地缓存,还需额外调用IMTRequest::Send()完成提交,否则请求不会真正进入服务器队列。
二、IMTOrder与IMTRequest的区别及交易操作选型
- IMTRequest:是交易操作的发起载体,用于提交下单、平仓、修改订单、删除挂单等所有交易申请。它会先进入请求队列等待服务器处理,是触发交易动作的唯一入口。
- IMTOrder:是交易请求处理完成后的结果实体,代表已确认的持仓、挂单或历史平仓记录。只有当
IMTRequest被服务器成功处理后,才会生成对应的IMTOrder;请求失败则不会产生。 - 交易操作选型:所有主动交易动作必须使用IMTRequest,
IMTOrder仅用于查询已存在的订单状态、持仓信息等,无法直接发起交易。
内容的提问来源于stack exchange,提问作者zenith
相关产品推荐
相关产品推荐

