金字塔2.64专业版Orderqueue下单方式出现资金不足的问题。
基本情况:总资金可下4手,采用前台图表交易轮询方式,两个模型,其中A模型下单1手,B模型下单两手。
出错时的情形:A模型已持仓1手空单,B模型持仓2手空单。B模型在14:40平仓反手,结果平仓单未及时成交,需要追单,然后就出现资金不足,最终结果是平仓单成功,反手单没成功.
从交易日志看出在平仓单撤单并发出追单后(注1和注2两行),就认为第一条交易指令已完成,等待下单的队列中数据减少了一条(注3)
建议在追单成交后(注4的位置)才认定第一条交易指令完成,才招行下一条交易指令
顺祝金字塔越来越好
附:模型中的交易语句
hd1:=1*mindiff;
if islastbar then
begin
委托买:=c+hd1;
委托卖:=c-hd1;
SELL( (sellcond or exittime or dtexit)\HOLDING()>0,lot,limitr,委托卖),orderqueue ;
SELLSHORT((buycond or exittime or ktexit)\HOLDING()<0,lot,limitr, 委托买),orderqueue ;
BUY(buycond\HOLDING()=0 and entertime,lot,limitr,委托买),orderqueue ;
BUYSHORT(sellcond \HOLDING()=0 and entertime,lot,limitr, 委托卖),orderqueue;
end;
交易日志
2011-09-07 14:40:08.248 【图表】IF09 运行完毕
2011-09-07 14:40:08.249 【图表】触发下单 SHELLSHORT 品种 IF09
2011-09-07 14:40:08.250 【图表】分品种下单调整后,系数1
2011-09-07 14:40:08.252 【图表】模型下单 2
2011-09-07 14:40:08.253 【图表】下单系数调整后 手数:2
2011-09-07 14:40:08.255 【图表】实际持仓 -3
2011-09-07 14:40:08.256 【图表】至队列下单
2011-09-07 14:40:08.258 【图表】触发下单 BUY 品种 IF09
2011-09-07 14:40:08.260 【图表】分品种下单调整后,系数1
2011-09-07 14:40:08.261 【图表】模型下单 2
2011-09-07 14:40:08.263 【图表】下单系数调整后 手数:2
2011-09-07 14:40:08.264 【图表】至队列下单
2011-09-07 14:40:08.266 【图表】IF09 运行完毕
2011-09-07 14:40:08.267 【队列】当前队列准备处理数据:2条
2011-09-07 14:40:08.269 【队列】发送下单指令
2011-09-07 14:40:08.271 【下单】IF09 价2769.399902 量2 买卖0 类型0 开平2 账户60309168 Formula 1
2011-09-07 14:40:08.274 【队列】当前队列准备处理数据:2条
2011-09-07 14:40:08.275 【队列】当前有未处理队列,返回等待
2011-09-07 14:40:08.503 【回报】60309168 : IF1109 - 已报单 2 价格:2769.4 平 买
2011-09-07 14:40:09.262 【图表】IF09 运行完毕
......................
2011-09-07 14:40:14.332 【图表】IF09 运行完毕
2011-09-07 14:40:15.052 【追单】追单队列 撤单操作 订单号:-1329396273
2011-09-07 14:40:15.053 【追单】发送了首次追单下单指令到队列
2011-09-07 14:40:15.213 注1【回报】60309168 : IF1109 - 已撤单
2011-09-07 14:40:15.220 注2【下单】IF09 价2770.000000 量2 买卖0 类型0 开平1 账户60309168 Formula 1 i
2011-09-07 14:40:15.221 注3【队列】当前队列准备处理数据:1条
2011-09-07 14:40:15.222 【队列】发送下单指令
2011-09-07 14:40:15.223 【下单】IF09 价2769.399902 量2 买卖0 类型0 开平0 账户60309168 Formula 1
2011-09-07 14:40:15.225 【追单】撤单成功,发送追单指令
2011-09-07 14:40:15.264 【回报】60309168 : IF1109 - 已报单 2 价格:2770.0 平 买
2011-09-07 14:40:15.271 【回报】60309168 : IF1109 - 综合交易平台:资金不足
2011-09-07 14:40:15.346 【图表】IF09 运行完毕
2011-09-07 14:40:15.347 【图表】IF09 运行完毕
2011-09-07 14:40:16.022 【回报】60309168 : IF1109 - 已成交 1 价格:2770.0 平 买
2011-09-07 14:40:16.360 【图表】IF09 运行完毕
2011-09-07 14:40:16.361 【图表】IF09 运行完毕
2011-09-07 14:40:16.720 注4【回报】60309168 : IF1109 - 已成交 1 价格:2770.0 平 买
2011-09-07 14:40:17.374 【图表】IF09 运行完毕
2011-09-07 14:40:17.375 【图表】IF09 运行完毕
您好,这,不是BUG.ORDERQUEUE只是保证顺序下委托单,并不能保证顺序成交
orderqueue 顺序下单
功能描述:有A和B两个单子,A在队列前面,B紧跟A。只有当A单子有以下情况,才会下委托单B(1)收到成交回报;(2)下单失败;(3)撤单(一旦队列下单不成交撤单后,再次委托会将委托追单排到最后)。
学习了楼上的贴子,确实可以很好的避免出现问题,我准备用这个方式处理,谢谢!
另:
1 、tholding2是不是只有专业版才可以用,标准版用户仅仅为了实现满仓反手买一个专业版?
2、图表方式的虚拟持仓简洁好用,用tholding2还要考虑其受其它模型的影响,比如我就同时使用到两个模型,不能简单的使用tholding2=0来判断已成功平仓
3、orderqueue指令的最大作用就是在满仓反手的时候实现按序下单,如果追单时还是出现资金不足,这条指令等于是废了.
4、最根本的解决办法还是完善orderqueue的功能
有多个模型的话
就把多个模型合并为一个模型,然后一起下单呗
比如总共3手多单,A模型1手多单要反手,B模型持2手多单 那就是平仓2手。
按楼上的方案,问题解决,
非常感谢