以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  为什么这三句代码不能正确执行  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=100670)

--  作者:NatalieGuan
--  发布时间:2016/7/11 10:44:19
--  为什么这三句代码不能正确执行
tbuy(1,1,lmt,stkindi(HY1,\'Formula3.bprice\',0,0)+0.2,0,\'\',HY1);
tsell(TISREMAINex(1,\'\',HY1)=0,1,mkt,0,0,\'\',HY2);
TCANCELEX(TISREMAINex(1,\'\',HY1),1,\'612808\',HY1);

预期代码效果是:若HY1成交,则平一手HY2,若未成交,则撤单
执行结果是:HY1在未成交的情况下HY2就会平,而且这种情况似乎只出现在tsell的时候,我将tsell改为tbuy的话似乎就可以按照预期执行了(即HY1成交时才执行开仓HY2)

--  作者:wenarm
--  发布时间:2016/7/11 10:53:57
--  

你是通过什么方式判断,有未成交单是,有平仓动作?

使用debugfile 打印输出下你的条件。


--  作者:NatalieGuan
--  发布时间:2016/7/11 10:59:22
--  
就是上一笔委托单是否未成交那个函数,我以为它会在每一次执行的时候检查是否上一笔委托单是否成交(即限价单是否成交)
--  作者:yukizzc
--  发布时间:2016/7/11 11:07:47
--  

你看下交易日志,是同一时刻tbuy了然后马上tsell

还是过了几秒,下一次轮询时候再执行tsell.

另外用debugfile输出下TISREMAINex(1,\'\',HY1)  看下输出值是多少


--  作者:NatalieGuan
--  发布时间:2016/7/11 11:30:58
--  
1.是tbuy下一次轮询的时候再执行tsell
2.TISREMAINex(1,\'\',HY1)  之前检查过,有未成交单的时候为1,没有未成交单的时候为0
3.我发现问题可能在于,它每一次轮询的时候并不都执行第一个tbuy,反而可能tbuy之后过了两个轮询的时候由于已经撤单,显示没有未成交单的时候执行了一次tsell,但是也仅此一次,不会在每次显示没有未成交单的时候都执行
另外我怀疑,系统判断是否上一笔委托未成交的时候,是首先判断是否有开仓动作,然后判断未成交委托中是否有相应的单,若两者皆是则判断上一笔委托未成交,若有开仓动作且未成交委托中没有相应的单,则判断成交。然而,如果我已经撤单了,那么系统会发现有开仓动作,未成交委托中没有相应的单,因此判断为上一笔委托成交了,这就变成了一个bug

--  作者:NatalieGuan
--  发布时间:2016/7/11 11:33:01
--  
是tbuy下两次以上的轮询的时候再执行tsell
--  作者:NatalieGuan
--  发布时间:2016/7/11 11:35:10
--  
或者也不能说是bug,当我撤单了以后,系统就不认为这是上一笔委托了,而是认为上上一笔委托才是上一笔委托
--  作者:yukizzc
--  发布时间:2016/7/11 13:35:12
--  

或者你直接走vba,对报单的id做监控,这样去跟踪单子情况