
自动化交易专用下单接口的核心架构
自动化交易系统与交易所或经纪商之间的连接枢纽是专用下单接口。该接口承担报单、撤单、查询持仓与资金等指令的传输任务。股票与期货市场对接口的要求存在差异,股票市场以沪深交易所为例,采用二进制或STEP协议,期货市场以CTP、飞马、易盛等柜台为主。专用接口需要支持多线程并发,单账户每秒报单量可达数百笔。接口内部包含序列化模块、网络传输模块、会话管理模块以及风控前置模块。
// 期货CTP接口报单示例
void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {
if (pRspInfo && pRspInfo->ErrorID != 0) {
// 报单被拒绝,记录错误码
LogError(pRspInfo->ErrorMsg);
} else {
// 报单成功进入交易所队列
StoreOrderRef(pInputOrder->OrderRef);
}
}
股票市场专用接口特性
沪深A股程序化交易接口需通过券商柜台,常见的接口形式包括券商自研API、恒生电子UFT、金证股份的接口。这些接口通常要求预先分配交易单元,并设置流速控制。股票接口对撤单有严格限制,例如连续撤单次数过多会触发监管预警。自动化交易策略在股票端执行时,接口必须处理涨跌停板上的排队逻辑。专用接口提供委托队列查询功能,帮助策略判断前方挂单量。

股票接口的回报机制分为逐笔回报与批量回报。逐笔回报延迟低,适合高频策略。批量回报每秒推送一次,适合中低频策略。接口需要兼容上海与深圳两地的差异化字段,上海市场委托类型包含最优五档即时成交剩余撤销,深圳市场包含对手方最优价格。
# 股票接口撤单示例(伪代码)
def cancel_order(order_id):
req = CancelRequest(order_id=order_id, market='SH')
response = api.send(req)
if response.status == 'ACCEPTED':
return True
elif response.status == 'REJECTED':
# 检查是否因撤单过于频繁被拒
log_rejection(response.reason)
return False
期货市场专用接口特性
期货专用下单接口以CTP综合交易平台最为普及。CTP接口提供API与FIX两种协议。API方式使用C++动态库,支持Linux与Windows。FIX协议适合跨平台部署。期货接口需要处理保证金计算、平今平昨仓位区分、套利组合报单。自动化交易策略在期货端执行时,接口必须支持报单引用(OrderRef)与本地会话绑定。期货交易所对自成交有严格防范,专用接口应内置自成交检查逻辑。
期货接口的回报流包含报单回报、成交回报、错误回报。每个回报携带请求编号与本地委托号。自动化交易系统需要维护两个映射表:本地委托号到交易所委托号,以及交易所委托号到策略订单号。断线重连后,接口重新查询所有未成交委托,并重建映射表。
// 期货接口断线重连后查询未成交委托
void ReconnectAndQuery() {
if (reconnect_success) {
CThostFtdcQryOrderField qry;\n strcpy(qry.BrokerID, broker_id);
strcpy(qry.InvestorID, investor_id);
int ret = api->ReqQryOrder(&qry, ++request_id);
if (ret != 0) {
// 查询请求发送失败,重试
ScheduleRetry();
}
}
}
接口风控与性能调优
专用下单接口必须集成风控模块。风控规则包括单笔报单最大手数、每秒报单频率上限、账户最大持仓限额、禁止自成交。风控检查在接口发送前执行,检查不通过直接返回错误,不占用网络资源。性能调优目标为降低报单延迟。优化手段包括:使用共享内存队列传递报单指令,关闭Nagle算法,设置CPU亲和性绑定网卡中断,采用零拷贝技术。
股票接口的延迟主要来自券商柜台与交易所前置。期货接口的延迟来自CTP前置与交易所撮合。自动化交易系统应当将报单线程与行情接收线程分离,避免锁竞争。接口日志采用异步写入,禁止在报单路径中执行磁盘IO。
多市场接口统一管理
自动化交易系统需要同时对接股票与期货专用接口。统一管理模块提供抽象层,将股票接口的委托类型、期货接口的平今标志映射到策略层统一枚举。抽象层负责心跳维护,股票接口通常需要每30秒发送一次心跳,期货接口需要每60秒发送一次。心跳丢失后,接口状态变为不可用,策略停止报单。
统一管理模块还负责资金与持仓的归一化。股票持仓按股票代码聚合,期货持仓按合约与方向聚合。风险计算时,股票按市值计算,期货按保证金计算。接口事件通过发布订阅模式推送给策略模块。