一、响应函数
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:交易所未处理请求超过许可数”。
本文详细解释了CTP期货交易接口中的响应函数,如OnRspOrderInsert和OnRtnOrder,以及报单和撤单请求的校验流程。还涉及了订单状态更新、流控规则(包括报单和交易所API流控)等内容。
2759





