
券商API接口延迟到底有多少
做股票和期货量化交易的人,最关心的问题之一就是券商API接口的延迟。这个数字直接决定了你的策略能不能赚钱,尤其是做高频和日内交易的。
先给一个笼统的答案。普通券商API接口的延迟,从你发出指令到交易所收到,大概在30毫秒到100毫秒之间。这个范围很宽,因为中间涉及多个环节。
延迟到底花在哪里了
你的交易程序发出一个下单请求,数据要经过这些地方:
你的程序到券商柜台系统。这段走网络,同城一般1到5毫秒,跨城可能10到30毫秒。
券商柜台系统处理。普通柜台处理一笔委托要5到20毫秒,极速柜台能压到1毫秒以内。
券商柜台到交易所。这段也是网络,同城1到3毫秒,跨城5到15毫秒。
交易所内部撮合。交易所本身延迟在微秒级别,可以忽略不计。
加起来,普通个人投资者用普通券商API,往返延迟50到150毫秒是常态。机构用极速柜台加托管机房,能压到1到10毫秒。

股票和期货的差别
股票和期货的API延迟不一样。
股票方面,普通券商柜台延迟在30到80毫秒。极速柜台,也就是常说的快速交易柜台,延迟在1到10毫秒。这个极速柜台不是每家券商都有,通常要资金量达到一定门槛才给开。
期货方面,国内主流是CTP接口。普通CTP柜台延迟在5到20毫秒。极速CTP,也叫二代CTP或者次席柜台,延迟能到1到5毫秒。期货公司一般把极速柜台留给高频客户。
延迟对策略的影响
延迟高一点,对你的策略有什么实际影响?
做趋势跟踪、日间波段,延迟几十毫秒完全没影响。你的持仓周期是几天到几周,进场晚50毫秒,价格差不了多少。
做日内短线,延迟就重要了。假设你一天交易20次,每次因为延迟多亏一个最小变动价位。螺纹钢一个点10块钱,20次就是200块。一个月20个交易日,4000块没了。
做高频和套利,延迟是生死线。两个市场价差出现,谁先抢到谁赚钱。你延迟50毫秒,别人延迟5毫秒,你永远抢不到。这种策略必须用极速柜台加托管。
怎么知道自己的延迟
你可以自己测。用你的程序记录发单时间,再用柜台回报的时间减去发单时间。这个差值是单向延迟。更准确的是用交易所的行情时间戳和你的委托时间戳对比,但普通投资者拿不到那么细的数据。
一个粗略的办法:在行情变化快的时段,观察你的委托成交价和当时盘口价的偏差。偏差大,说明延迟高。
降低延迟的实用办法
想降低券商API延迟,有几个方向。
换极速柜台。这是最直接的办法。股票找有极速柜台的券商,期货找有极速CTP的期货公司。代价是资金门槛和更高的手续费。
托管机房。把你的服务器放到交易所或者券商的机房里。物理距离缩短,网络延迟从几十毫秒降到1毫秒以内。托管费用一年几万到几十万不等。
优化程序。你的代码本身也要快。用C++而不是Python做核心交易逻辑,减少不必要的网络请求,用二进制协议代替文本协议。
选对网络线路。同城专线比公网快,BGP线路比单线稳定。这个找券商或期货公司谈,他们通常有合作机房。
延迟和滑点的关系
很多人只看接口延迟,忽略了滑点。滑点是你实际成交价和预期价的差。延迟高,滑点就大。
一个简单公式:滑点成本 = 延迟时间 × 价格波动速度。螺纹钢日内波动速度大概每毫秒0.5到2个最小变动价位。你延迟50毫秒,滑点可能25到100个点。一手螺纹钢就是250到1000块。
所以比起纠结接口延迟是30毫秒还是50毫秒,先算算你的滑点成本。滑点成本远大于接口费用的时候,就该升级硬件和通道了。
代码示例 测量委托延迟
用Python写一个简单的延迟测量逻辑,配合CTP接口使用:
import time
from ctp_api import TraderApi # 假设的CTP封装
class LatencyTracker:
def __init__(self):
self.send_time = 0
self.order_ref = 0
def send_order(self, instrument, price, volume):
self.send_time = time.perf_counter()
self.order_ref += 1
# 调用CTP下单接口
req = {
'InstrumentID': instrument,
'LimitPrice': price,
'VolumeTotalOriginal': volume,
'OrderRef': str(self.order_ref)
}
trader_api.req_order_insert(req, self.order_ref)
def on_rtn_order(self, order):
# 收到委托回报
recv_time = time.perf_counter()
latency_ms = (recv_time - self.send_time) * 1000
print(f'委托回报延迟: {latency_ms:.2f} 毫秒')
def on_rtn_trade(self, trade):
# 收到成交回报
recv_time = time.perf_counter()
latency_ms = (recv_time - self.send_time) * 1000
print(f'成交回报延迟: {latency_ms:.2f} 毫秒')
这段代码记录发单时刻,在收到委托回报和成交回报时计算差值。跑一段时间,你就能看到自己接口的真实延迟分布。
选择建议
股票量化,资金量小做日间波段,普通柜台够用,延迟50毫秒以内都能接受。做日内短线,找有极速柜台的券商,延迟压到10毫秒以内。做高频,必须托管加极速柜台,延迟1毫秒级别。
期货量化,普通CTP延迟10毫秒左右,做趋势和波段够用。日内短线选极速CTP,5毫秒以内。高频和套利,托管加极速CTP,1到2毫秒。
不要盲目追求最低延迟。先算清楚你的策略对延迟的敏感度。延迟从50毫秒降到5毫秒,接口和托管成本可能翻十倍。你的策略多赚的钱能不能覆盖这个成本,才是关键。
延迟是量化交易的基础设施,但不是唯一因素。策略逻辑、风控、资金管理,哪一样都比单纯追求低延迟重要。先把策略跑通,再根据实际滑点数据决定要不要花钱降延迟。