CTP开发中有很多需要注意的小细节,稍有不慎就会出问题,不然,轻则表现与预期不符,重则程序崩溃影响策略盈利。本系列将容易遇到的坑列出来,以供开发时参考,如有疑义之处,欢迎指正。
三人行,必有我师焉。欢迎加入QQ群736174420,一起讨论交易CTP的使用!~
01
哪些报单状态是最终状态?
我们先来看CTP中有哪些报单状态:
/* 报单状态 */ ///全部成交 #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'
///未知 #define THOST_FTDC_OST_Unknown 'a'
///尚未触发 #define THOST_FTDC_OST_NotTouched 'b'
///已触发 #define THOST_FTDC_OST_Touched 'c' typedef char TThostFtdcOrderStatusType;
这其中的"全部成交","部分成交不在队列中",“未成交不在队列中”,“撤单”,"已触发"是最终的状态,不会再改变的,其中"已触发"是条件单特有的最终状态。关于条件单,可阅读此前关于条件单的文章:条件单 - 传送门http://mp.weixin.qq.com/s?__biz=MzAxOTQ2ODA3OA==&mid=2247483674&idx=1&sn=c64930e4a4981376ca90c2cc1086a765&chksm=9bc7db5bacb0524de7d2985d3365a42897dc17f95647b33b590c2ef293f83f4109f1d36f4976&scene=21#wechat_redirect
全部成交,对应的最终状态是"全部成交",部成部撤(部分成交,剩余部分撤单)以及全部撤单,对应的最终状态都是“撤单”。
"部分成交不在队列中"和“未成交不在队列中”,这二者是历史的产物,现在并不会置为这两种报单状态。CTP柜台中有一个自动挂起标志,是从上期所系统沿用过来的计。如果设置了该标志,那么客户断线时,他的未成交报单将被自动挂起,从而离开撮合队列,这时该报单的状态就是“未成交不在队列中”或"部分成交不在队列中"。已“自动挂起”的报单,可以撤单,也可以通过“激活”指令让报单重新进入队列。目前“自动挂起标志”设置为0,订单永远不会挂起。
02
市价单的报单价格可以任意填写么?
目前郑商所(CZCE)的市价类型报单,需要报单时将报单价格(LimitPrice)填为0,否则郑商所会拒绝报单,而其它交易所则无此规定,不过不排除它们未来也出台类似规则的可能。因此在报入市价报单时,最好将报单价格都填为0,以免将来需要修改。
03
快期等交易软件的行情,为什么与我从CTP收到的不一致?
快期3、博易大师等软件的行情数据,一般连接的是软件的开发商自建的行情来源,并不是直接从CTP前置订阅行情。它们的行情一般也无需登录交易账户即可查看(如下图1)。因此,SimNow快期并不是从SimNow的CTP行情前置订阅行情,二者的行情数据存在一定的差别,包括延时和具体量价数据。
图1 快期3中只查看行情而不登录交易账户
交易软件上的历史行情,分时数据,K线数据,期权希腊值(如Gamma)等,也都是从软件行情提供商获取的,这些也都是CTP还不支持的数据。
交易软件显示的现手、增仓等盘口数据,需从CTP推送的行情数据计算,计算方法可参阅文章:更新现手增仓等盘口数据 - 传送门https://blog.csdn.net/pjjing/article/details/103103992/
同时,有些交易软件上的组合套利合约行情中,包含最新价等CTP中缺少的量价信息,这其实是软件通过计算两个单腿合约之间的价差得到的,因此看上去有最新价等而且一直活跃跳动。
如果是需要在交易软件上查看SimNow的盘后7*24行情,则可以通过使用SimNow"无限易"软件查看。
04
UserID与InvestorID有何区别?
期货公司交易员为投资者下单时,或者使用"一对多"中继模式在中继中使用操作员为客户下单时,UserID为操作员代码,InverstorID为投资者代码。
投资者自己下单时,两者同为投资者代码。
因此如果是普通的用户,这二者可认为是同一个意思,都是表示交易账户。建议这两个字段在请求中遇到时都填写上有效值,以免发生请求被拒绝等情况。
05
银期转账里,业务功能码应该填什么?
银期功能是指银行账户和期货账户之间的交互,如出入金等。其业务功能码(TradeCode)见下表。
CTP银期转账业务功能码(TradeCode)
101001 银行发起转帐开户
101002 银行发起签约销户
101003 银行发起银行帐号变更
102001 银行发起银行资金转期货
102002 银行发起期货资金转银行
103001 银行发起冲正银行转期货
103002 银行发起冲正期货转银行
104001 银行发起查询资金帐户余额
104003 银行发起查询账户对应关系
104005 完成银行向期货公司发起验证期货投资账号密码交易,并可查询账户信息
104006 银行发起查询期货公司系统状态
105099 银行下传对帐明细文件
202001 期货发起银行资金转期货
202002 期货发起期货资金转银行
203001 期货发起冲正银行转期货
203002 期货发起冲正期货转银行
204002 期货发起查询银行余额
204004 期货发起个人客户查询银期直通车开通情况
204005 期货端发起查询转帐明细
204006 期货公司发起查询银行系统状态
204999 期货端发起查询客户平台当日流水
206001 期货发起银行资金转期货资金(入金)通知
206002 期货发起期货资金转银行资金(出金)通知
901001 个人开通银期直通车
901002 个人解除银期直通车
905001 平台发起期商签到
905002 平台发起期商签退
905003 期货发起同步密钥