MT5回测TradeRequest字段设置异常引发10013错误求助
MT5回测10013错误与交易请求异常原因分析
针对你遇到的问题——预期发送TRADE_ACTION_DEAL类型的ORDER_TYPE_BUY请求,日志却显示尝试移除SELL STOP LIMIT订单并触发10013错误,可能的原因及排查方向如下:
可能的原因
- 交易请求参数未重置:如果代码中复用了同一个
MqlTradeRequest结构体,之前用于创建/移除SELL STOP LIMIT挂单的参数(如action=TRADE_ACTION_REMOVE、type=ORDER_TYPE_SELL_STOP_LIMIT)未被清空或覆盖,就会导致后续入场请求被错误修改为移除动作。 - 订单管理逻辑混乱:代码中可能存在未处理的历史挂单记录,比如全局变量存储的挂单ID未被及时清空,在
DoEntryRules执行时,误判该挂单需要移除,优先执行了删除操作而非入场交易。 - 条件分支判断错误:
DoEntryRules内的逻辑判断出现偏差,比如入场条件的布尔变量状态错误、行情条件判断逻辑反转,导致本该执行入场请求的分支,实际走到了移除挂单的代码块。 - 异常处理逻辑误触发:10013错误为"Invalid request",如果代码中存在交易请求失败后的异常处理逻辑,可能在处理之前的错误请求时,误触发了移除订单的操作。
排查建议
- 强制初始化交易请求结构体:每次发送交易请求前,要么重新声明
MqlTradeRequest变量,要么手动重置所有关键参数(action、type、symbol、volume等),避免旧参数残留。 - 添加详细日志跟踪:在代码中记录所有挂单的ID、类型,以及每次交易请求的完整参数,确认触发
REMOVE动作的时机和对应的触发条件。 - 梳理逻辑分支:逐行检查
DoEntryRules内的条件判断,验证入场条件满足时,是否确实执行了TRADE_ACTION_DEAL的请求代码,没有误入移除挂单的分支。 - 检查异常处理代码:确认处理交易请求错误的逻辑中,是否存在错误触发移除订单的操作,尤其是针对10013错误的处理部分。
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

