一、响应函数
class CThostFtdcTraderSpi
{
///报单录入请求响应
void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报单操作请求响应
void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报单录入错误回报
void OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) {};
///报单操作错误回报
void OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) {};
///报单通知
void OnRtnOrder(CThostFtdcOrderField *pOrder) {};
///成交通知
void OnRtnTrade(CThostFtdcTradeField *pTrade) {};
///错误应答
void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
};
以上是 报单请求(ReqOrderInsert
)与撤单请求(ReqOrderAction
)可能涉及到的响应函数。
OnRsp
与OnRtn
的区别在于,OnRsp
响应只有发起请求的会话连接能收到,同一账户的所有在线的会话连接都能收到OnRtn
响应。
二、报单响应规则
1. 报单请求到达期货公司柜台,首先被柜台校验:
-
如果校验失败,柜台会给发起请求的会话连接一个附带错误信息的
OnRspOrderInsert
响应,并给该账户所有在线的会话连接一个附带错误信息的OnErrRtnOrderInsert
响应。 -
如果校验通过,将请求转发给交易所系统的同时,柜台会给该账户所有在线的会话连接一个
OnRtnOrder
响应。此时订单在发往交易所系统的途中,所以响应信息中的订单状态为THOST_FTDC_OST_Unknown
,且订单在交易所系统内唯一编号OrderSystemID
尚未生成,值为空。
2. 订单到达交易所系统后,再次被校验:
-
如果交易所系统校验失败,账户所有在线的会话连接都会收到一个
OnRtnOrder
响应,其中OrderSubmitStatus
值为THOST_FTDC_OSS_InsertRejected
,且OrderStatus
值为THOST_FTDC_OST_Canceled
,OrderStatusMsg
中是交易所系统返回的错误信息。 -
如果交易所系统校验通过,订单进入交易所的排队系统后,被按照价格优先、时间优先的原则撮合成交。
-
如果订单进入排队系统时未被撮合成交,账户所有在线的会话连接收到第二个
OnRtnOrder
响应,其中OrderStatus
值为THOST_FTDC_OST_NoTradeQueueing
,表示订单在排队中,是交易者见到的未成交单。响应信息中还会附带订单在交易所系统内的唯一编号OrderSysID
。此后,每次订单状态的变化,账户所有在线的会话连接都可以收到OnRtnOrder
响应,OrderStatus
反映了最新的订单状态。如果有成交发生,会伴随OnRtnTrade
响应。 -
如果订单进入排队系统时被撮合成交,将省略状态值为
THOST_FTDC_OST_NoTradeQueueing
的响应,第二个OnRtnOrder
响应中的OrderStatus
值为THOST_FTDC_OST_AllTraded
或者THOST_FTDC_OST_PartTradedQueueing
。
三、撤单响应规则
1. 与报单情况类似。撤单请求首先在期货公司柜台被校验:
-
如果校验失败,柜台会给发起请求的会话连接一个附带错误信息的
OnRspOrderAction
响应,并给账户所有在线的会话连接一个OnErrRtnOrderAction
响应。 -
如果校验通过,柜台将撤单请求转发给交易所系统。
2. 撤单请求到达交易所系统后,再次被校验:
-
如果交易所系统校验通过,则撤单成功,该账户的所有在线的会话连接可以收到一个
OnRtnOrder
响应,其中OrderSubmitStatus
值为THOST_FTDC_OSS_Accepted
,OrderStatus
为THOST_FTDC_OST_Canceled
,表示订单被正常撤销。 -
如果交易所系统校验失败,该账户所有在线的会话连接都可以收到一个附带错误信息的
OnErrRtnOrderAction
响应。
四、流控
1. 报单流控
报单流控是指用户在CTP系统报单(ReqOrderInsert
)、撤单(ReqOrderAction
)时每秒内允许的最大笔数。由期货公司通过在系统中配置相关参数实现限制的。
如果超过这个限制,API会通过OnRspOrderAction
提示:“CTP:下单频率限制”。
2. 交易所API流控
交易所API流控指CTP系统向交易所发送报单等请求的每秒最大允许数。该流控实际控制在交易所API端。
受到交易所流控后会触发OnRtnOrder
,报“CTP:交易所每秒发送请求数超过许可数”或者“CTP:交易所未处理请求超过许可数”。