一、响应函数
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:交易所未处理请求超过许可数 ”。