别再为每个柜台重写下单层:StockSharp 把 CTP、QMT 与全球交易所收成统一 Connector

别再为每个柜台重写下单层:StockSharp 把 CTP、QMT 与全球交易所收成统一 Connector

别再为每个柜台重写下单层:StockSharp 把 CTP、QMT 与全球交易所收成统一 Connector

StockSharp 统一交易接口封面

说明:微信源页触发「环境异常 / 验证码」,无法直读原文。本文按题意(开源量化平台 StockSharp 统一交易接口),并基于官方仓库 StockSharp/StockSharp 中英文 README、StockSharp/Connectors(含 CTP / QMT 适配器说明)以及 官方文档 Connectors 章节 做工程向改写;版本口径以撰写时公开文档为准。本篇只讨论合法、自有账户下的行情订阅与下单编排,不涉及任何绕过风控、违规刷单或未授权接入。

做量化的人,痛点很少是「策略公式写不出来」,更多是:每个柜台、每家券商、每家交易所的协议都不一样。CTP 要自己扛前置地址、认证码、结算确认;MiniQMT / QMT 是另一套会话与委托字段;币安、OKX、IB 又是 REST + WebSocket 拼盘。策略层本来只想关心「订阅 K 线 → 算信号 → 下单 → 看成交」,结果 70% 的时间耗在适配层。

StockSharp(简称 S#)把这件事产品化了:用一套 C# API + MessageAdapter 连接器模型,把券商差异压到适配器里,策略与终端只面对统一的 Connector / 订阅 / 订单对象。连接器源码已拆到独立仓库 StockSharp/Connectors,核心平台与 Designer / Hydra / Terminal / Shell 仍在主仓。对国内期货 CTP、以及近年补上的 QMT,都能按同一套订阅与下单语义接入。


一、它解决什么:策略层只认 Connector,柜台差异下沉到 Adapter

Mermaid Diagram

官方文档的关键句可以翻译成工程语言:

概念 作用 你平时该碰哪一层
Connector 多连接聚合门面:订阅、下单、持仓、事件回调 策略与业务代码主要写这里
MessageAdapter 把某家柜台协议翻译成 StockSharp 消息模型 选现成连接器,或自己实现适配器
Subscription / DataType 描述「订什么数据」(K 线、Tick、盘口…) 与具体柜台字段解耦
Order / 异步 RegisterOrderAsync 统一委托对象与异步注册 策略信号出口

一个 Connector 上可以挂任意多个适配器,因此同一进程里可以同时连期货 CTP、股票 QMT、加密货币交易所——这正是源标题里「交易接口不用一条条自己啃」的工程含义:不是少接几家,而是少写几套领域模型。

统一 Connector 与多适配器

别再为每个柜台重写下单层:StockSharp 把 CTP、QMT 与全球交易所收成统一 Connector


二、产品地图:API、Designer、Hydra、Terminal、Shell 怎么分工

StockSharp 不是「只有一个 NuGet」。官方按场景拆了几块(均以公开 README 为准):

1. API:给 Visual Studio / .NET 开发者的免费 C# 库,从中低频到 HFT(DMA)都可以写。

2. Designer:可视化策略设计器 + 内置 C# 编辑器、指标与调试器,可连多交易所。

3. Hydra:行情自动下载与高压缩存储,支持多源、计划任务、实例间同步,以及导出 CSV / Excel / XML / DB。

4. Terminal:交易图表终端,支持多连接、图表点选下单、多种 K 线类型与成交量分布。

5. Shell:开源图形脚手架,可直接改 UI,跑回测统计、并行策略与定时启动。

对「只想写策略、不想养 UI」的人,API + Connector 就够;若还要可视化编排或批量落盘历史数据,再叠 Designer / Hydra。连接器名单极长:README 列出了 Binance、OKX、IB、CTP、QMT / MiniQMT(XtQuant)、FIX/FAST、大量 DEX / 数据商等——完整表以主仓 README 与 Connectors 仓目录为准,本文不逐条抄录以免过时。


三、最小可运行路径:订阅 1 分钟 K 线并按阴阳线反向下单

下面这段来自主仓中文 README 的官方示例(符号与类型名以公开文档为准;实盘前请换成你自己有权限的合约与账户,并先在仿真环境验证):

var connector = new Connector();
var security = connector.LookupById("AAPL@NASDAQ");

var subscription = new Subscription(
DataType.TimeFrame(TimeSpan.FromMinutes(1)),
security);

connector.CandleReceived += (sub, candle) =>
{
if (sub != subscription || candle.State != CandleStates.Finished)
return;

// 阳线买、阴线卖——仅作 API 形态演示,不是可上线的策略
var isGreen = candle.ClosePrice > candle.OpenPrice;

var order = new Order
{
Security = security,
Type = OrderTypes.Market,
Side = isGreen ? Sides.Buy : Sides.Sell,
Volume = 1
};

connector.RegisterOrder(order);
};

connector.Subscribe(subscription);
connector.Connect();

读这段时抓住三步即可:

1. 解析标的:LookupById("CODE@BOARD") 把业务符号映射到 Security。

2. 声明订阅:Subscription(DataType, Security),柜台差异不出现在策略分支里。

3. 事件驱动下单:等 CandleStates.Finished 再决策,避免用未收盘 K 线误触发。

文档还强调可用 AddAdapter<TAdapter>(...) 在代码里挂多个连接,例如:

connector.AddAdapter<BinanceMessageAdapter>(a =>
{
a.Key = "<Your API Key>";
a.Secret = "<Your Secret Key>";
});

// 可继续 AddAdapter<CtpMessageAdapter>(...) / QmtMessageAdapter 等

密钥只放本地配置或密钥库,不要写进仓库;示例里的占位符请原样保留。


四、国内柜台怎么接:CTP 与 QMT 适配器各自覆盖什么

Connectors 仓把柜台实现拆成独立项目。对国内读者最相关的两块:

1)CTP(上期技术)

公开 README / 源码注释表明,CTP 适配器面向国内期货公司常用的 Trader + Market Data 双前置:

  • 覆盖品种:期货 / 期权(以券商开通权限为准:上期所、大商所、郑商所、中金所、能源中心、广期所等)。
  • 行情:Level1、五档盘口、由成交量增量推导的 Tick。
  • 交易:限价 / 市价 / IOC / FAK / FOK / 止损,以及开平、平今、平昨等指令语义。
  • 账户:委托回报、成交、持仓、资金、保证金与手续费字段回传。
  • 刻意不做:标准 CTP 本身不提供历史 K 线——适配器也不会谎称支持;历史行情请走 Hydra 或其他数据源。

工程上要注意:打包桥接与原生库版本(文档示例口径为 CTP 6.7.11)与券商要求的 SDK 不能混用头文件/运行库;生产前置、AppId / AuthCode、流文件目录、断线续传模式都是券商侧约束,本地 Connected 只代表链路通,最终接受/拒绝以柜台回报为准。

2)QMT(含 MiniQMT / XtQuant 路线)

2026-07 起 Connectors 仓合入了 QMT 连接器(含 Python Gateway + C# QmtMessageAdapter)。公开能力摘要:

  • 覆盖:股票、期货、期权、债券、基金 / ETF、指数等(以 QMT 账户权限为准)。
  • 行情:Level1、Tick、盘口、K 线;并支持历史数据请求(便于画图与回测喂数)。
  • 交易与账户:委托工作流、组合 / 资金 / 持仓与执行状态更新。
  • 设计目标与 CTP 相同:柜台协议细节藏在适配器后,上层仍是 StockSharp 标准 API。

Mermaid Diagram

CTP 与 QMT 经适配器汇入同一事件流


五、实战建议:先仿真、再多连接、最后才谈 HFT

结合官方文档与连接器 README,落地时建议按这个顺序:

1. 先跑通单连接仿真:SimNow(CTP)或券商提供的 QMT 仿真;只验证订阅与下单事件闭环。

2. 把密钥与前置地址外置:Connector.Save() / Load() + IFileSystem(文档已标记无 IFileSystem 的序列化扩展为过时)。

3. 多连接时分适配器看状态:使用 ConnectedEx / ConnectionErrorEx 区分「哪一路断了」,避免整盘误判。

4. 订阅生命周期要订阅全:SubscriptionStarted → SubscriptionOnline → SubscriptionFailed / SubscriptionStopped。

5. 历史与实盘分流:CTP 实盘不指望原生历史 K;用 Hydra 或其他数据商喂回测,实盘只订阅实时流。

6. 异步下单优先:RegisterOrderAsync / CancelOrderAsync / EditOrderAsync,减少 UI 或策略线程被同步调用卡住。

7. 合规边界:仅使用你有权访问的账户与数据;量化系统的风控、报备、交易权限以券商与监管要求为准——框架帮你统一 API,不帮你越过合规。

排坑速记:适配器「支持某消息类型」≠ 你的账户一定有该权限;SubscriptionFailed 的第三个参数 isSubscribe 能区分订阅失败还是退订失败,排障时别混为一谈。


六、和「自己撸 SDK」比,StockSharp 值不值得上

维度 自研多柜台 SDK StockSharp Connector 模型
领域对象 每家一套 Order/Tick 结构 统一 Order / Security / Subscription
多市场 策略里写大量 if (venue) 多 Adapter 挂同一 Connector
可视化与落盘 自己做图表与存储 Designer / Terminal / Hydra 可选叠加
学习曲线 单柜台起步快 需熟悉消息模型与订阅生命周期
定制柜台 完全自控 可按文档实现自有 MessageAdapter
风险 协议细节全自己背 仍要理解柜台约束;框架不是风控替身

如果你已经绑定单一柜台、策略极简,自研 SDK 可能更轻。一旦出现「期货 + 股票 + 数字货币」或「同一策略要在仿真 / 实盘 / 多券商之间迁移」,统一 Connector 的收益会陡增——这也是源文强调「省事」的真实工程背景。


七、小结

StockSharp 的核心交付不是又一个行情 GUI,而是:把全球(含国内 CTP / QMT)交易与行情差异收敛到 MessageAdapter,让策略只与 Connector 对话。主仓提供 API 与配套应用,Connectors 仓持续增加柜台实现;你要做的是选对适配器、外置密钥、先仿真再实盘,并把订阅 / 下单事件当成一等公民来设计。

相关链接:


本文为技术学习笔记,不构成任何投资建议;交易有风险,接入前请仔细阅读券商协议与官方文档。

💻 配套实训环境与动手练习

本文涉及的相关技术指令、开发环境与工具链已内置在边学边练在线实验室中,无需繁琐安装配置,随时在浏览器中实践体验:

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

最新文章

热门文章

本栏目文章