CTP综合交易平台-开发后感
断断续续的一年时间,终于把这个对接期货交易平台的工作给做成了产品。以下是个人的吐槽。
1.文档
CTP是有好几个文档,但是作为一个软件开发指导,未免也太简陋了。
“综合交易平台API说明”,这个是它的API介绍了。但是缺少接口调用的上下文约定的描述,接口介绍也够简单的。
“综合交易平台交易API特别说明”与“综合交易平台API开发常见问题列表”看到这两个文档,总算能从字里行间看到部分的接口使用规范了。可是其中某些描述,比如:
“11. 综合交易平台能显示买卖价的深度行情吗? 比如说 10 档买卖价?
综合交易平台行情是从期货公司的远程席位获得,交易所分配给各期货公司的远程
席位能够取得数据,综合交易平台都能提供给期货公司的客户。 综合交易平台系统使
用期货公司的远程席位登录交易所系统,对交易及数据的操作权限完全来源于期货公
司。上期所也没有给我们提供任何市场之外的帮助或默许,但由于综合交易平台强大的
数据处理能力,为期货投资者提供上期所早已公开提供的无限深度行情数据也有了技术
上的可行性”。
再比如:
“32. 持仓查询记录中的昨持仓是今天开盘前的一个初始值,不会因为平昨或者平仓而减少。
当前时侯的昨持仓=总持仓-今持仓。YdPosition := Position - TodayPosition”。
我只能呵呵了。
2.报单状态
如果想获得报单的实时状态,就去找OnRtnOrder吧!
如果你想被弄的晕头转向,就去看看OnRtnOrder中关于那些状态的字段吧!
对于一个本来已经成熟的系统,如果要对接CTP,那是让人欲仙欲死的体验。
报单被发出去了吗?文档中这样描述:
“如用户报单录入ReqOrderInsert,马上会收到报单响应OnRspOrderInsert,说明交易系统已经收到报单。报单进入交易系统后,如果报单的交易状态发生变化,就会收到报单回报OnRtnOrder”。
你信以为真了吗?再看看特别说明吧!你大概会收获这样一段话:
“Thost 收到报单指令,如果没有通过参数校验,拒绝接受报单指令。用户就会收到 OnRspOrderInsert 消息,其中包含了错误编码和错误消息。 如果Thost接受了报单指令, 用户不会收到OnRspOrderInser, 而会收到OnRtnOrder, 用来更新委托状态”。
……
读完文档,你确定了报单的状态,感觉很清晰是吗?嘿嘿。。。你知道的这里也有几个坑的。
你肯定看到这样的描述了:
“
///全部成交 #define THOST_FTDC_OST_AllTraded '0'
///部分成交还在队列中 #define THOST_FTDC_OST_PartTradedQueueing '1'
///部分成交不在队列中 #define THOST_FTDC_OST_PartTradedNotQueueing '2'
///未成交还在队列中 #define THOST_FTDC_OST_NoTradeQueueing '3'
///未成交不在队列中 #define THOST_FTDC_OST_NoTradeNotQueueing '4'
///撤单 #define THOST_FTDC_OST_Canceled '5'
///未知,表示Thost已经接受用户的委托指令,还没有转发到交易所 #define THOST_FTDC_OST_Unknown 'a'
///尚未触发 #define THOST_FTDC_OST_NotTouched 'b'
”
但是这不是全部。是否在回调的返回结果的结构里看到下面的字段了。
///报单提交状态 TThostFtdcOrderSubmitStatusType OrderSubmitStatus;
对,去找找关于它的描述吧。或许反复多抓一些数据比文档更靠谱。
3.其它
至于结算单查询,持仓查询和资金查询这都是小儿科了,那个pRspInfo真是让人又爱又恨呐。偶尔一个空指针也不算什么了。
还有那个接收到不是本机发出订单的回报,我相信你肯定被它惊喜过。
好了,就这些。因为本次定的基调是吐槽,所以没有几个有用的信息。估计等我再整理下,写一个系统的介绍,希望能帮助一个刚开始开发Ctp程序的孩子少踩几个坑。