
期货程序化交易的第一道门槛:CTP到底能给你什么数据
做期货程序化交易的人,绕不开CTP。它是上期技术的综合交易平台,几乎国内所有期货公司都把它当作标准接入方式。很多刚接触量化的朋友以为CTP就是个下单通道,实际上它提供的数据远比想象中丰富。把这些数据类型搞清楚,才知道自己的策略能拿到什么料、能做什么菜。
CTP接口返回的数据可以分成两大阵营:行情数据和交易数据。前者来自交易所的实时推送,后者来自你账户在期货公司的实时反馈。两套数据流各走各的通道,用途完全不同。
行情数据:市场在发生什么
行情数据是CTP订阅后从交易所转发过来的,描述的是盘面本身的状态。它包含几个细分类别。

Tick数据是最基础的行情颗粒。每笔Tick包含合约代码、最新价、买卖盘各五档的价和量、成交量、持仓量、最高价、最低价、开盘价、收盘价、结算价、涨跌停板价格、当日均价等字段。做高频和日内策略的人,眼睛基本长在Tick上。买卖五档的量价分布能让你看到盘口的薄厚,挂单撤单的节奏能反映短期多空力量的消长。
K线数据严格来说不是CTP直接推送的,而是交易者用Tick数据自行合成的。CTP本身只给Tick,不会直接给一根根蜡烛图。想用1分钟、5分钟、日线做策略,得自己在代码里按时间窗口聚合。这个细节很多新手不知道,以为接上CTP就有现成K线,结果跑起来发现根本没有。
委托队列数据是买卖盘五档之外的挂单明细,部分期货公司CTP柜台支持查询。它告诉你当前价位背后还有多少单子排着,对判断短期支撑压力有一定参考价值。这个数据的深度和刷新频率取决于柜台配置,不是所有CTP接入都能拿到。
成交明细数据记录的是每一笔撮合成交的价格、手数、买卖方向。它和Tick里的成交量字段是两回事,成交明细更细,能看到单笔成交的分布。日内炒单的人喜欢用它来判断大单动向和成交密集区。
交易数据:你的账户在发生什么
交易数据是CTP柜台对你账户操作的实时回报,属于私有数据流。它分几个关键类型。
账户资金数据包含可用资金、动态权益、保证金占用、手续费、平仓盈亏、持仓盈亏、风险度等。做资金管理的策略必须盯紧这些字段,尤其是风险度,它是期货公司风控的核心指标。风险度逼近100%意味着保证金快不够了,随时可能被强平。
持仓数据记录你当前持有的所有合约的多空方向、手数、开仓均价、持仓盈亏、今仓和昨仓的区分。上期所和能源中心有平今仓和平昨仓的区别,手续费不一样,策略里必须把今昨仓拆开处理,否则平仓顺序搞错会多交冤枉钱。
委托数据是你每一笔报单的状态反馈,包含报单编号、合约、方向、开平标志、价格、手数、报单状态(未成交、部分成交、全部成交、已撤单、拒单)。程序化交易里委托状态的管理是基本功,漏处理一个拒单或者部分成交,后续逻辑就可能乱套。
成交回报数据是委托真正成交后的确认信息,包含成交编号、成交价、成交量、买卖方向、开平标志。它和委托数据配合使用,才能完整追踪一笔单子从报出到成交的全过程。
两套数据流的关键差异
行情数据是广播式的,订阅哪个合约就推哪个合约,和你的账户无关。交易数据是私有式的,只反映你自己账户的动作。行情数据延迟要求高,交易数据更看重可靠性和顺序。程序化系统里通常要把这两条通道分开处理,行情线程负责策略信号,交易线程负责报单和回报管理,中间用队列解耦。
搞明白CTP能提供哪些数据,等于拿到了期货程序化交易的地图。行情数据告诉你市场在干什么,交易数据告诉你账户在干什么,两套信息合起来,策略才有完整的决策依据。
# 伪代码示意:CTP行情与交易数据回调的基本结构
class MySpi:
def OnRtnDepthMarketData(self, data):
# 行情Tick回调:更新最新价、买卖五档、成交量、持仓量
pass
def OnRtnTrade(self, trade):
# 成交回报回调:更新成交记录、持仓、资金
pass
def OnRtnOrder(self, order):
# 委托回报回调:更新委托状态
pass
def OnRspQryTradingAccount(self, account):
# 账户资金查询回报:可用资金、保证金、风险度
pass