CTPAPI哪些字段可以用来标识订单?

CTPAPI哪些字段可以用来标识订单?

小讲一段CTP各种单号(委托号、成交号等),交易系统就是一个订单系统,订单号是最基本的元素,CTP是一个大型交易系统,接入多家交易所,同时也支持多家期货公司共用一套系统,作为一个大型系统,面对的用户群也很广,银行、公/私募、生产企业、个人等等,个人相对好对付一点,其它那些就不简单了,不是你说啥账目就是啥账目,要一笔笔对账的,所以单号是极为重要的基准。
投资者对每一笔报单都会编一个号,一般为OrderRef字段,CTP对每一笔报单也有一个编号,是BrokerOrderSeq字段,交易所对每一笔订单也有一个编号,就是OrderSysID,这就是最基本的三个单号,可以在下面这张图里找三个号对应的地方。
从图中可以看出,这三个号不能单独使用,OrderRef要结合FrontID、SessionID一起才能唯一识别一笔订单,BrokerOrderSeq要结合BrokerID使用,但是现在比较少有期货公司共用一套系统,即使共用,你只要不是刚好在这些共用系统的期货公司都有账号在交易,就不需要判断BrokerID,OrderSysID要结合ExchangeID来使用,因为不同的交易所的OrderSysID是独立编号的,不同交易所的不同订单的单号可能会相同。
还有一个编号比较少有人用,就是OrderLocalID,这个编号的意思其实就相当于OrderRef,OrderRef是投资者对应CTP系统的,OrderLocalID是CTP系统对应交易所的,CTP系统相对于交易所也只是一个接入终端,通过交易所提供的API连接交易所,这个编号要结合TraderID、ExchangeID一起使用,这个应该不难理解。
以上4组编号都是可以唯一标识一笔订单的,依据每组编号的意思及自己的需要来定怎么去使用,这里不去细讲图上的流程,可以看往期发的一些文章去了解更多的细节,贴两篇比较相关的文章:
CTP开放平台(openctp)也提供了很多CTP技术资料:CTP技术资料
这4组编号中用的最多的是OrderRef、OrderSysID两组,其它两组可以用来定位成交单对应的委托单,但是不能直接用来撤单,而这两组编号是可以用来撤单的,所以大多数开发者都只是用这两组编号。
这几组编号只有OrderRef是投资者自己编号的,对于多策略交易的用户来说,仅一个自定义字段可能不太方便,因为有的需要标识是哪个策略的订单,虽然用户可以通过OrderRef建立跟策略的对应关系,但是如果还有别的字段可以用就比较方便了,有这样的字段吗?既然写篇文章了,答案当然是Yes。
在做TTS接口、中泰证券XTP接口、华鑫证券奇点接口等柜台接口的CTPAPI兼容动态库时,对CTPAPI的了解也更深了一层,目前TTS的CTPAPI已经完全支持上面的4组编号,通过vn.py、MT5CTP、TextTrader、快期V2、快期V3、交易开拓者、WonderTrader、鑫程序化交易系统等产品的充分测试,验证了TTS系统及其仿CTPAPI对CTP接口的兼容性。
之前的TTS系统CTPAPI只有OrderRef、OrderSysID两组编号,后面对接交易开拓者时遇到一些成交单处理问题,后来增加另两组机制后就可以完美工作了,需要用到另两组机制的可以下载新的TTS仿CTPAPI动态库,地址:CTP开放平台
除了OrderRef是投资者自己编号外,还有RequestID、IPAddress、MacAddress、InvestUnitID四个,这几个编号都可以在InputOrder结构体中赋值,CTP会原封不动拷贝到委托、成交结构体中,但是有的字段在成交结构体中没有,其实只有InvestUnitID在成交结构体中是有的,但是在成交结构体中这个字段在simnow中测试都是空值,所以成交单中一个都用不了,但是可以定位到委托单从而得到这几个字段的值。
通过观察,快期使用了MacAddress字段、RequestID字段,IPAddress字段可能也有终端用到,但是InvestUnitID这个字段基本不会被其它软件用到,它的含义是投资单元,其实也正是表示策略这类的意思,比如一个策略上设置了一部分资金,不就是InvestUnit的意思吗,所以如果需要标识订单来自哪个策略,可以使用InvestUnitID字段。这个字段也是CTP后来加上的,所以基本不会被其它终端软件污染。


所有评论 0
您需要登录后才可以回帖 登录 | 立即注册