10030 表示成交模式不被接受
交易请求的 type_filling 与品种及请求类型不匹配时可能返回 TRADE_RETCODE_INVALID_FILL(10030)。它是执行兼容问题,不是策略信号或历史收益判断。先保留交易返回码和脱敏日志。
同时检查执行模式与成交标志
使用 SYMBOL_TRADE_EXEMODE 核对品种执行方式,使用 SYMBOL_FILLING_MODE 读取允许的位标志。FOK 与 IOC 是能力位标志;ORDER_FILLING_* 是请求枚举,不应把原始位掩码直接赋给 type_filling。
RETURN 不能用于 Market Execution 的即时成交请求;挂单的规则与即时成交不同,不能把同一个回退算法用于所有订单类型。没有获准 FOK / IOC 时应按具体执行模式和官方规格处理,不强制选一个值反复重试。
使用交易类时按品种配置
下面是即时交易前的检查片段,不是完整 EA。交易类返回 true 也不代替检查服务器交易返回码;在目标券商和账户模式下再次验证。
#include <Trade/Trade.mqh>
CTrade trade;
// Place inside the EA initialization / trade setup.
if(!trade.SetTypeFillingBySymbol(_Symbol))
{
Print("Cannot select supported filling policy");
return;
}
// After a trade request, inspect trade.ResultRetcode().直接构建 MqlTradeRequest 时
结合 action、订单类型、执行模式及 SYMBOL_FILLING_FOK / SYMBOL_FILLING_IOC 位标志显式选择请求策略。成交模式不是唯一约束;同时核对手数步长、止损距离、保证金与交易权限。不要把所有返回码都归因于 filling mode。
保持版本边界,复测交易证据
调整成交模式后形成新源码版本并重新编译,使用固定品种、周期、区间和参数复测。保留原始失败结果与修改版结果、实际成交和报告。修复后有成交不表示盈利,历史证据不代替模拟或实盘风险评估。