今天写一个关于QMT实际运用中的内容,这个是叮当目前遇到最多的共性问题,就是关于:为什么策略运行正常、有信号但是不发单?
今天叮当就给大家整理了几个QMT策略不发单的排查步骤,下次遇到类似的问题大家就可以先排查一下是否存在下面这些情形。
01
确认是在“策略交易”模块创建了策略并开始运行。在“策略开发”模块点“运行”是无法产生交易信号的;
02
确认“运行模式”切换到了“实盘”。在“模拟”模式下只会产生略信号,但不会往柜台(仿真柜台或生产柜台)发单;
上图中“实盘”与“模拟”二者并非交易中模拟盘与实盘的区别。
(1)实盘:对资金账号进行下单等操作;
(2)模拟:不对资金账号进行下单等操作,只记录信号
03
确认“策略交易”模块下的“策略信号”分页,如果有信号产生,确认“委托”分页的信息,注意左上角状态选“全部状态”,来源选“本终端”。如果勾选后仍没看到委托信息,则确认信号里的证券代码是否是“可以在iQuant交易”的代码,如果没有信号产生,查看策略代码,判断是否达到触发下单的条件或者时间(参考下述第4项)
如何判断是否是“可以在iQuant交易”的代码:在“交易”的下单面板入代码,有相应的盘口行情,则是可下单代码(之前有遇到过财哥下单代码是指数或者多打了一个0的情况,这些都是无法发单的)。
注意:
仿真环境只支深圳的国债逆回购,上海的不支持。
04
确认“策略周期”。除设置quicktrade=1或2的情况,策略只会在选定的周期的最后一个tick满足发单逻辑时触发下单指令,如果策略周期选择的是日线,则盘中没有发单。
注意:
只有passorder、algo_passorder、smart_algo_passorder这三个下单函数的参数里有quickTrade这一项可以设置。
如果策略周期选的时间很长,例如30m、60m、1d这种,建议设置quickTrade=1或2(具体选哪个,根据具体的需要进行选择)。
如果不设置的话,默认quickTrade=0,则只有本周期内最后一个tick满足发单条件才会触发发单语句,其他时候不发单。
对于于其他周期来说,quickTrade=0增加了发单难度,于是看起来可能就是一直都不发单,对于日线来说,quickTrade=0意味着只有15:00的行情满足条件才会发单并且此时发出去只会是废单。
上述所列3个函数之外的其他下单函数,例如order_lots、order_value,etc.,都是没有quickTrade这个参数可以设置的,相当于是quickTrade=0的情况。
05
查看“消息提醒”里有无异常信息。
查看位置:“交易”模块,下单面板旁边的分页。如果没有,界面左上角“操作”→“查看”→“操作提示”点击一下就有了,把“消息”列拉开看,可以看到有无异常发单信息。
06
策略在实盘模式下,调用下单后不下单的情况,简单总结一下,大致有以下解决方案:
1、不建议使用除passorder外的其他下单函数;
2、在passorder语句后边进行一次print,确保进行了调用;
3、查看策略信号栏,如果有策略信号,但是没有实际下单到账户,应该是选错了运行模式;
4、passorder的快速下单参数设置错误,关于快速下单的说明,可以参考QMT文档;
5、账号/仓位是否配置正确;
6、被柜台拒绝:在界面下方“消息提示”或“执行中任务”查看被拒原因。