土法炼钢兴趣小组的算法知识备份

【量化交易】市场结构:交易所、做市商、暗池、ECN

文章导航

分类入口
quant
标签入口
#market-structure#exchange#dark-pool#ecn#market-maker

目录

写一个能跑的策略不难,难的是知道把订单往哪儿发、什么时候发、用什么类型发。这件事在中国 A 股看起来不重要——只有上交所和深交所,撮合规则也基本一致;但一旦做美股、港股、加密、跨市场套利,你会立刻撞上一个工程上回避不开的问题:同一个标的,在不同的交易场所(Trading Venue)有不同的订单簿、不同的做市机制、不同的费率结构、甚至不同的”成交速度”。市场结构不是金融知识背景里的装饰,而是会直接决定策略 PnL 的工程变量。

举几个具体场景:

本篇要回答的核心问题是:站在量化工程师的视角,全球的交易场所长什么样?做市商、ECN、暗池在系统中各自承担什么角色?这些差异在策略选型、连接拓扑、回测和风控上会留下什么痕迹? 本文不会重复”什么是订单簿”这种入门叙述,默认读者已经知道限价单、市价单、买卖盘的基本概念;如果还不熟悉,建议先看 上一篇:量化交易工程导论

范围与边界

  • 本文覆盖证券、衍生品、加密三类资产的市场结构。
  • 监管讨论以美国 Reg NMS、欧盟 MiFID II 和中国《证券法》为主,不展开其他司法辖区。
  • 撮合引擎、行情系统的工程内部细节,不在本文展开,参见 《金融科技工程》交易所核心系统架构 与该系列后续文章。
  • 微观结构(Market Microstructure)相关的高频行为、订单簿动力学、价格冲击模型,留到 下一篇:市场微观结构
  • 本文不构成投资建议;文中提到的具体交易所、产品、做市商、暗池仅用于说明工程概念。

一、交易场所的类型

要把市场结构说清楚,先要把”交易场所”这个词拆开。日常说”去交易所下单”,背后可能指完全不同的实体:受证监会监管的证券交易所、商品期货交易所、银行间市场的电子撮合平台、券商内部的撮合系统、加密资产领域的中心化平台、链上的智能合约。它们在法律地位、风控强度、披露义务、撮合机制上都不一样。

1.1 证券交易所

证券交易所(Stock Exchange)是法律意义上的核心市场,承担集中竞价、公开披露、登记清算三大职能。中国的上海证券交易所与深圳证券交易所是典型代表,它们既是撮合机构,也通过中证登(中国证券登记结算有限责任公司)完成证券和资金的过户。在美国,同样地位的有纽约证券交易所(NYSE)和纳斯达克(Nasdaq),但美股的清算交给 NSCC 与 DTCC,交易所自身只负责撮合与披露。香港的港交所(HKEX)介于两者之间。

证券交易所的工程特点:

1.2 衍生品交易所

衍生品交易所(Derivatives Exchange)专门撮合期货、期权、互换等衍生品合约。芝加哥商品交易所集团(CME Group)下辖 CME、CBOT、NYMEX、COMEX 是全球最大的衍生品交易所,撮合系统是 CME Globex;中国的中金所(中国金融期货交易所)撮合股指期货与国债期货,大商所(大连商品交易所)、上期所(上海期货交易所)、郑商所(郑州商品交易所)撮合商品期货;港交所旗下的 HKEX Derivatives 撮合恒指期货与港股期权。

衍生品交易所与证券交易所的关键差异:

我认为,衍生品交易所对量化更友好的根本原因不在于”杠杆高”,而在于:它的市场结构是高度同质化的。一个 CME 的 ES 合约(E-mini S&P 500),全球流动性几乎都集中在 Globex 一个池子里,没有暗池、没有内部撮合、没有 PFOF。同一时刻、同一个价位上的所有人在抢同一个队列,这种结构可以让微观结构模型直接落地,而美股的微观结构模型必须先回答”我看到的 NBBO 真的是市场最优吗”。

1.3 加密资产交易所

加密资产交易所分两类:中心化交易所(CEX,Centralized Exchange)和去中心化交易所(DEX,Decentralized Exchange)。CEX 在工程结构上接近传统证券交易所——订单网关、撮合引擎、链下数据库、行情广播;区别在于资产托管在交易所自己的链上钱包里,且 7×24 不停盘。代表平台是 Binance(币安)、OKX、Coinbase、Bybit、Kraken。

DEX 是另一种范式。Uniswap、Curve、Balancer 这一类协议没有传统意义上的订单簿,而是以自动做市商(AMM,Automated Market Maker)的方式工作:流动性提供者把两种代币按一定比例存入资金池,合约依据 x * y = k 或更复杂的曲线(StableSwap、集中流动性 Concentrated Liquidity)来计算成交价格。dYdX v3 和 GMX 是混合形态——前者用链下订单簿、链上结算,后者用预言机喂价的资金池模型;dYdX v4 已迁移到 Cosmos 上的独立链做完整链上撮合。

CEX 与 DEX 的差异在第五节会详细展开,这里只先点出市场结构层面的关键事实:整个加密市场天然是碎片化的。同一个 ETH/USDC,在数十个 CEX 和数百个链上池中并行报价,套利者承担把价格拉齐的角色,但是套利效率受跨链桥延迟、Gas 价格、CEX 的提币审核流程严重制约。这跟美股 Reg NMS 强制订单保护规则下”NBBO 必须被尊重”完全是两回事——加密市场没有 NBBO,没有强制订单保护,没有最优执行义务。

1.4 银行间市场与场外市场

很多人忽略一类规模巨大但和”交易所”概念不太一样的场所:银行间市场(Interbank Market)。中国银行间市场由中国外汇交易中心(CFETS)运营,撮合人民币利率、外汇、债券、衍生品。它的法律地位不是证券交易所,而是受人民银行监管的”金融基础设施”,参与者只有持牌金融机构(商业银行、券商、保险、基金)。其核心特征:

银行间市场之所以采用报价驱动而不是订单驱动,根源在于债券品种的高度异质性。一只国债和一只 AAA 公司债在风险、久期、税务上都不同,统一的限价订单簿很难形成深度。做市商通过各自的内部模型给出报价,然后通过 RFQ(Request for Quote)撮合。

类似的逻辑适用于全球外汇市场——EBS、Refinitiv FXall 撮合的是银行之间的大额头寸,零售外汇平台的报价是从这些一级市场批发再加价的二级报价。普通量化策略想接入银行间市场几乎不可能,但理解它的存在能帮你判断”为什么我看到的中证国债指数和某只可交易的国债 ETF 走势有偏差”——根本原因是底层资产在银行间撮合,ETF 通过申赎机制在交易所撮合,两者之间存在跟踪误差与流动性差异。

1.5 透明市场与暗池

最后一个分类维度是订单簿的透明度。透明市场(Lit Market)指交易所对外公开订单簿,行情向所有合规订阅者广播;上交所、Nasdaq、CME、Binance 现货都属于这一类。暗池(Dark Pool)则相反:订单不公开,成交后才向监管报告,行情向公众延迟披露或聚合披露。暗池的存在主要服务于机构大单,避免在透明市场上直接挂单引发的”信息泄露”和”价格冲击”。

下面这张图把上述四个维度组合起来,给出一个全球交易场所的简化分类。

全球交易场所分类与对比

图中左列是透明市场,按订单驱动 / 报价驱动再分两层;右列是非透明的 ECN/ATS 与暗池。这张图的关键信息是:A 股工程师看到的”交易所”是左上角那一格,但全球量化策略的可执行场所至少要覆盖整张图。一个跨市场套利策略可能同时连接 Nasdaq、Cboe BZX、IEX 三个 lit 场所和两个暗池,再加 Binance 现货和 Uniswap V3,连接拓扑的复杂度远超国内单市场策略。

1.6 工程视角的场所属性维度

把上面四类场所的分类抽象一层,从量化工程的视角,每个交易场所都可以用下面这组属性描述:

任何”我应该选哪个交易场所”的决策,都可以归约为”我的策略需要哪几个属性、哪个场所最匹配”。这种结构化思考可以避免新手量化做出”哪家成交额大就去哪”的过度简化判断。


二、订单驱动 vs 报价驱动

把交易场所往下拆,第二个关键维度是撮合机制。从二十世纪七十年代电子化交易普及以来,全世界的撮合机制归结成两类:订单驱动(Order-driven)报价驱动(Quote-driven),再加一个混合(Hybrid)。

2.1 订单驱动:价格 = 订单簿匹配

订单驱动机制下,所有买卖意图以限价单的形式进入订单簿,撮合引擎按”价格优先、时间优先”配对成交。撮合规则不依赖任何特定中介——任何人挂的单都按同样规则排队。

伪代码一行写明白:

def match_limit_buy(order_book, incoming_buy):
    while incoming_buy.qty > 0 and order_book.asks and order_book.asks.best_price() <= incoming_buy.price:
        ask = order_book.asks.front()  # 最低卖价队头
        traded = min(incoming_buy.qty, ask.qty)
        emit_trade(price=ask.price, qty=traded, taker=incoming_buy, maker=ask)
        incoming_buy.qty -= traded
        ask.qty -= traded
        if ask.qty == 0:
            order_book.asks.pop_front()
    if incoming_buy.qty > 0:
        order_book.bids.insert(incoming_buy)  # 剩余挂单

这是当今主流交易所的事实标准:上交所、深交所、中金所、CME、Nasdaq、HKEX、Binance 现货、OKX、Bybit、Coinbase Pro 全部是订单驱动。区别只在于具体的撮合细节,例如:

订单驱动的优势是透明、公平、可审计——撮合规则白纸黑字写在交易所规则里,谁排队靠前谁先成交。劣势是对流动性敏感——如果某只股票挂单稀薄,散户的市价单可能砸出很大滑点,没有人为这个标的兜底。

2.2 报价驱动:价格 = 做市商双边报价

报价驱动机制下,市场上有一个或几个被指定的”做市商(Market Maker)“,他们对每个标的同时报出买价(Bid)和卖价(Ask),其他参与者只能从做市商手里买、向做市商卖。买卖价差(Bid-Ask Spread)就是做市商的利润来源。

经典的报价驱动场所:

报价驱动机制的优势是做市商保证流动性——只要做市商不撤单,散户随时可以成交。劣势是信息不对称——做市商看到所有人的询价,可以利用信息优势调整报价;散户看到的”价格”只是当下做市商愿意提供的价格,未必是市场清算价。

2.3 混合机制:A 股集合竞价 + 连续竞价 vs NYSE DMM

实际上很多交易所并不是纯粹的订单驱动或纯粹的报价驱动,而是混合机制。两个典型代表:

A 股的集合竞价 + 连续竞价:本质上仍是订单驱动,但开盘和收盘的集合竞价段是”一次性多对多”,连续竞价段是”逐笔一对多”。集合竞价段的关键工程问题是:在 9:15-9:20 之间允许撤单,9:20-9:25 不允许撤单,9:25 一次性按”最大成交量”价格统一撮合,撮合后的剩余订单进入连续竞价段的订单簿。这条规则会被某些”虚假申报”策略利用——9:15 挂大单制造价格错觉,9:20 前撤掉。证监会对此有明确的”虚假申报”违规认定,2019 年至今多次开出罚单。

NYSE 的指定做市商(DMM,Designated Market Maker):NYSE 历史上是”专家(Specialist)“制度,每个上市股票指派一名专家负责维持市场流动性、撮合订单、应对异常波动。2008 年改革后改名为 DMM,职责被电子化、削弱,但仍保留”开盘集合竞价主持”“收盘集合竞价主持”“极端行情时维持双边报价”等核心功能。NYSE 的撮合系统(Pillar)以订单簿为主,DMM 仅在特定时刻和特定场景下行使报价义务。

我对混合机制的判断是:纯订单驱动是终局。从 NYSE 的 DMM 改革、Nasdaq 的 ELP 制度、A 股科创板做市的扩展来看,做市商的角色越来越像”市场的稳定器”而不是”市场的中介”,他们的存在不再决定价格的形成,而是降低短期流动性枯竭的概率。这背后的工程驱动力是撮合系统的电子化和延迟降到了微秒级——人工做市商根本来不及反应,必须用算法自动报价,那就和普通的电子做市没本质区别了。

2.4 集合竞价的工程细节

集合竞价的撮合伪代码值得单独看一下,因为它和连续竞价是完全不同的算法:

def call_auction(orders):
    """集合竞价撮合:找到使成交量最大化的均衡价格 p*。
    若多个价格的成交量相同,再以"未成交量最小""距离前收盘价最近"等次级规则定夺。"""
    # 价格档位枚举(实际系统会从最高买价到最低卖价之间扫描)
    candidate_prices = sorted({o.price for o in orders})

    best = None
    for p in candidate_prices:
        buy_qty = sum(o.qty for o in orders if o.side == 'buy' and o.price >= p)
        sell_qty = sum(o.qty for o in orders if o.side == 'sell' and o.price <= p)
        matched = min(buy_qty, sell_qty)
        unfilled = abs(buy_qty - sell_qty)
        if best is None or (matched, -unfilled) > (best['matched'], -best['unfilled']):
            best = {'price': p, 'matched': matched, 'unfilled': unfilled}

    return best['price'], best['matched']

关键工程含义有四点:

  1. 集合竞价产生单一价格,所有当时成交的订单都以这个价格成交,没有先后顺序的差别。
  2. 撮合是一次性的,意味着开盘瞬间会产生大量成交事件,行情系统的下游(订阅者、风控、清算)必须能在毫秒内吸收这个突发流量。
  3. 集合竞价价格是”未来价格”的强先行指标——9:25 的开盘集合竞价已经反映了夜盘隔夜信息,部分策略会在 9:15-9:20 段观测申报变化预测开盘价。
  4. 撤单规则不对称:A 股开盘集合竞价 9:15-9:20 可撤单、9:20-9:25 不可撤单,这五分钟内”挂大单制造价格幻觉再撤”的行为构成虚假申报。证监会从 2018 年起加大对此类违规的处罚力度。

2.5 三种机制的对比

维度 订单驱动 报价驱动 混合
价格形成 订单簿匹配 做市商报价 多源
流动性来源 全市场参与者 指定做市商 二者并存
信息透明度 高(订单簿全公开) 低(仅看到 RFQ 报价)
工程复杂度 撮合简单、风控复杂 撮合复杂(依赖 RFQ) 最高
典型场所 上交所、Nasdaq、CME、Binance 银行间债券、银行间 FX NYSE、LSE、新三板
散户友好度 低(只能从做市商买)

2.6 撮合优先级的细节差异

“价格优先、时间优先”是一个简化口径。实际不同场所的撮合优先级有微妙差异,对策略影响很大:

这些差异决定了”挂单策略”的最优形态。在 Pro-Rata 市场,策略会倾向挂极大数量以争取分配份额;在 Price-Time 市场,速度(多早进入队列)才是决定因素。同一个策略放在两种机制下,行为应当截然不同。


三、做市商的角色

无论是订单驱动还是报价驱动,做市商(Market Maker)都是真实存在且关键的市场参与者。区别只在于:报价驱动机制下做市商有强制报价义务,订单驱动机制下做市商可以选择参与或退出,但通过交易所的激励机制(费率返点、竞价义务)实质性地承担流动性供给职责。

3.1 做市商赚什么钱

做市商的核心商业模式是”赚价差”。具体说,是同时挂出买卖两边的限价单,等到双边都成交时锁定价差利润。这件事在工程上有几个关键点:

  1. 双边持续报价。市场永远不会同时给你两边吃单,做市商必须持续在两边都挂着单。
  2. 库存管理。如果先成交了卖单(库存减少),下一秒必须重新评估”我现在敢不敢继续在这个价位卖”。
  3. 逆向选择风险。市场上存在”知情交易者(Informed Trader)“——他们手里有信息,知道下一秒价格会涨,所以专挑做市商的卖单吃。做市商被吃单后再去买回来,要付更高的价格,这就亏了。做市商的报价宽度本质上是对逆向选择风险的补偿。
  4. 极短的反应时间。如果市场基准价格变了,做市商必须在毫秒级甚至微秒级把所有已挂的单撤掉重挂,否则就会被套利者吃掉。

经典的做市商盈利公式(Glosten-Milgrom 1985 模型的简化版):

做市商单笔成交期望利润
  = 价差 × 1/2
  - 逆向选择损失(被知情交易者吃单的概率 × 信息冲击大小)
  - 库存持有损失(持仓 × 持仓时间 × 价格波动)
  - 技术与基础设施成本

这个公式直接解释了为什么高频做市商集中在两类资产上:高流动性、低波动率——价差虽小,但成交频次极高,逆向选择风险有限;做市商必须在场内有最低延迟,否则会被竞争对手抢先调整报价。

3.2 DMM、ELP、SLP 的差别

美股的做市生态里有几个容易混淆的角色:

中国市场有自己的版本。新三板(全国中小企业股份转让系统)最早引入做市转让制度,做市商必须连续报价、不能撤单退出,做市商身份由证券公司持有;科创板在 2022 年引入做市制度,2024 年推广到部分主板股票,是个值得关注的趋势。沪深 ETF 的流动性供应商制度也属于做市商范畴,规则和股票做市略有差异。

3.3 做市商的工程画像

一个典型的电子做市商系统包括:

我对中国做市制度的判断是:A 股的做市生态在工程层面还远未成熟。新三板做市规模有限,科创板做市制度因为价差激励不足、做市商风控义务重,市场参与度不及预期。和美股、欧股的高频做市生态相比,国内的差距不在算法本身,而在配套:缺少类似 Reg NMS 的最优执行义务、缺少跨场所路由的监管支持、衍生品市场发展迟缓导致做市商无法对冲,这些都是结构性问题。

3.4 知情交易与逆向选择的量化

逆向选择是做市商最大的隐性成本。一个简化但很有用的模型是 Glosten-Milgrom:

均衡的最优买卖价差近似为:

spread ≈ 2 × μ × |E[V|信号] - mid|

其中 V 是真实价值。当 μ 上升(市场上知情交易者比例提高),价差必须扩大才能补偿做市商;反之 μ 接近 0(纯噪音市场),价差可以压到极窄。

这个模型有几个直接的工程推论:

3.5 做市商和高频交易的关系

一个常见的混淆是把”做市商”和”高频交易者”画等号。它们是有重叠但不等同的概念:

我对这个区分的工程意义判断是:做市策略对场所内部撮合规则(订单类型、撮合优先级、回档规则)极其敏感,套利策略对跨场所连接质量(延迟、丢包、行情完整性)极其敏感。这就解释了为什么 Citadel Securities 既是做市巨头也是高频套利巨头,但他们内部是两套独立的技术栈和团队。


四、ECN 与替代交易系统(ATS)

进入九十年代后期,纯粹的”交易所”概念开始松动。计算机网络让”撮合”不再需要交易大厅,一群机构组建的电子撮合网络也能完成同样的事,且常常更快、更便宜。这就是电子通讯网络(ECN,Electronic Communication Network)替代交易系统(ATS,Alternative Trading System)的起源。

4.1 从 Instinet 到 BATS / Cboe

ECN 的鼻祖是 1969 年成立的 Instinet,最初是给机构投资者绕过 NYSE 大厅、私下成对撮合的电子平台。九十年代中后期,受 SEC 1996 年的《订单处理规则(Order Handling Rules)》推动,Island、Archipelago、BRUT、ATTAIN、TradeBook、NexTrade 等几十家 ECN 雨后春笋涌现。它们的撮合规则比传统交易所更激进:

这些 ECN 后来要么被 Nasdaq 吞并(Island、BRUT),要么变成正式交易所(Archipelago 变成 NYSE Arca)。BATS(Better Alternative Trading System)于 2005 年从堪萨斯创业,2007 年获得交易所牌照,2017 年被 Cboe 收购,今天是 Cboe BZX、BYX、EDGA、EDGX 这四个交易所的合体。Cboe 加上 NYSE、Nasdaq、IEX、MEMX,构成了美股股票市场的主要 lit 场所。

ATS 是一个更广义的法律概念。SEC 的 Regulation ATS 在 1998 年生效,把所有”撮合证券但没有交易所牌照的电子平台”都纳入监管。ECN 是 ATS 的一种;暗池也是 ATS 的一种。两者的差别在于行情透明度和准入条件。

4.2 IEX 与 350 微秒的 speed bump

IEX(Investors Exchange)2012 年作为 ATS 上线、2016 年获得正式交易所牌照,是 Michael Lewis《Flash Boys》一书的主角之一。IEX 的核心创新是 speed bump(速度减速带):所有进入和离开 IEX 撮合引擎的订单数据,都要经过一根 38 英里长的盘绕光纤(Coil of Coil),人为引入 350 微秒的延迟。

这个设计要解决的问题是高频交易者的”延迟套利”:当一个机构投资者把大单切成小单分别发送到 NYSE、Nasdaq、BATS、IEX 时,市场上的高频做市商通过更低延迟的连接和更复杂的预测模型,可以在大单到达后续场所之前抢先撤单或反向交易。IEX 的 speed bump 让这种抢跑变得不可能——因为高频交易者收到 IEX 行情的时间也被延迟了 350 微秒,他们无法比”机构投资者的下一个子单”更快地到达 IEX 撮合引擎。

speed bump 不是没有代价的。批评者指出:

  1. 加重市场分散化:IEX 的 speed bump 让最佳报价不能被即时发现,违背 Reg NMS 的精神;SEC 经过激烈讨论后认定 350 微秒在”de minimis”(可忽略)阈值内,允许 IEX 称为交易所。
  2. 隔离做市商:做市商不愿在 IEX 上挂单,因为他们调整报价的延迟也被加了 350 微秒,相当于把自己暴露在 stale quote 风险下。
  3. 市占率有限:IEX 在美股股票市场的成交占比长期在 2-3% 之间。

我对 IEX 的工程评价是:它是一次有勇气的市场结构试验,但商业上未能成功。speed bump 的逻辑成立的前提是”机构投资者的大单切片速度比 350 微秒慢”,这个前提在 2016 年勉强成立,到了 2024 年的算法切片精度下已经不太成立。更根本的问题是 IEX 没有在产品层面对做市商提供足够激励,导致它的订单簿深度始终薄。一个工程教训是:改变市场结构的尝试,必须同时解决参与者的经济学激励,否则技术本身再优雅也会被市场冷处理。

4.3 暗池

暗池(Dark Pool)是不公开订单簿的 ATS。买卖双方通过暗池下单,撮合在内部完成,成交价格通常以 NBBO(National Best Bid and Offer)的中点(Midpoint)为基准。

暗池的核心价值是信息保护。一个机构想买 100 万股 AAPL,如果在 lit 市场直接挂限价买单,做市商会立刻看到买盘失衡、把卖价向上拉,最终成交均价高于市场原本的水平——这就是”市场冲击成本(Market Impact Cost)“。在暗池里挂单,做市商和其他参与者看不到,机构有机会以更接近中点的价格分批成交。

代表性暗池:

暗池的争议核心是信息披露。Barclays LX 在 2014 年因被 SEC 指控向客户隐瞒高频交易者在该暗池中的活动而被罚款 7000 万美元(SEC v. Barclays Capital Inc., 2016)。Credit Suisse 同年因类似问题被罚 8400 万美元。这些案例的共性是:暗池运营方对外宣称”只允许机构参与、屏蔽掠夺性交易”,实际上为了流动性默许甚至引入高频做市商,导致客户订单被对手方逆向选择。

我对暗池的工程结论是:暗池不是反高频交易的避风港,它只是一个信息更不对称的撮合场所。如果你做量化策略且预期单笔成交规模在 1000 股以下,进入暗池既得不到流动性也得不到中点撮合的好处;但如果你做大宗交易,暗池仍然是降低市场冲击的重要工具。判断标准是单笔订单规模与暗池内部对手方分布的匹配度。

4.4 暗池的撮合机制细节

暗池撮合远比”匿名挂单”复杂。常见的撮合机制:

不同暗池的”客户结构”差异很大。机构主导的暗池(Liquidnet、ITG POSIT)成交规模平均几万股;券商系暗池(Goldman Sigma X、UBS ATS)成交规模可能只有几百股,主要是做市商之间内部对冲。这种差异决定了”我能在这个暗池里成交什么样的单”,量化策略选择暗池前必须先理解客户结构。

4.5 ATS 注册与监管

美国 SEC 对 ATS 的监管在 2023 年大幅升级。Regulation ATS 修改后要求:

这些规则的工程后果是:暗池的”黑盒”程度被压缩,机构客户能更清楚地知道他们的订单在暗池里是怎么被对待的。但暗池总成交量并未显著下降——机构对降低市场冲击的需求是结构性的,不会因为披露义务消失。

4.6 ATS 与中国券商内部撮合的对比

对国内读者,理解 ATS 最直接的对照是问:A 股有没有类似的东西?答案是部分有、部分没有:

这种结构差异决定了,国内量化策略的”场所”维度被压平到几乎只剩一个,路由层面没有什么决策可做。从坏处看,少了一些跨场所的策略机会;从好处看,工程系统的复杂度大大降低,一个年轻量化团队可以把全部精力投入到信号生成和执行优化上。


五、加密资产市场结构

加密资产市场是当前全球最碎片化、最不受统一监管、又最容易接入的金融市场。从工程视角看,它把传统证券市场的所有结构问题都重新提出来一遍——交易场所、撮合机制、做市商、清算、监管——但答案完全不同。

5.1 CEX:撮合引擎复刻

中心化交易所(CEX)在工程结构上和传统证券交易所高度相似:

主流 CEX 的工程对比:

平台 撮合架构 行情协议 杠杆 衍生品
Binance 自研撮合,C++ WebSocket、FIX(仅机构) 现货 10x、合约 125x U/B 本位、期权
OKX 自研撮合 WebSocket、FIX 现货 10x、合约 100x U/B 本位、期权
Coinbase Trail(CCP-like) FIX、WebSocket 现货为主 Coinbase Derivatives 期货
Bybit 自研撮合 WebSocket、FIX 合约 100x U/B 本位、期权
Kraken 自研撮合 WebSocket、FIX、REST 现货 + 合约 期货、期权
Deribit 自研撮合 WebSocket、FIX 期权专精 期权、永续

CEX 的核心风险来自资产托管。FTX 在 2022 年 11 月的崩盘是教科书级的案例:用户资产名义上属于客户,实际上被混入交易所运营资金、用于关联方借贷,最终在挤兑下穿仓。这件事在传统证券市场不可能发生,因为客户证券强制在登记结算机构托管,不在券商资产负债表上;但在加密 CEX 这是结构性风险。

我的判断是:任何把”资产留在 CEX 钱包”作为长期假设的策略,都低估了 CEX 信用风险。这个风险的工程对策有三条:第一,把仓位拆到多家 CEX,避免单点失败;第二,定期把不参与策略的余额提到自托管钱包;第三,关注交易所的储备证明(Proof of Reserves)和审计报告,对储备低于负债的交易所要快速撤离。

5.2 DEX:AMM 与流动性池

去中心化交易所最具突破性的设计是 AMM。Uniswap V2 的恒定乘积公式:

x * y = k

xy 分别是池子里两种代币的数量,k 是常数。任何人都可以用一种代币换另一种,只要交易后池子里 x' * y' = k。手续费(V2 是 0.3%)从交易额里直接扣留在池子里,自动累积给流动性提供者。

Uniswap V3 引入”集中流动性(Concentrated Liquidity)“,允许 LP 把流动性集中在某个价格区间内,区间外不做市。这让相同资金的资本效率提高数百倍,但也让 LP 必须主动管理头寸。Curve 用 StableSwap 曲线优化稳定币之间的低滑点撮合;Balancer 支持任意权重的多代币池。

DEX 的工程特点:

下面这张图把 CEX 和 DEX 的结构对比直观地呈现:

加密资产 CEX 与 DEX 对比

图的左侧是 CEX 的链下撮合 + 链上结算结构,右侧是 DEX 的纯链上 AMM 结构。两者在用户资产托管、撮合机制、风险维度上完全不同。

5.3 跨链桥与流动性碎片化

加密市场的市场结构问题里最棘手的一个是流动性碎片化。同一个 ETH 在 Ethereum 主网、Arbitrum、Optimism、Base、zkSync、Polygon 上都有部署,跨链转移需要通过桥(Bridge)合约。每个链上的 Uniswap、Curve、PancakeSwap 都有独立的 ETH/USDC 池。

工程上要面对:

在这种结构下,加密市场的”NBBO”概念是不存在的——你看到的最优价取决于你愿意接受多大的桥延迟和桥风险。一个跨 CEX、跨 DEX 的套利策略,必须把”资金调度路径”作为一阶变量来建模,而不是像传统证券那样默认资金可以零延迟跨场所流动。

5.4 衍生品 DEX 与永续合约

链上永续合约是另一个独立的赛道。dYdX、GMX、Hyperliquid、Vertex 是代表项目,它们各自采用不同的技术路线:

这些项目的市场结构对量化策略意味着什么?

  1. dYdX、Hyperliquid 这类 CLOB DEX 可以直接用 CEX 类策略(限价单、市价单、IOC、FOK),但延迟和深度还远不及 Binance / OKX。
  2. GMX、Synthetix 类预言机 DEX 不存在订单簿,无法用做市策略,主要的 alpha 来源是”在预言机价格滞后于 CEX 的瞬间套利”。
  3. 链上永续合约的强平机制不同:CEX 通过破产保险基金兜底穿仓,DEX 通过提高强平惩罚或保险基金合约。极端行情下的差异显著。

我对加密衍生品 DEX 的判断是:接下来几年的格局取决于监管。如果 SEC、CFTC 把链上衍生品认定为非法的”零售商品衍生品”,dYdX、Hyperliquid 们将被迫地理屏蔽美国用户;如果获得豁免或新框架,它们对 CEX 衍生品市场的冲击将快速放大。这是一个高度政策依赖的市场结构问题。

5.5 流动性聚合器

加密市场的碎片化催生了独立的”聚合器”层。1inch、0x、Paraswap、Odos、Jupiter(Solana 生态)是主要玩家。它们的工作方式:

聚合器在工程上是一个”链上 SOR(智能订单路由)“——和 Reg NMS 下的美股 SOR 在职责上几乎一致,区别只是底层场所是合约而不是交易所。聚合器自己也存在被 MEV 攻击的风险,因此先进的聚合器(CowSwap、UniswapX)转向”意图驱动”模型——用户签名一个意图,由专业的”求解者(Solver)“在链下竞标后再上链,最大限度规避 MEV。

5.6 加密市场的 7×24 与传统假期套利

加密市场不停盘是一个常被忽略但重要的工程事实。它带来几个直接影响:


六、收费、返点与 Maker-Taker

讨论市场结构不能不讨论费率结构。交易所的费率政策直接塑造做市商行为,进而塑造市场流动性

6.1 Maker-Taker 模型

最经典的费率结构是 Maker-Taker

典型费率水平:

交易所 Maker Taker
Nasdaq Equity(标准等级) -0.0020 美元 / 股 +0.0030 美元 / 股
Cboe BZX -0.0020 美元 / 股 +0.0030 美元 / 股
IEX 0 +0.0009 美元 / 股
Binance 现货(VIP 0) 0.10% 0.10%
Binance 现货(VIP 9) -0.005% 0.020%
OKX 合约(VIP 0) 0.020% 0.050%
Coinbase Pro(VIP 0) 0.40% 0.60%

注意 IEX 不返佣,这是它和其他美股交易所的关键差异。

Maker-Taker 的政策意图是激励参与者主动提供流动性、惩罚消耗流动性的行为。在订单驱动的电子市场,这套机制把传统做市商赚价差的商业模式直接变成”在订单簿上挂单 + 收返佣”的可量化策略,催生了整个高频做市行业。

6.2 Taker-Maker(反向定价)

部分交易所采用反向定价:吃单返佣、挂单付费。代表是 Cboe EDGA、Nasdaq BX。这个模型的逻辑是:吸引激进的市价单流,因为这些订单流伴随着信息(机构急着进场),吸引到这种流之后,反而更容易吸引希望与之成交的做市商挂单。

工程上的影响是:在 Taker-Maker 场所,做市商挂限价单要付费,所以只在该场所价格足够偏离主市场时才挂;而吃单方愿意把订单路由到这里以拿返佣。最终结果是 Taker-Maker 场所的成交占比通常较小,但充当”价格发现的边缘场所”。

6.3 PFOF 与零佣金

支付订单流(PFOF,Payment for Order Flow)是另一种费率机制。在美股零售市场里,散户的订单很多并没有进入 Nasdaq 或 NYSE,而是被券商(如 Robinhood、E*Trade)直接卖给做市商(如 Citadel Securities、Virtu)执行。做市商付钱给券商,作为获取这些订单流的费用。

PFOF 的争议在于:

  1. 散户拿不到最优执行价:理论上做市商有最优执行义务,必须给散户至少和 NBBO 一样好的价格;实际是否做到,监管难以彻底审计。
  2. 做市商利用零售订单流:零售订单的”毒性”较低(不像机构订单那样反映信息),做市商更愿意吃这种单,赚价差。
  3. 零佣金模式的隐藏成本:Robinhood 等零佣金券商主要靠 PFOF 收入支撑。SEC 在 2022 年讨论过禁止 PFOF 的提案,但因利益相关方反对未通过。

中国市场没有 PFOF(被监管禁止),但券商内部撮合(“撮合优先权”)类似,部分券商会先在自己客户中撮合,无法撮合的再发到交易所。

6.4 等级费率与做市义务

主流 CEX 的费率不是单一值,而是按 30 天交易量分级。Binance 现货费率从 VIP 0 的 10 bps 一路降到 VIP 9 的 1.5 bps(taker),并把月成交额、BNB 持仓、做市指标作为分级输入。OKX、Bybit 类似。

这种费率结构的工程后果:

A 股没有 maker-taker,所有交易统一收佣金(券商收)和过户费、印花税(仅卖单)。这导致 A 股不存在”做市挂单收返佣”这条赚钱路径,做市策略在 A 股的盈利空间完全靠对中价的预测精度,几乎没有结构性补贴。

6.5 费率对策略选择交易场所的影响

对量化策略,费率不是一个可以忽略的常数项。一个简单的算式:

def net_pnl(gross_alpha_bps, maker_ratio, fee_maker_bps, fee_taker_bps):
    """
    gross_alpha_bps: 策略毛收益(基点,1bp = 0.01%)
    maker_ratio: 挂单成交占比
    fee_maker_bps: maker 费率(负值表示返佣)
    fee_taker_bps: taker 费率
    """
    avg_fee_bps = maker_ratio * fee_maker_bps + (1 - maker_ratio) * fee_taker_bps
    return gross_alpha_bps - avg_fee_bps

举一个具体例子:策略毛收益 5 bps,全部走 taker(市价单),Binance VIP 0 费率 10 bps,净收益 -5 bps,策略亏损;同样策略全部走 maker(挂单),费率 10 bps,仍然亏损;只有把交易频率降到 VIP 等级足够提升,或者把策略改造成 maker 占比 80% 以上,净收益才可能转正。

这就是为什么”做市类策略”和”趋势类策略”在加密市场的实际收益可以差出一个数量级——前者天然走 maker 收返佣,后者必然走 taker 付费。在跨场所套利里,费率的差异直接决定了”价差多大才值得套”,否则套到的价差全被手续费吃掉。

下面这段代码用 ccxt 库拉取多个加密交易所的同一标的行情,并在考虑费率的前提下评估跨场所套利的可行性。该代码可在 Python 3.10+、ccxt 4.x 环境下运行;运行时需要本机有访问交易所公共 API 的能力,无需 API Key(仅读取行情)。

import ccxt
import time

EXCHANGES = ['binance', 'okx', 'bybit', 'kraken']
SYMBOL = 'BTC/USDT'

# 简化的费率假设(taker,VIP 0),实际应从交易所页面或 fetchTradingFees 拉取
FEE_TAKER_BPS = {
    'binance': 10.0,
    'okx': 10.0,
    'bybit': 10.0,
    'kraken': 26.0,
}

def fetch_orderbook_top(ex_id):
    ex = getattr(ccxt, ex_id)({'enableRateLimit': True})
    book = ex.fetch_order_book(SYMBOL, limit=5)
    bid = book['bids'][0][0] if book['bids'] else None
    ask = book['asks'][0][0] if book['asks'] else None
    return bid, ask

def evaluate_arbitrage(quotes):
    # 在所有交易所组合里找出 buy-on-A / sell-on-B 的最优组合
    best = None
    for buy_ex, (bb, ba) in quotes.items():
        for sell_ex, (sb, sa) in quotes.items():
            if buy_ex == sell_ex or ba is None or sb is None:
                continue
            # 在 buy_ex 用 ask 买入,在 sell_ex 用 bid 卖出
            gross_bps = (sb - ba) / ba * 10000
            fee_bps = FEE_TAKER_BPS[buy_ex] + FEE_TAKER_BPS[sell_ex]
            net_bps = gross_bps - fee_bps
            if best is None or net_bps > best['net_bps']:
                best = {
                    'buy_ex': buy_ex, 'buy_price': ba,
                    'sell_ex': sell_ex, 'sell_price': sb,
                    'gross_bps': gross_bps, 'fee_bps': fee_bps,
                    'net_bps': net_bps,
                }
    return best

def main():
    quotes = {}
    for ex_id in EXCHANGES:
        try:
            bid, ask = fetch_orderbook_top(ex_id)
            quotes[ex_id] = (bid, ask)
            print(f'{ex_id:10s} bid={bid} ask={ask}')
        except Exception as e:
            print(f'{ex_id} failed: {e}')

    best = evaluate_arbitrage(quotes)
    if best:
        print('\n最优套利组合:')
        print(f"  在 {best['buy_ex']} @ {best['buy_price']} 买入")
        print(f"  在 {best['sell_ex']} @ {best['sell_price']} 卖出")
        print(f"  毛价差 {best['gross_bps']:.2f} bps,"
              f"手续费 {best['fee_bps']:.2f} bps,"
              f"净 {best['net_bps']:.2f} bps")
        if best['net_bps'] <= 0:
            print('  → 当前不存在净正套利空间')

if __name__ == '__main__':
    main()

这段代码忽略了三件真实世界里很重要的事:第一,跨交易所搬资产的时间和费用(链上转账、提币审核),它们会让”净 bps > 0”的套利机会缩水甚至变负;第二,订单簿的盘口深度,1 BTC 的报价和 100 BTC 的报价完全不同;第三,做市商在你下单的瞬间会重新报价,你看到的价格不一定能成交(latency arbitrage 的反面就是这个问题)。一个真正能跑的跨场所套利系统需要把这三件事都建模进去。

6.7 订单类型与场所差异

不同交易场所支持的订单类型差异,本身就是市场结构的一部分。一份非穷尽清单:

这些订单类型不是 cosmetic 装饰,而是直接的策略工具。一个做市策略如果场所不支持 Post-only,每次挂单都有概率被无意吃单变成 taker 付费——一年累积下来收益差距以”翻倍”计。一个执行策略如果场所不支持 Iceberg,挂大单时全部暴露盘口,会被高频对手方读到从而被针对。

A 股可用的订单类型相对有限:限价单、市价单(最优五档即时成交剩余撤销 / 转限价、本方 / 对手方最优、即时成交剩余撤销)。没有 Post-only、没有 Iceberg、没有 Pegged,做市和执行类策略的工具箱比海外简化很多。

6.8 隐藏成本:滑点与冲击成本

费率只是显性成本。真正吃掉策略 PnL 的往往是滑点(Slippage)市场冲击(Market Impact)

具体工程估算(在 lit 市场对中等流动性股票):

订单规模 / 日均成交量 临时冲击 bps 永久冲击 bps
0.1% 1-3 0.5-1
1% 5-15 2-5
5% 20-50 8-20
10%+ 50+ 20+

这就是为什么大单要拆。Almgren-Chriss、Bertsimas-Lo 这一类执行算法的工程目标都是”在限定时间内执行完,最小化期望冲击 + 时间风险”。VWAP / TWAP 是这一类思想的具体实现。


七、监管与市场结构

市场结构不是工程师拍脑袋设计的,而是监管和市场参与者长期博弈的产物。最核心的几个监管框架决定了今天的市场长什么样。

7.1 Reg NMS:美股市场的根法

Regulation NMS(National Market System)是 SEC 在 2005 年发布、2007 年实施的法规,是当今美股市场结构的根基。它有两条最关键的规则:

Reg NMS 的工程后果非常深远:

  1. 催生了智能订单路由(SOR,Smart Order Routing):券商和经纪商必须有能力把订单实时拆分、路由到多个交易所,并保证 NBBO 被遵守。
  2. 促进了 ECN 与新交易所的兴起:因为只要拿到交易所牌照,报价就被强制保护,新进入者的报价不会被忽视。
  3. 造成了延迟套利的存在土壤:交易所之间报价同步需要时间,谁能最快看到 NBBO 变化、最快撤单 / 反向交易,谁就能赚取这个延迟差。Michael Lewis 在《Flash Boys》里描写的”美国所有交易所的延迟差形成的套利机会”本质上是 Reg NMS 的结构性副产物。

7.2 MiFID II:欧盟的回应

MiFID II(Markets in Financial Instruments Directive II)是欧盟 2018 年生效的市场结构法规,针对的痛点和 Reg NMS 不太一样:

MiFID II 试图把更多交易拉回 lit 市场,让价格发现更集中。实际效果是混合的——暗池占比下降,但部分流动性转移到了”系统化内部撮合(Systematic Internalisers,SI)“,本质上还是非 lit 的形态。

7.3 SEC Reg SCI:交易所的工程合规

很多人忽略 Reg NMS 之外的另一项关键法规——Regulation SCI(Systems Compliance and Integrity),2014 年实施,针对所有”关键市场基础设施”(交易所、ATS、清算机构、SIP)的系统稳定性要求:

Reg SCI 在 2012 年 Knight Capital 事件、2010 年 Flash Crash、2013 年 Nasdaq SIP 故障这些事故的推动下出台。它对工程团队的直接影响是:交易所的代码部署不再是”上线一个补丁”那么简单,每次重大改动都要走完整的合规审查流程,这显著拉长了产品迭代周期,但也确实降低了系统级事故概率。

加密交易所没有等价的强制法规,这是为什么 Coinbase 的 Trail 撮合系统在牛市极端行情下发生过多次拥塞和宕机,而 Nasdaq INET 极少出现整体故障。

7.4 中国《证券法》与交易所规则

中国的市场结构主要由《证券法》(2019 年修订版)、《期货和衍生品法》(2022)、以及证监会、上交所、深交所的具体规则决定。和美欧最大的差异:

涨跌停、熔断、临停的工程影响在 7.5 节展开。

7.5 涨跌停、熔断、临停的工程影响

涨跌停、熔断、临停从工程角度看会带来若干特殊问题:

  1. 撮合状态机增加分支:撮合引擎要在”正常”“涨停只买”“跌停只卖”“临停”几种状态间切换,状态切换时要原子化处理在簿订单。
  2. 回测难以完整建模:策略回测要考虑涨跌停下”挂在涨停价的买单大概率成交不了,但跌停价的卖单几乎肯定立刻成交”这种不对称性。
  3. 风控触发:涨跌停接近时风控系统要主动介入,避免账户在涨跌停后被动持仓暴露。
  4. 新股不设涨跌停的前 5 日:注册制下新股上市前 5 日不设涨跌停,价格波动可达数倍。这段时期的策略风控参数需要单独配置——把涨跌停 ±20% 的策略直接套到无涨跌停的新股上,单笔损失可能远超日常风控阈值。
  5. 科创板盘中临停的策略影响:盘中价格首次涨跌 ±10% 触发 10 分钟临停,再次触发 ±20% 再次临停,复牌后通过集合竞价。这意味着策略在临停期间无法成交、无法撤单,仓位被强制冻结。任何高频策略都必须把”临停”作为状态机的一个分支处理,否则恢复交易瞬间的成交价格可能远偏离触发临停时的价格。

7.6 中国监管的工程画像

我对中国市场结构的工程评价是:A 股的”统一交易所 + 集中清算 + 严格管制”是一个非常清晰的工程模型,对量化系统的复杂度大大降低——你不需要 SOR、不需要 NBBO 计算、不需要管理暗池连接,但代价是失去了跨场所套利、做市返佣、暗池大单这些机会,且必须忍受 T+1 与涨跌停的硬约束。

这种简化的另一面是:A 股的策略空间会更卷。所有人面对同一个订单簿、同一套撮合规则、同一组流动性来源,alpha 的稀缺度远高于美股的多场所市场——美股可以靠”在 IEX 比 Nasdaq 慢 350 微秒”这种结构差异造出策略,A 股不存在这种结构差异。所以国内量化的核心竞争点更集中在因子开发、行情预测、订单执行优化,而不是”场所选型”或”延迟工程”。


八、量化策略对交易场所的偏好

最后回到工程视角的核心问题:作为量化工程师,怎么根据策略类型选择交易场所?

8.1 高频与低延迟的场地选择

如果策略对延迟敏感(毫秒级或更低),交易场所的选择决定了基础设施的边界:

延迟敏感的策略类型主要是做市、统计套利、跨场所延迟套利、基差套利。这些策略的工程瓶颈在 wire 上而不是策略逻辑里——把网卡延迟从 5 微秒压到 500 纳秒比把策略从 0.5 Sharpe 优化到 0.6 Sharpe 容易得多。

8.2 跨场所的连接拓扑

一个跨场所量化平台的连接拓扑大致是这样的:

                       策略服务器(FPGA / CPU pinning / DPDK)
                              |
            +-----------------+------------------+
            |                                    |
    ↓ 行情接入                                ↓ 订单出口
   订阅多个场所的 L2/L3                       多个场所的 OMS
            |                                    |
   +--------+---------+                +---------+----------+
   |        |         |                |         |          |
 CME     Nasdaq    IEX               Nasdaq    Cboe BZX    IEX
                                       |
                                       +--- 智能订单路由(SOR)

工程上要管的几件事:

  1. 时钟同步:每个场所有自己的时间戳,跨场所对齐必须用 PTP(IEEE 1588)或 GPS 同步,NTP 的毫秒级精度远远不够。
  2. 行情归一化:每家场所的行情字段、价差精度、单位都不同,本地要统一成一套数据结构。
  3. 订单状态机的多场所版本:同一笔母订单在多个场所有子单,子单的状态变化要 reduce 回母订单。
  4. 风控统一:多场所持仓必须实时合并,避免单场所看起来 0 持仓、合并后超限。
  5. 故障隔离:一个场所宕机不能拖垮整个策略,要能动态降级到剩余场所。

8.3 不同策略对场所偏好的判断框架

我对量化策略选择交易场所的判断框架是这样的:

策略类型 主要场所偏好 判断依据
做市(Market Making) 高流动性 lit + 主流费率有 maker rebate 需要持续挂单收返佣,必须低逆向选择风险
延迟套利(Latency Arb) 多 lit 场所 + 极低延迟接入 套利 alpha 来自场所间报价微小时间差
统计套利(Stat Arb) 主流 lit 场所即可 持仓周期长,对单场所延迟不敏感
趋势跟踪(Trend) 流动性最深的场所,单一即可 关心成交均价,不关心单笔速度
大单执行(VWAP / TWAP) lit + 暗池 + 内部撮合 主目标是降低市场冲击
跨市场套利(Cross-Asset Arb) 多类资产场所 + 跨币种 需要全场景接入,资金调度是瓶颈
加密做市 多 CEX + 部分 DEX CEX 流动性主要 + DEX 长尾资产对冲
MEV / 链上套利 仅 DEX,深入链上 工程聚焦在 mempool 监听与排序

这张表的关键含义是:策略选场所,不是一个简单的”哪家流动性大就去哪”的问题。策略本身的盈利模式决定了它对场所属性(流动性、延迟、费率、订单类型支持、监管要求)的需求向量,匹配最高的场所就是最优场所。一个做市策略和一个统计套利策略放在同一组交易场所,得到的实盘 PnL 可能天差地别——不是策略本身好坏,而是场所没选对。

8.4 一个具体的连接拓扑实现

下面给一个用 Python 做行情聚合和场所健康检查的代码片段。它演示如何同时订阅多个交易所的 WebSocket 行情,统一时间戳,构建合成订单簿。该代码可在 Python 3.10+、ccxt.pro 4.x 环境下运行,需要订阅 ccxt.pro 商业许可。

import asyncio
import ccxt.pro as ccxtpro
from collections import defaultdict
from dataclasses import dataclass
from typing import Dict, List, Optional

@dataclass
class Quote:
    venue: str
    bid: float
    ask: float
    bid_size: float
    ask_size: float
    ts_ns: int  # 本地接收时间,纳秒

class CompositeBook:
    """跨场所最优买卖盘的合成订单簿。"""
    def __init__(self):
        self.quotes: Dict[str, Quote] = {}

    def update(self, q: Quote):
        self.quotes[q.venue] = q

    def best_bid(self) -> Optional[Quote]:
        return max(self.quotes.values(), key=lambda q: q.bid, default=None)

    def best_ask(self) -> Optional[Quote]:
        return min(self.quotes.values(), key=lambda q: q.ask, default=None)

    def nbbo_spread_bps(self) -> Optional[float]:
        bb, ba = self.best_bid(), self.best_ask()
        if not bb or not ba or bb.bid <= 0:
            return None
        return (ba.ask - bb.bid) / bb.bid * 10000

async def watch_venue(ex_id: str, symbol: str, book: CompositeBook):
    ex = getattr(ccxtpro, ex_id)({'enableRateLimit': True})
    try:
        while True:
            ob = await ex.watch_order_book(symbol, limit=5)
            if ob['bids'] and ob['asks']:
                q = Quote(
                    venue=ex_id,
                    bid=ob['bids'][0][0],
                    ask=ob['asks'][0][0],
                    bid_size=ob['bids'][0][1],
                    ask_size=ob['asks'][0][1],
                    ts_ns=int(asyncio.get_event_loop().time() * 1e9),
                )
                book.update(q)
    finally:
        await ex.close()

async def monitor(book: CompositeBook):
    while True:
        await asyncio.sleep(1)
        bb, ba = book.best_bid(), book.best_ask()
        if bb and ba:
            print(f"NBBO: bid {bb.bid}@{bb.venue} / ask {ba.ask}@{ba.venue} "
                  f"spread {book.nbbo_spread_bps():.1f} bps")

async def main():
    book = CompositeBook()
    venues = ['binance', 'okx', 'bybit', 'kraken']
    tasks = [watch_venue(v, 'BTC/USDT', book) for v in venues]
    tasks.append(monitor(book))
    await asyncio.gather(*tasks)

if __name__ == '__main__':
    asyncio.run(main())

这段代码的关键工程点:

  1. 每个场所一个独立 task,避免一家场所的网络延迟阻塞其他场所;
  2. 本地纳秒时间戳,用于做跨场所事件对齐——交易所自己的时间戳在跨场所比较时不可靠;
  3. NBBO 合成,输出”全市场最优买卖价及其来源场所”。
  4. 失败隔离async with 模式或 finally 关闭可以让单一场所异常不污染整个事件循环。

实际生产环境还要补充:心跳超时检测、订阅恢复、限速回退、跨场所价格异常报警、消息序号缺失补偿。这些都是生产级行情接入的”隐性工作量”,新手往往低估。

8.5 案例:跨场所套利 vs 跨场所做市

把上述判断框架落到两个具体策略的实战对比上:

跨场所套利:在 Binance 监听 BTC/USDT 价格,在 OKX 监听同一对,当 Binance 价高于 OKX 价超过手续费 + 提币费 + 滑点缓冲时,在 Binance 卖、OKX 买。

工程关键点: - 两边都必须有持仓,套利完成后再补回。 - 资金跨交易所提币耗时 5 分钟到 30 分钟(取决于链拥堵),决定了套利的最大持仓周转。 - 价差信号衰减极快,竞争对手都在做同样的事,从信号产生到下单完成的延迟必须压在毫秒级。

跨场所做市:在 Binance 和 OKX 同时挂双边限价单,赚取两个场所的价差 + maker 返佣。

工程关键点: - 两边的中价不同步是常态,做市商要把”两个场所的中价偏差”作为定价输入。 - 一边成交后,另一边的同向单要立刻撤掉(避免双边成交反而造成净持仓)。 - 库存平衡通过”在一个场所累积持仓后,在另一个场所主动平仓”实现。

这两类策略对场所选择的判断完全不同:套利偏好”延迟差小、提币快”的组合,做市偏好”价差稳定、流动性深、maker 返佣高”的组合。同样的两个交易所,对前者可能不合适,对后者可能很合适。

8.6 监管套利的边界

跨司法辖区的策略选择还涉及监管套利。一个典型例子:某些加密做市商在新加坡持牌,却为美国客户提供服务。从工程角度看,他们必须实施 IP 白名单、KYC 屏蔽、地理路由,这些合规层会显著拖累系统延迟和可用性。

我对监管套利的判断是:短期可以做,长期必然收紧。FATF(金融行动特别工作组)、IOSCO(国际证监会组织)的跨境信息共享协议正在快速完善;2023 年 Binance 在美国被起诉、CZ 被判刑就是节点性事件。任何依赖”在某地不被监管”的策略,都应该把”监管收紧到将该业务关停”作为基础情景纳入风险评估,而不是 tail risk。


九、结论与边界

总结全篇关键判断:

  1. 市场结构是工程变量。同一个标的,不同交易场所的撮合机制、费率、延迟、订单类型支持完全不同,策略 PnL 高度依赖场所选择。
  2. 订单驱动是当前主流终局,报价驱动只在场外、固收、外汇等有结构性原因的市场仍占主导。
  3. 做市商是市场结构的稳定器,而不是中介。价差是逆向选择风险的补偿,做市的核心成本是被知情交易者吃单。
  4. ECN 与暗池本质都是 ATS,差异在透明度。暗池不是”反高频的避风港”,而是”信息更不对称的撮合场所”。IEX 的 speed bump 是一次值得敬意但商业不成功的市场结构试验。
  5. 加密市场把传统市场结构问题重新出了一遍,但答案完全不同——CEX 复刻撮合、DEX 用 AMM、跨链桥导致流动性碎片化、没有 NBBO、没有强制订单保护。
  6. Maker-Taker 费率结构直接塑造做市行为,PFOF 在零佣金时代成为美股零售订单的核心商业模型,监管争议持续。
  7. Reg NMS 与 MiFID II 是美欧市场结构的根法,中国《证券法》塑造了一个统一交易所、集中清算、强管制的简化模型——量化策略的工程复杂度低,但跨场所套利空间也少。
  8. 策略选场所要看属性匹配,不是单一指标。做市策略偏好高 maker rebate 场所,延迟套利偏好多 lit 场所连接,大单执行偏好暗池与内部撮合。

本文不展开的内容:


十、几个常见误区

写到这里值得回头点出几个新手量化最容易犯的市场结构误区:

  1. “流动性最好的就是最优场所”:错。流动性必须和策略对手方画像匹配。一个做市策略去 Liquidnet 这种机构暗池,对手方都是机构大单,价差给得很差;做大单执行去 lit 主板,市场冲击成本会把你吃光。
  2. “Maker 一定比 Taker 划算”:错。Maker 收返佣是有代价的——挂单未必成交,挂单暴露了你的意图,被信息更充分的对手挑成交(逆向选择)。在波动剧烈的市场,主动 Taker 反而是减少风险敞口的选择。
  3. “所有交易所的撮合规则都一样”:错。即便同样标榜价格时间优先,CME 的 ES 合约和 Nasdaq 的 AAPL 在订单类型、撮合优先级、tick size 上都有差异。
  4. “加密 DEX 没有信息劣势”:错。链上交易顺序由 mempool 和排序器决定,存在 MEV 攻击。链上的信息不对称比传统市场更严重,只是表现形式不同。
  5. “小标的高频策略很赚钱”:错。小流动性标的的价差看起来宽,但深度极薄,下单一次就把价差吃光,且容易被监管认定为操纵市场。

十一、风险提示


参考资料

规范与监管文件

论文与书籍

工程与代码

历史事件与监管处罚


导航

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-05-01 · quant

【量化交易】智能订单路由(SOR)与暗池策略

把「智能订单路由(SOR)」这件事拆到工程能落地的颗粒度:市场碎片化的监管根源(Reg NMS、MiFID II),SOR 的目标函数(成交概率、价差、冲击、延迟、费率、信息泄漏),Lit market 的队列与 reserve 单选择,暗池的最低成交量门槛、对手方筛选与毒性度量,pinging 与反 pinging 的对抗博弈,跨市场套利与 latency arbitrage 的 SOR 视角,加密资产 SOR(CEX 间路由与 DEX 聚合器),以及连接管理、撮合状态聚合、Failover 等工程要点。提供可直接接入的多场所订单簿模拟、SOR 决策器、CCXT 加密 SOR 骨架。

2026-05-01 · quant

【量化交易】量化交易全景:从信号到订单的工程链路

量化交易不是策略写得好就能赚钱,更难的是把数据、特征、因子、信号、组合、执行、风控、复盘这八段链路在工程上连成一条不漏数据、不串时间、不丢订单的流水线。本文是【量化交易】系列的总目录与读图,给出八段链路的输入输出、失败模式、不变量清单,并用研究流程图把从一个想法到一笔实盘订单之间所有该过的卡点串起来。

2026-05-01 · quant

【量化交易】市场微结构:订单簿、价差、流动性、冲击

系统讲解市场微结构的核心概念与可计算工具:限价订单簿的数据模型、报价/有效/已实现价差、Roll 模型、四维流动性度量、Kyle's lambda、订单流不平衡(OFI)、Almgren-Chriss 框架下的临时与永久冲击、PIN 与 VPIN、Hawkes 过程,并给出基于 polars 的 L2 增量处理与系数估计代码。

2026-05-01 · quant

【量化交易】订单类型与执行语义:限价、市价、IOC、FOK、冰山

把 Limit、Market、IOC、FOK、Iceberg、Stop、MOO/MOC 这些常被混为一谈的订单类型还原为价格、数量、时效、可见性、触发五个独立维度,并对照 A 股、港股、美股、CME、Binance 五个市场的实际语义差异,给出量化系统中的订单工厂、状态机与风控前置校验的工程实现。


By .