QMT策略已经产生信号,为什么没有实际提交委托?
发布时间:9小时前阅读:6
QMT策略已经在日志或图表上显示买卖信号,却没有在账户里看到委托,不能简单判断为“下单函数失效”。信号、委托和成交是三个不同阶段:策略判断条件成立只是信号;下单函数把请求发送给交易系统才形成委托;委托被市场撮合后才产生成交。任何一层没有完成,账户都不会变化。
第一种常见原因是运行在模拟信号模式。QMT模型交易通常区分模拟信号和实盘交易。模拟信号会记录策略判断,却不会真正把订单发到交易柜台。新手为了安全选择模拟后,看到信号却找不到委托,其实是正常现象。切换模式前应明确账号和风险,不能只为了看到订单就直接进入实盘。
第二种原因是策略并未绑定正确交易账户。模型交易中可能选择了测试账号、模拟账号,或者账户列表为空。即使代码调用了passorder,若账号参数与当前登录账户不一致,订单也无法进入预期账户。应先在模型交易界面确认资金账号,再通过账户查询验证。
第三种原因与QMT的逐K线机制有关。handlebar在盘中可能被行情快照多次触发,但默认交易模式并不是每次触发都立即报单。部分信号会被暂存,只有到达符合条件的K线时点才发送;当前K线未完成时,前面的信号可能被丢弃。若希望立即下单,需要理解快速交易参数,并用普通全局变量保存委托状态,避免依赖会回滚的ContextInfo属性。
第四种原因是代码主动过滤了运行。实盘策略常用is_last_bar跳过历史K线,也会检查交易时间、账户登录、行情长度和未完成委托。任何一个条件不满足,函数可能提前return。日志只打印了“出现信号”,但下单前又因为资金不足或等待订单而退出,也会表现为没有委托。
第五种原因是下单参数不符合要求。股票代码后缀错误、买卖类型不匹配、数量不是允许的交易单位、价格小数位不正确、限价超出规则、可用资金或可卖数量不足,都可能让订单成为废单或直接失败。此时不能只看信号日志,应继续查询委托状态和错误信息。
第六种原因是非交易时间。回测可以在历史K线上连续运行,实盘下单必须在允许的交易时段内。盘前、午间或收盘后触发的信号,是否能提交取决于订单类型和平台支持。普通股票委托不能因为策略在运行就绕过交易时间。
还有一种容易忽略的情况:代码中的下单语句被注释掉。很多官方示例为了安全,会把真实下单函数保留在注释中,只打印模拟信息。用户复制后看到日志正常,却忘记实际报单行没有执行。检查代码时应确认下单函数是否真的被调用,而不是只看旁边的说明文字。
排查可以分为四步。先看运行模式,确认不是模拟信号;再看模型交易绑定账户;接着在下单前后分别打印日志和返回值;最后查询当日委托与错误信息。不要看到没有成交就重复调用下单,否则原订单只是延迟显示时,可能造成多笔委托。
策略还应设置订单防重。信号出现后,把订单备注加入等待列表,在查询到委托或成交前暂停同方向报单。QMT内置Python文档也强调,立即下单时要使用普通全局对象保存状态,不能把关键状态放进可能回滚的ContextInfo中。
还有一种情况是策略确实调用了下单函数,但调用发生在历史K线回放阶段。实盘模型启动时,handlebar可能先遍历历史数据,如果没有is_last_bar或其他过滤,代码会打印大量历史信号;为了防止历史信号下单,平台或用户逻辑又把真实报单拦截。看到这些日志时,应先判断信号对应的是哪一天,而不是只看最后一句“买入”。
建议每条信号日志都带上时间、运行模式、账户和代码。只有信息完整,才能区分历史回放、模拟信号和真实报单。
信号出现而没有委托,往往卡在模式、账户、触发或参数中的某一层。把日志和订单状态整理清楚后再排查,会比重复运行安全得多。主页中会继续补充这类故障案例,本文仅供技术与风险教育参考。

温馨提示:投资有风险,选择需谨慎。
-
一家坚守19年的财商教育平台,如何重塑投资服务的“靠谱”底色
2026-06-29 13:08
-
REITs打新:⌈华泰三峡新能源REIT⌋ 和 ⌈创金合信北京国资公司REIT⌋ 本周发售!
2026-06-29 13:08
-
券商客户经理是做什么的?为什么建议你理财投资前找一位?
2026-06-29 13:08


问一问

+微信
分享该文章
