目前使用后台程序交易,大致是8-9秒钟的轮询。
程序是根据持仓量的查询结果计算下单手数并完成下单。
但是发生了好几次,下单成功且成交以后, 下一次轮询时返回的持仓数量和实际持仓数量不一致,导致了再一次的下单。
根据程序的逻辑应该是不会发生这种情况。 而且这种情况一天基本会发生一到2次, 不知是什么原因?
以下是查询持仓的语句:acstr是帐号变量。
tb:=tbuyholdingex(acstr,'',1);
ts:=tsellholdingex(acstr,'',1);
HOLD:=tb-ts;
照理说这个运行后hold应该是当前账户当前品种的实际持仓量。 可是会发生一个下单成交后, 下一次轮询查询持仓返回数不正确。
以下是今天的一个调试输出结果。 请不吝指教。
2011-09-05 10:14:47.771 28238 //帐号id
2011-09-05 10:14:47.771 HOLD=4 //持仓数
2011-09-05 10:14:47.771 tb=4 //多单持仓
2011-09-05 10:14:47.771 ts=0 //空单持仓
2011-09-05 10:14:47.801 P1=2 //应有仓位, 2多
2011-09-05 10:14:47.801 cutl=2 //平多数量
2011-09-05 10:14:47.802 cuts=0 //平空数量
2011-09-05 10:14:47.802 buyl=0 //买多数量
2011-09-05 10:14:47.802 buys=0 //买空数量
2011-09-05 10:14:56.768 28238 //帐号id
2011-09-05 10:14:56.768 HOLD=-1 //实际持仓数, 根据47秒的log,此处平2多已经成交, 实际持仓数是2多, 但是却返回了1空!
2011-09-05 10:14:56.769 tb=-1 //实际多单数, 根据47秒的log,此处平2多已经成交, 实际持仓数是2多, 但是却返回了-1!
2011-09-05 10:14:56.770 ts=0 //实际空单持仓数
2011-09-05 10:14:56.806 P1=2 //应有仓位, 2多
2011-09-05 10:14:56.806 cutl=0 //平多数量
2011-09-05 10:14:56.806 cuts=1 //根据错误的持仓数,此处又操作了平1空!
2011-09-05 10:14:56.807 buyl=2 //根据错误的持仓数,此处又操作了开2多!
2011-09-05 10:14:56.807 buys=0
不知以上的表达是否够清楚,能否找出问题所在!
你用的多帐户系统?
另外告知所用金字塔版本
使用的专业版v2.64. 目前使用多帐号系统对不同帐号进行下单。
请问需要怎样的交易记录?
上面描述的这段日志就是对应这儿的2笔交易, 47秒平了2多, 然后54秒又开了2多。
你自己记录的日志不能排除是你自身的BUG导致。
金字塔的完整下单记录需要手工开启记录。
交易菜单-》下单设置-》程序化交易-》记录下单日志
今天没有开启日志记录, 明天可以记录一下然后发出来,希望不要对下单造成影响。
另外这种情况不是每一次都发生, 基本的下单都正常。偶有这种情况发生, 仅根据调试的输出,目前确实无法确定哪里出的问题。
但是有一点确实是可以肯定,在出问题的时候, tb:=tbuyholdingex(acstr,'',1); 这句语句返回的数字确实是与我的实际持有多单数量不符合。