319行代码为 :
sellshort(1,holding,limitr,dgfkp),ORDERQUEUE;
这个ORDERQUEUE并没延迟2秒"在54秒"时刻发单而是同在"52秒"这个时刻发单!为什么不起作用呢?
日记如下:
2020-04-27 09:40:52.147 【图表】框架:zh 触发下单 BUYSHORT 品种 IC00 下单K线 2020.04.27 09:41:00 公式:0422 窗格ID:Window5 代码行:116
2020-04-27 09:40:52.147 【图表】模型下单 1
2020-04-27 09:40:52.147 【图表】下单系数调整后 手数:1
2020-04-27 09:40:52.147 【图表】直接下单
2020-04-27 09:40:52.147 【图表】框架:zh 触发下单 SELLSHORT 品种 IC00 下单K线 2020.04.27 09:41:00 公式:0422 窗格ID:Window5 代码行:319
2020-04-27 09:40:52.163 【图表】模型下单 1
2020-04-27 09:40:52.163 【图表】下单系数调整后 手数:1
2020-04-27 09:40:52.163 【图表】实际持仓 0
2020-04-27 09:40:52.163 【图表】至队列下单
2020-04-27 09:40:52.163 【图表】IC00 运行完毕
2020-04-27 09:40:52.163 【下单】IC05 价5205.200195 量1 买卖1 类型0 开平0 账户636275 Formula 1
2020-04-27 09:40:52.163 【下单】已提交,订单ID :-735537445
2020-04-27 09:40:52.163 【队列】当前队列准备处理数据:1条
2020-04-27 09:40:52.163 【队列】发送下单指令
2020-04-27 09:40:52.163 【下单】实际持仓为0下单失败
2020-04-27 09:40:52.163 【队列】下单失败了
2020-04-27 09:40:52.241 【指令】收到回报指令 ID = -735537445
2020-04-27 09:40:52.241 【回报】636275 : IC05 - 已报单 1 价格:5205.2 开 卖
2020-04-27 09:40:52.256 【指令】收到Order回报指令 ID = -735537445 Status = 3
2020-04-27 09:40:52.272 【指令】收到成交回报指令 ORDERID = -735537445
2020-04-27 09:40:52.272 【回报】636275 : IC2005 - 已成交 1 价格:5207.6 开 卖
2020-04-27 09:40:52.288 【回报】636275 : IC2005 - 全部成交 1
这个函数的说明中有详细介绍
加上ORDERQUEUE后,可简单的描述为:触发条件时,软件会先发出平仓指令,待收到平仓指令回报后,再发出开多指令。
详细的运行机制为:SELLSHORT、BUY单子形成了下单队列,SELLSHORT在前,BUY在后,当SELLSHORT单碰到有几下情况时,才会执行BUY委托单。(1)收到成交回报;(2)下单失败;(3)撤单(一旦队列下单不成交撤单后,再次委托会将委托追单排到最后)。
其次,以上规则适用于ORDERQUEUE成对出现或本身只有1条交易指令的情况。
但当出现以下情况(反手)且只有一条语句添加了ORDERQUEUE时,运行机制略有不同。
SELLSHORT(CROSS(C,MA,(C5),1,MARKET);
BUY(CROSS(C,MA,(C5),1,MARKET),ORDERQUEUE;
条件触发时,软件会发出SELLSHORT指令,ORDERQUEUE所在的指令会隔2秒后(区别)再发出,此例即BUY