3. Broker生态概览

在构建多Broker适配层之前,必须先回答一个基础问题:我们究竟要适配哪些Broker?不同Broker在账户体系、行情推送、订单语义、协议栈和接入门槛上差异巨大,如果把它们简单抽象成“下单接口”,适配层会在真实交易场景中迅速崩塌。本节从Broker类型、API差异、接入方式、协议特点和选型考量五个维度建立全景认知。

一、主流Broker类型与业务定位

按业务定位,Broker大致可分为四类。第一类是零售互联网券商,如富途、老虎、盈透(IBKR)等,面向个人投资者,提供REST/WebSocket API,文档完善但权限分级严格。第二类是机构经纪商,如高盛、摩根士丹利的执行服务,通常通过FIX协议对接,强调低延迟和算法交易。第三类是加密货币交易所,如Binance、OKX、Coinbase,API风格统一但限频严格,且存在现货、合约、期权多套接口。第四类是国内券商,多通过CTP、恒生UFT、QMT等柜台系统接入,协议私有化程度高,需要专门的交易前置。

选型第一步不是比较API文档,而是明确业务场景:是个人量化、机构执行,还是跨市场套利?场景决定了必须支持的Broker集合,而非反过来。

二、API差异:从REST到FIX的谱系

Broker API的差异主要体现在四个维度:传输协议、消息格式、认证方式和推送机制。零售券商普遍采用REST+JSON做查询、WebSocket做行情推送,认证用+Secret或OAuth。机构经纪商则使用FIX 4.2/4.4,消息为Tag=Value文本,认证通过Logon消息携带SenderCompID和TargetCompID。加密货币交易所多为REST+WebSocket,但签名机制复杂,涉及HMAC、RSA或Ed25519。

下面是一段典型的FIX Logon消息与REST下单请求的对比,能直观看出协议差异:

# FIX Logon (Tag=Value)
8=FIX.4.4|9=...|35=A|49=CLIENT|56=BROKER|34=1|
52=20250101-09:30:00|98=0|108=30|141=Y|10=...

# REST下单 (JSON)
POST /v1/order
{
  "symbol": "AAPL",
  "side": "BUY",
  "type": "LIMIT",
  "price": 185.50,
  "qty": 100,
  "timeInForce": "DAY"
}

适配层的核心任务,就是把这两种截然不同的表达统一成内部订单模型。差异越大,适配层需要的“翻译”逻辑就越厚。

三、接入方式与协议特点

接入方式可分为直连、网关和托管三类。直连是客户端直接连接Broker API,延迟低但需要自行处理重连、限频和证书轮换。网关是在客户端与Broker之间加一层代理,统一鉴权、限流和日志,适合多账户场景。托管则是把策略部署在Broker或云厂商的托管环境,网络路径最短,但灵活性受限。

协议特点方面,REST适合请求-响应型操作,如查持仓、下单;WebSocket适合行情和订单状态推送;FIX适合高频、低延迟的机构场景;而国内CTP使用私有二进制协议,需通过C++或Python封装库接入。理解这些特点,才能在适配层中为不同Broker选择正确的连接策略。

Broker接入方式与协议谱系 直连 客户端 → Broker API 网关代理 统一鉴权/限流/日志 托管部署 策略运行在Broker侧 协议特点对比 REST/JSON 请求-响应,易调试 WebSocket 双向推送,低延迟 FIX 4.4 Tag=Value,机构标准 CTP私有协议 二进制,需封装库 适配层策略:REST做查询与下单,WebSocket做行情与回报,FIX做机构执行,CTP走专用前置。 统一抽象:连接管理、认证、限频、重连、订单模型映射。

四、选型考量与常见误区

选型时建议从六个维度打分:市场覆盖、API成熟度、限频与稳定性、成本结构、合规要求和技术栈匹配度。下表给出一个简化的评估清单,可直接用于团队内部评审。

维度 关键问题 权重建议
市场覆盖 是否覆盖目标交易所与品种? 高
API成熟度 文档、SDK、沙箱是否完善? 高
限频与稳定性 每秒请求上限、断线重连策略? 高
成本结构 佣金、数据费、API调用费? 中
合规要求 是否满足当地监管与审计? 高
技术栈匹配 是否支持Python/Java/Go? 中
常见误区一:只看下单接口,忽略行情与回报通道。很多Broker的下单和行情是两套独立鉴权,适配层必须分别管理。误区二:低估限频。加密货币交易所的权重限频在行情剧烈波动时会直接触发封禁,必须在适配层做令牌桶。误区三:把FIX当成REST用。FIX是会话制,需要心跳、序列号管理和断线恢复,不能简单封装成HTTP请求。

五、案例:一个跨市场适配场景

假设策略需要同时交易和加密货币。走IBKR的FIX接口,加密货币走Binance的REST+WebSocket。适配层需要做三件事:第一,定义统一的Order结构,包含symbol、side、type、price、qty、timeInForce;第二,为IBKR实现FIX会话管理,为Binance实现签名与限频;第三,统一订单状态机,把FIX的ExecType和Binance的orderStatus映射到内部状态。这个案例说明,Broker生态的差异最终会沉淀为适配层的映射表和连接管理器。

复盘来看,成功的适配层不是追求“一套代码适配所有Broker”,而是建立清晰的边界:连接层负责协议差异,映射层负责语义差异,业务层只面对统一接口。理解Broker生态的全貌,是设计这层边界的前提。