以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  有关“后台对未成交委托单的处理”的难题  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=8836)

--  作者:阿火
--  发布时间:2011/11/6 11:20:29
--  有关“后台对未成交委托单的处理”的难题

比如:逐步买入的下单方法

首先买入5手,5秒后再买入5手,委托单10秒后不成交则撤单

假设2次委托都一直未成交,希望这样处理: 第一次委托在10秒后撤单,第二次委托也在15秒后撤单

这样有2个动作要做:

1,获取每一笔未成交委托单的委托时间 ,有了委托时间,自然可以计算委托单未成交秒数

2,可以针对其中任何某一笔委托单进行撤单,如果有多笔同方向的委托单,可以只撤销其中一笔

 

目前对委托单的处理函数里,有2个可以用tsubmit(1) 、tcancel  

可是tsubmit取的是最后一次未成交委托单的未成交时间

tcancel 撤单,也是撤销某个方向的所有单子,如tcancel(1,1)撤销所有未成交的开多委托单

 


--  作者:admin
--  发布时间:2011/11/7 8:52:01
--  
过于精细的控制,还是交给VBA来做吧
--  作者:董小球
--  发布时间:2011/11/7 9:08:12
--  

我觉得你可以监控当前总共未成交单数目然后 减去5手,就是你上次报单未成交单数目A,然后你根据最后一次未成交时间+5秒撤掉A手,然后根据最后一次未成交时间加10秒撤掉剩余的手数。

 

另外 不知道TTYPEBAR(A1,1); 不知道这个函数对你有没有用

我记得曾经我处理持仓时间超N分钟平仓 这个问题的时候用到过

代码如下:

××××××××××××××××××××××××

//运行在1分钟周期,可选用小于1分钟的时间轮询模式或者走完K线模式

//下列代码可以实现某笔交易开仓后,如果持仓时间达到3分钟则自动平仓,以控制风险;

 

//买持
A1:TBUYHOLDINGEX(\'\' ,\'ax01\' ,0 );
MC:TTYPEBAR(A1,1);

//如果持仓时间超过3分钟则平仓,这里为防止市价强平不成交,应配合交易设置中的“未成交则撤单报单”来使用
IF MC>=3 THEN BEGIN
 TSELL(1,1,MKT);
END
debugout(\'this is:%.2f\',mc);

//卖持
A2:=TSELLHOLDINGEX(\'\' ,\'ax01\' ,0 );
MC2:=TTYPEBAR(A2,1);
debugout(\'this is2:%.2f\',mc2);
//如果持仓时间超过3分钟则平仓,这里为防止市价强平不成交,应配合交易设置中的“未成交则撤单报单”来使用
IF MC2>=3 THEN BEGIN
 TSELLSHORT(1,1,MKT);
END

××××××××××××××××××××××××××××××××

 


--  作者:阿火
--  发布时间:2011/11/7 9:34:40
--  

tcancel函数只能撤单某个方向的全部委托单,不能撤单指定的某个委托单

 

order对象获取的未成交合约信息,缺少 “时间”啊

没有时间,怎么能够知道未成交的时间呢


--  作者:董小球
--  发布时间:2011/11/7 9:46:47
--  

我觉得 上次下单时间就可以当作未成交单开始的时间

 

关于撤单数量 目前不行就分成两个账户来操作吧 只能这样曲线解决了

看看以后能不能吧撤单函数加个数量的参数


--  作者:阿火
--  发布时间:2011/11/7 9:51:06
--  

OrderInfo2(Index, OrderID, ConSign, Filled, Remaining, Action, OrderType, LmtPrice, Account, Kaiping, Code, Market)

Index        输入参数,指定基于0索引的持仓和约信息,持仓和约总量参见 OrderNum2 属性。

OrderID      输出参数,未成交订单ID

ConSign      输出参数,本次委托数量

Filled       输出参数,已成交数量

Remaining    输出参数,未成交数量

Action       输出参数,动作类型 0买入 1卖出

OrderType    输出参数,订单类型 0限价 1市价 2停损 3市价停损

LmtPrice     输出参数,当OrderType等于0时为限价,为3时为停损限价

Account      输出参数,帐户信息

Kaiping      输出参数,开平仓类型 0开仓 1平仓

Code         输出参数,该持仓品种代码

Market       输出参数,该持仓品种市场

返回值:      成功返回1,失败返回0

 

 

看看,没有时间。要如何获得未成交合约的委托时间呢


--  作者:阿火
--  发布时间:2011/11/7 10:28:46
--  
以下是引用董小球在2011-11-7 9:46:47的发言:

我觉得 上次下单时间就可以当作未成交单开始的时间

 

关于撤单数量 目前不行就分成两个账户来操作吧 只能这样曲线解决了

看看以后能不能吧撤单函数加个数量的参数

上次的下单 可能是成交的,要的是未全部成交委托单的下单时间

也不是加个数量的参数。同一个委托单也不能分开撤单,只能一起撤单。是要撤销指定的委托单。

比如:cond1 买入5手  cond2 买入3手 cond3 买入4手   30秒内未成交则撤单 。

         cond1的委托单没全部成交而且符合撤单条件了,要撤单。目前的tcancel会把cond2、cond3的委托单也一起撤掉的

         而且目前的tsubmit获取的是最后一次未成交委托单的未成交时间。3次委托单的委托时间如果没有规律,3楼的方法也不适用

 

VBA可以轻松完成啦。只要增加一个获取“未成交委托单的委托时间”


--  作者:阿火
--  发布时间:2011/11/7 10:40:13
--  
或者开发一个方法获取指定ID的委托时间,如 Order.OrderTime(ID)