欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → orderstatus执行问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3051人关注过本帖树形打印复制链接

主题:orderstatus执行问题

美女呀,离线,留言给我吧!
NatalieGuan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
orderstatus执行问题  发帖心情 Post By:2016/8/10 11:18:07 [显示全部帖子]

我写了以下函数,本意是下单之后如果成交,则执行平仓动作,若未成交,则等待一定时间,中间若不符合我的交易条件则撤单,等待一定时间后不成交也撤单,但是运行的结果发现,只有触发了撤单条件(但其实已经成交几秒了)以后才会触发平仓动作,这是为什么?是因为不执行完这个函数就不能再触发一次orderstatus吗?
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
    application.msgout("调用成功!"&Code&":"&Status) 
   if Code=cizhuliheyue then
   application.MsgOut("次主力合约交易动向!")
   Select Case Status
     Case "Inactive" 
     tradeflag=1
    
     Case "Submitted" 
     tOrderTime=now()
     application.msgout("Submitted!") 
     tradeflag=0
     application.MsgOut("tradeflag="&tradeflag)
     exitflag=0
     
       Ms=0
       timeflag=Ms-waitingtime
       do while exitflag=0 and timeflag<0 
       
       Ms=DateDiff("s",CDate(tOrderTime),Cdate(now()))
       timeflag=Ms-waitingtime
       if kongzhiflag=1 then
       update=abs(Price-zhuliprice)-shedingjicha+(huandiannumber+plustick)*MinTick
       else
       update=abs(Price-zhuliprice)-shedingjicha-(huandiannumber+plustick)*MinTick
       end if
       if ((update<0 and kongzhiflag=1) or (update>0 and kongzhiflag=0)) and Remaining>0 then//等待时间之内设定撤单条件
       order.CancelOrder(OrderID) 

       huanyue_ts1.AddItem time()& cizhuliheyue&" 不符合条件,准备撤单  "&OrderID
       
       exit do
       end if
       application.msgout("Remaining="&Remaining)
       
      if Remaining=0  then//若成交,则exit
       exitflag=1
     
       exit do 
       end if
       
       loop
       
       application.MsgOut("exitflag1=")
       application.MsgOut(exitflag)
       
       if exitflag=0  then 
       huanyue_ts1.AddItem time()& cizhuliheyue&"委托超时, 准备撤单  "&OrderID
       order.CancelOrder(OrderID) 
  
       
     
       end if
  
    
    Case "Filled" 'then'(Status="Tradeing" and Filled>0) or Status="Filled" then
       application.msgout("成交了次主力合约!"&OrderID)
       if zhi<=0 then
       sellid=Order.buyshort(0, 1,zhuliprice-100,0,zhuliheyue,marketzhuli,"",0)
       huanyue_ts1.AddItem time()& zhuliheyue&" 自动发出移仓"&sellid&" 买入空仓指令  "&"价格为"&zhuliprice
       else
       sellid=Order.sell(0, 1,zhuliprice-100,0,zhuliheyue,marketzhuli,"",0)
       huanyue_ts1.AddItem time()& zhuliheyue&" 自动发出移仓"&sellid&" 卖出平仓指令  "&"价格为"&zhuliprice
       end if
       jiaoyicitemp=jiaoyicitemp+1 
       
     
       tradeflag=1
       
    
    case "Cancelled" 
    huanyue_ts1.AddItem time()& cizhuliheyue&"撤单成功  "&OrderID
    tradeflag=1
    CancelNum=CancelNum+1    
    End Select 
   
    end if
end sub
[此贴子已经被作者于2016-8-10 11:18:41编辑过]

 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 11:28:05 [显示全部帖子]

如图
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160810112543.png
图片点击可在新窗口打开查看
我设置的等待20秒。
其中第三行,是IC09成交以后才会触发的操作(实际上在这20秒之内就成交了),然而每次它都会在20秒时显示了第二行“撤单”才会触发第三行

 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 11:30:46 [显示全部帖子]

可是如果定时器的话我怎么在这一段等待时间内不断循环进行判断跟操作呢?


 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 11:32:23 [显示全部帖子]

我的逻辑是,如果submit以后,会触发这个函数,然后执行case submitted,但是如果这时候filled了,不是应该马上再触发这个函数,执行case filled吗?

 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 11:37:11 [显示全部帖子]

所以是因为,上一个orderstatus执行不完成,就不能触发下一个orderstatus吗?那我怎么随时判断这个单成交了没有呢?我试过用orderinfo里的remaining,也没有用
 if Remaining=0  then//若成交,则exit
       exitflag=1
     
       exit do 
       end if
就这个怎么改呢?

 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 13:28:37 [显示全部帖子]

在哪个函数里建立一个1秒定时器呢?

 回到顶部
美女呀,离线,留言给我吧!
NatalieGuan
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:117 积分:0 威望:0 精华:0 注册:2016/6/27 15:46:46
  发帖心情 Post By:2016/8/10 14:16:05 [显示全部帖子]

成功,非常感谢!

 回到顶部