对接项目开工后,工程师问的第一个问题往往不是「怎么写」,而是「接什么」——直连交易所?走期货公司柜台?用加密交易所官方 API?这三条路的工程形态、认证方式、测试环境完全不同,选错一条,后面全部白干。
本篇把国内期货柜台、证券柜台、加密交易所、海外市场四条路分别讲透,最后给出对比表与对接注意点。
1. 什么是柜台:为什么国内期货不能直连交易所
1.1 柜台的定义
柜台(Trading Counter / Front System)是期货公司/券商内部部署的交易系统,所有客户委托必须经过它转发到交易所。它承担四件事:
- 转发:把客户的下单请求按交易所协议转发,把回报按客户协议推回。
- 资金管理:维护客户**保证金**、可用资金、手续费,按风控规则拒绝超资金订单。
- 风控底线:强平、追保、异常交易监控(自成交、撤单率超限等)。
- 结算:每日结算、生成结算单。
1.2 为什么必须经过柜台
- 监管要求:中国期货市场实行「一户一码、交易编码」制度,客户持仓挂在期货公司名下,交易所只认期货公司会员,不认个人客户(以官方规则为准)。想直接连上期所/CZCE/DCE/INE,你得先成为会员——普通公司和个人没有这条路。
- 资金安全:客户资金存放在期货公司**保证金**账户,由交易所结算会员统一对交易所结算。
- 风控责任:强平、追保是期货公司的法定义务,这个责任主体不会因为你技术好就豁免。
一句话:国内期货的「对接层」永远是柜台,交易所协议对软件公司是不可见的。 你能拿到的最底层接口就是柜台 API(如 CTP)。
2. 国内期货柜台格局
国内期货柜台市场基本被上期技术、恒生、易盛、金仕达等几家厂商瓜分,软件公司需要按期货公司实际部署的柜台来选择 API 对接(各柜台规格以官方文档为准)。
| 柜台 | 厂商 | 主流语言/API 形态 | 特点 |
|---|---|---|---|
| CTP(Comprehensive Transaction Platform) | 上期技术(上海期货信息技术有限公司) | C++(DLL 导出接口),另提供 CTPMini 精简版 | 市场占有率最高,事实标准;接口文档需要权限,二次开发语言以 C++/C#/Java 封装为主 |
| UFT / UFX | 恒生电子 | C++ 接口(UFT 为新一代低延迟柜台) | 券商/期货通用,机构客户常见;新柜台 UFT 主打低延迟 |
| 易盛 | 郑州易盛信息技术 | C++ / Java / Python 封装,外盘 STP 接口 | 内盘与外盘(海外期货)都有产品,外盘对接易盛是主流路径之一 |
| 信达 | 信达相关柜台系统 | 与 CTP 形态类似(以官方文档为准) | 部分期货公司采用,市场占比低于 CTP |
| 金仕达 | 金仕达软件 | C++ / Java | 券商、期货、黄金等多家金融机构使用,历史久 |
2.1 CTP 接口说明(重点)
CTP 是国内软件公司最常对接的接口,几个必须知道的点:
- 形态:C++ 编写的动态链接库(Windows
.dll/ Linux.so),导出CThostFtdcTraderApi(交易)与CThostFtdcMdApi(行情)两类对象。 - 调用方式:订阅请求 + 回调响应。请求函数如
ReqOrderInsert、ReqOrderAction(撤单),回报通过回调OnRspOrderInsert(请求响应)、OnRtnOrder(订单回报)、OnRtnTrade(成交回报)、OnRtnTradingAccount(资金变动)推给客户端。 - 线程模型:回调在 API 内部线程触发,客户端必须自己处理线程间通信(通常做法:回调里只入队,业务线程消费队列)。
- 认证:除了行情/交易登录,还需要 AppID + AuthCode 的认证信息(见第 7 节)。
- 开发语言:官方是 C++,业界常用 C++/C#/Java 的封装包(如 CTP 的 Python 封装)、以及开源方案;封装层务必与柜台版本严格对应,字段结构体以官方头文件为准。
3. 证券柜台
证券(A 股)对接与期货类似,必须经过券商柜台,主流格局如下(以官方文档为准):
| 柜台 | 厂商 | 说明 |
|---|---|---|
| UF2.0 / 恒生券商柜台 | 恒生电子 | 国内券商使用最广的柜台之一 |
| 金证柜台 | 金证股份 | 券商/基金/银行广泛部署 |
| 顶点柜台(VTOP) | 顶点软件 | 券商常用 |
| 极速柜台(LTS / 华锐等) | 上交所技术等 | 针对量化/机构客户的低延迟柜台,接口形态与普通柜台不同,通常需要单独开通权限 |
- 证券接口认证:一般基于柜台登录 + 交易密码/证书,部分机构柜台支持独立交易终端(如 LTS 有独立的极速交易接口)。
- 与期货的区别:A 股 T+1、涨跌停、无夜盘,柜台在 9:15-9:25 集合竞价与 9:30 后连续竞价的处理逻辑不同;撤单与改单规则也跟期货有差异(详见 04-交易接口与订单生命周期.md)。
- 股票期权:券商期权柜台通常也基于上述厂商(如上交所技术 LTS 支持期权),但接口与股票不完全相同。
4. 加密交易所:没有柜台概念
加密交易所(币安、OKX、Bybit 等)没有「柜台」这一层——交易所在同一套系统里同时扮演了撮合、清算、风控的角色,且对个人和公司开放官方 API 直连:
- 接口形态:REST(下单/查询)+ WebSocket(行情/账户推送),文档公开、有测试网(testnet)。
- 认证:API Key + Secret,请求用 HMAC SHA256 签名(详见第 7 节)。
- 特点:部署在海外云厂商,国内访问需自行评估网络连通性与合规性;无「交易编码」概念,资金直接在交易所账户内。
- 注意:各家限频规则、订单类型、回报字段差异很大,且经常升级、偶尔不兼容——对接层必须做好版本管理与灰度。
加密交易所没有柜台,意味着风控、对账、审计全都要客户端自己做——这正是 05-风控与资金管理.md 存在的原因。
💀 加密所没有柜台意味着风控对账审计全得自己做
加密交易所没有柜台,意味着风控、对账、审计全都要客户端自己做。 没有柜台的追保与强平兜底,风控失效的第一时间没有第二道防线,程序里每一个未做幂等的下单都可能在毫秒内变成不可逆损失。
5. 海外市场对接
5.1 盈透证券(Interactive Brokers)
- 接口形态:TWS API / IB API(Java/C++/C#/Python 客户端库),另有面向机构客户的 FIX 接入。
- 特点:一个账户覆盖全球多市场(美股/港股/期货/期权),接口文档公开,有官方测试账户(paper trading)。
- 适合:想一个接口接全球市场的软件公司;注意 IB 的限频(每 10 秒一条限制性消息的默认护栏)与订单类型映射。
5.2 CME 清算会员模式
- CME(芝加哥商品交易所)等海外期货交易所支持直接交易所接入(DMA),但前提是成为清算会员或通过清算会员/ISV 接入。
- 接口形态:FIX/FAST 协议,需要证书、专线或专用网络(如 Bloomberg 网络或交易所指定网络服务商)。
- 门槛:会员资质、资金门槛、技术认证都远高于接国内柜台;非会员机构通常通过券商/清算公司(如盈透、JPM 等)间接接入。
6. 直连 vs 走柜台:对比表
| 维度 | 国内柜台(CTP 等) | 加密交易所 API | 海外(IB / CME 清算会员) |
|---|---|---|---|
| 接入对象 | 期货公司柜台 | 交易所官方 API | IB / 清算会员 |
| 协议 | C++ DLL 私有二进制 | REST / WebSocket / 公网 | FIX/FAST / 专线 |
| 延迟 | 低(柜台侧约 1ms 级,受柜台与专线影响,具体以实测为准) | 低,取决于网络(跨境延迟是主要开销) | 极低(专线),但接入门槛高 |
| 成本 | 权限申请 + 柜台席位费用(以期货公司为准) | API 免费,测试网免费 | 会员费/清算费/软件认证费用 |
| 门槛 | 需通过期货公司开通,AppID 认证 | 注册账户 + 生成 API Key 即可 | 资金门槛 + 资质认证 |
| 风控归属 | 柜台有强平/追保/异常交易监控 | 只有交易所级别的底层风控 | 结算会员负责 |
| 客户风控 | 必须自建 | 必须自建 | 必须自建 |
结论:无论走哪条路,客户端自建风控都是必须的。 柜台/交易所的风控是「底线」而不是「护栏」(详见 05-风控与资金管理.md)。
⚠️ 柜台交易所的风控是底线不是护栏
无论走哪条路,客户端自建风控都是必须的。 柜台/交易所的风控是「底线」而不是「护栏」——柜台强平是期货公司的法定义务,交易所只认会员不认个人,任何依赖对方风控来保护自己的做法都会让你在第一层防线之前就被打掉。
7. 接口认证方式
7.1 国内柜台:AppID 认证 + 双登录
以 CTP 为例(其他柜台类似,以官方文档为准):
- AppID / AuthCode:期货公司为软件厂商分配的应用标识与授权码,登录前先发认证请求(
ReqAuthenticate),认证通过才能继续。 - 行情登录:
ReqUserLogin(行情),登录成功后订阅合约行情。 - 交易登录:
ReqUserLogin(交易),登录后校验投资者账户(ReqQryTradingAccount/ReqQryInvestorPosition)。 - 注意:认证信息与交易账号分离——程序用 AppID 认证,交易下单时绑定具体投资者账户。
7.2 加密交易所:API Key + HMAC 签名
- 在交易所后台生成 API Key(公钥)与 Secret(私钥),Secret 只在生成时显示一次。
- 每个请求携带:时间戳 + 参数串 + 签名;签名 = HMAC-SHA256(Secret, 待签字符串),具体拼接规则各家不同,以官方文档为准。
- 权限分离:API Key 支持「只读 / 现货交易 / 合约交易 / 提现」等独立权限,生产环境务必关闭提现权限。
- IP 白名单:把密钥绑定到服务器出口 IP,泄露后也无法从其他 IP 使用。
- 推荐的做法:每台生产机器一个专用 Key,权限最小化;定期轮换。
💀 密钥禁止入库禁止出现在日志与截图
生产环境 API 密钥泄露是交易系统最典型、后果最直接的安全事故。 曾有团队把含 Secret 的配置提交到公开代码仓库,几分钟内被自动化脚本扫描并洗劫账户资产。密钥禁止入库、禁止出现在日志与截图,生产密钥开启 IP 白名单、最小权限、定期轮换,泄露立即吊销并全量重置。
8. 模拟盘与测试环境
| 环境 | 用途 | 说明 |
|---|---|---|
| CTP 仿真(SimNow / 期货公司仿真柜台) | 国内期货联调与验证 | 行情与交易都是模拟撮合,规则近似实盘;需要向期货公司申请仿真账户与仿真 AppID |
| 加密 testnet(币安 Testnet / OKX Testnet / Bybit Testnet) | 加密接口联调 | 与生产 API 形态一致,行情为模拟数据;注意 testnet 偶尔有独立限频 |
| IB Paper Trading | IB 模拟盘 | 官方提供,账户余额虚拟 |
| 自建模拟柜台(Mock) | 回归测试/异常注入 | 按 CTP 回调语义模拟回报,可注入断线/拒单/乱序,用于单元与集成测试 |
铁律:生产账号永远不做联调。 联调只用仿真/测试环境,仿真环境的回报语义与实盘一致,但延迟、限频、撮合规则会有差异,上线前需要在试运行阶段重新验证。
9. 对接流程注意点
9.1 不同柜台协议差异
- CTP、恒生 UFT、易盛的请求/回报字段与行为细节不同(撤单能否撤部分成交、改单是否支持、回报顺序等),不要写死某一家:对接层之上抽象出统一的「订单模型」,柜台差异收拢到适配层。
- 加密交易所之间同样差异明显:币安以
orderId为唯一标识、OKX 有clientOid与ordId、订单状态枚举各不相同,适配层要逐家做映射。
9.2 编码问题:GBK 陷阱
- 国内柜台(CTP 等)的字符串字段(合约名、交易所、错误信息)是 GBK 编码,而现代开发环境是 UTF-8——不转码直接输出必然乱码,错误信息乱码会导致排查困难。
- 解决方案:柜台返回值统一按 GBK 解码后再进入系统;写入数据库前统一转 UTF-8;测试用例里加入中文合约名/错误码断言。
9.3 交易日与结算时间
- 期货夜盘归属下一交易日(如周五夜盘算下周一交易日),下单、持仓、对账的「日期」都要以**交易日(Trading Day)**为准,而不是自然日。
- 每日结算在收盘后(约 15:00 后)进行,结算期间部分柜台会短暂不可用或限制下单。
- 加密交易所 7×24 无休,但**资金费率**结算、合约交割、系统维护窗口会定时发生(以官方公告为准),监控要覆盖这些时间点。
9.4 其他工程注意点
- 连接保活:CTP 长时间无数据会触发心跳/超时机制,需要实现主动心跳与断线重连(详见 03-行情系统.md 与 04-交易接口与订单生命周期.md)。
- 日志时区:柜台返回的时间多为服务器本地时间/UTC 偏移,加密 API 一律 UTC 毫秒时间戳——系统内统一存储 UTC,展示时转本地时区。
- 文档索取:柜台 API 文档需通过与期货公司/券商的技术对接申请获得,签保密协议;加密文档直接读官方开发者文档。
风险提示
⚠️ 风险提示
生产环境 API 密钥泄露是交易系统最典型、后果最直接的安全事故:曾有团队把含 Secret 的配置提交到公开代码仓库,几分钟内被自动化脚本扫描并洗劫账户资产;也有团队因 IP 白名单未开启,泄露的 Key 被跨网络直接使用。请务必遵守:密钥禁止入库/禁止出现在日志与截图;生产密钥开启 IP 白名单、最小权限(只留交易、关闭提现)、定期轮换;泄露立即吊销并全量重置,同时排查该时间段内所有交易与资金流水。加密交易所在中国大陆的合规性问题请自行确认所在地法规。