关于 market-microstructure-traditional
面向加密市场交易分析与做市研究的技能,讲解中心化交易所限价订单簿机制,并与 DEX 的 AMM 结构对比。涵盖价格形成、冲击、执行质量及做市风险。
主要功能
- 01拆解买卖价差与交易成本
- 02分析价格冲击和订单簿失衡
- 03介绍订单到达与价格形成模型
- 04评估 VWAP 和实施缺口
- 05比较 CEX 订单簿与 DEX AMM
适用场景
- 01分析大额订单的执行成本
- 02评估做市报价与库存风险
- 03比较 CEX 和 DEX 的交易机制
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill market-microstructure-traditional安装后在 Claude Code 中输入/market-microstructure-traditional确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cex_vs_dex.mdexecution_quality.mdprice_formation.mdscripts/market_maker_sim.pyspread_analysis.py详细介绍
市场微观结构(传统)
市场微观结构研究订单如何转化为交易,以及交易如何形成价格。了解这些机制对于优化执行、做市和检测信息型订单流至关重要。本技能介绍应用于中心化交易所加密市场的限价订单簿(LOB)理论,并对比 LOB 机制与基于 AMM 的 DEX 结构。
核心概念
| 概念 | 含义 |
|---|---|
| 买卖价差 | 即时交易的成本——现在交易与稍后交易之间的成本差异 |
| 价格冲击 | 你的订单对市场价格的影响 |
| 订单簿失衡 | 根据队列规模预测短期价格方向 |
| 逆向选择 | 与知情交易对手交易的风险 |
| 库存风险 | 做市商因累积头寸而承担的风险 |
| 执行质量 | 你的成交与基准相比的表现 |
买卖价差分解
买卖价差并非单一组成部分,而是可分解为三个部分(Roll,1984;Glosten & Harris,1988):
- 逆向选择 — 与知情交易者交易所获得的补偿
- 库存持有 — 承担风险所获得的补偿
- 订单处理 — 提供流动性的固定成本(费用、基础设施)
价差指标
# Quoted spread: what you see on the order book
quoted_spread = best_ask - best_bid
quoted_spread_bps = (best_ask - best_bid) / midprice * 10_000
# Effective spread: what you actually pay (accounts for price improvement)
effective_half_spread = abs(trade_price - midprice_at_trade)
effective_spread_bps = effective_half_spread / midprice_at_trade * 10_000
# Realized spread: market maker's actual profit (after price moves)
# Measured at trade_price vs midprice N seconds later
realized_spread = trade_sign * (trade_price - midprice_after_delay)
有效价差对执行质量最为重要。有效价差与实现价差之间的差异衡量了逆向选择——即做市商因信息型订单流而蒙受的损失。
价格形成模型
Glosten-Milgrom(1985)
这是一个序贯交易模型,做市商设定买入价和卖出价,以便在知情交易者与非知情交易者的混合交易中实现盈亏平衡。
- 做市商的报价反映了基于交易方向的条件期望值
- 价差完全由逆向选择造成
- 随着交易逐步揭示信息,价格会收敛至真实价值
关键见解:以下情况会导致价差扩大:
- 知情交易的概率(PIN)较高
- 信息不对称程度较大
- 非知情交易量较低
Kyle 的 Lambda(1985)
Kyle 模型包含一名知情交易者、噪声交易者和一名做市商。做市商将价格设定为净订单流的线性函数:
price_change = lambda * net_order_flow
**Lambda(λ)**衡量单位签名交易量带来的永久价格冲击。Lambda 越高,市场流动性越差。可通过对价格变化与签名交易量进行回归来估算 Lambda:
import numpy as np
from numpy.linalg import lstsq
def estimate_kyle_lambda(
price_changes: np.ndarray,
signed_volumes: np.ndarray,
) -> float:
"""Estimate Kyle's lambda from trade data.
Args:
price_changes: Midprice changes between trades.
signed_volumes: Trade volume * trade_sign (+1 buy, -1 sell).
Returns:
Estimated lambda (price impact per unit volume).
"""
X = signed_volumes.reshape(-1, 1)
beta, _, _, _ = lstsq(X, price_changes, rcond=None)
return float(beta[0])
完整的模型推导以及用于衡量知情交易概率的 PIN 模型,请参阅 references/price_formation.md。
价格冲击模型
暂时性冲击与永久性冲击(Almgren-Chriss)
执行大额订单时:
- 暂时性冲击 — 订单执行后会回归的价格偏移,由消耗挂单流动性造成。
- 永久性冲击 — 交易所包含的信息使均衡价格发生变化,且不会回归。
total_impact = permanent_impact + temporary_impact
permanent = gamma * (shares / ADV)
temporary = eta * (shares / time_horizon) ^ alpha
典型的 alpha 值为 0.5-0.7(平方根冲击是稳健的经验发现)。
平方根冲击定律
经验表明,价格冲击与订单规模相对于日交易量的比值的平方根成正比:
def square_root_impact(
order_size: float,
daily_volume: float,
volatility: float,
impact_coefficient: float = 0.1,
) -> float:
"""Estimate price impact using the square root model.
Args:
order_size: Number of units to trade.
daily_volume: Average daily volume.
volatility: Daily return volatility (decimal).
impact_coefficient: Empirical constant (typically 0.05-0.20).
Returns:
Expected price impact as a fraction.
"""
return impact_coefficient * volatility * (order_size / daily_volume) ** 0.5
订单簿失衡
订单簿顶部附近买方与卖方的深度比值可预测短期价格方向:
def order_book_imbalance(
bid_qty: float,
ask_qty: float,
) -> float:
"""Compute order book imbalance.
Returns:
Imbalance in [-1, 1]. Positive = more bids (bullish).
"""
total = bid_qty + ask_qty
if total == 0:
return 0.0
return (bid_qty - ask_qty) / total
第 1-5 档的失衡是强有力的短期预测指标(Cont 等人,2014)。更深档位能提高预测能力,但这种能力会迅速衰减。
交易到达过程
泊松过程
最简单的模型:交易以恒定速率 λ 到达。到达间隔时间服从指数分布。该模型可用作基准,但对于真实订单流而言过于简单。
Hawkes 过程
一种自激点过程,每笔交易都会提高后续交易发生的概率,能够捕捉订单流中的聚集现象:
intensity(t) = mu + sum(alpha * exp(-beta * (t - t_i)))
- mu:基准到达率
- alpha:激发幅度(每个事件使强度提高多少)
- beta:衰减率(激发效应消退的速度)
- alpha/beta < 1:平稳性条件(分支比)
分支比 α/β 表示交易中属于反应而非创新的比例。在加密货币市场中,典型值为 0.5-0.8(反应性较高)。
做市商经济学
做市商从价差中获利,但面临三种风险:
- 逆向选择——输给知情交易者
- 库存风险——累积的方向性敞口
- 竞争——其他做市商缩窄价差
Avellaneda-Stoikov 模型
库存为 q 的做市商的最优买卖报价:
reservation_price = midprice - q * gamma * sigma^2 * T
optimal_spread = gamma * sigma^2 * T + (2/gamma) * ln(1 + gamma/k)
其中:
q:当前库存(正数 = 多头)gamma:风险厌恶参数sigma:波动率T:剩余时间k:订单到达率参数
关键洞察:保留价格会向远离库存的方向偏移——多头做市商会降低报价,以鼓励卖出。
执行质量衡量
VWAP 基准
成交量加权平均价格是被动执行的标准基准:
def vwap(prices: list[float], volumes: list[float]) -> float:
"""Compute VWAP from trade prices and volumes."""
pv_sum = sum(p * v for p, v in zip(prices, volumes))
v_sum = sum(volumes)
return pv_sum / v_sum if v_sum > 0 else 0.0
# Execution quality vs VWAP
slippage_vs_vwap = (avg_fill_price - vwap_benchmark) / vwap_benchmark * 10_000
实施缺口
衡量相对于决策价格的执行总成本(Perold,1988):
implementation_shortfall = (execution_price - decision_price) * quantity
分解如下:
- 延迟成本:决策与首次成交之间的价格漂移
- 市场冲击:由你的订单造成的价格变动
- 时机成本:将订单拆分成多个批次所产生的成本
- 机会成本:未成交部分的价值
完整方法请参见 references/execution_quality.md。
CEX 订单簿与 DEX AMM
| 维度 | CEX(LOB) | DEX(AMM) |
|---|---|---|
| 价格发现 | 限价订单表达交易意愿 | 算法曲线(x·y=k) |
| 价差 | 由相互竞争的做市商设定 | 由池深度和费率档位决定 |
| 深度 | 可见订单簿 | 根据 TVL 和曲线形状隐含得出 |
| 逆向选择 | 做市商根据新信息重新定价 | LP 承受无常损失 |
| 执行 | 价格优先、时间优先 | 按区块收录顺序先到先得 |
| 延迟 | 微秒 | 区块时间(Solana 为 400ms,Ethereum 为 12s) |
| MEV | 抢先交易更困难(做市商集中部署) | 三明治攻击屡见不鲜 |
| 费用 | Maker/Taker(通常 Maker 可获得返佣) | 固定费率档位(例如 5、30、100 bps) |
适用 CEX 的场景:大额订单、对延迟敏感的策略、需要较窄价差、BTC/ETH/主流交易对。
适用 DEX 的场景:长尾代币、抗审查、与 DeFi 的可组合性、透明执行。
详细的结构比较请参见 references/cex_vs_dex.md。
Maker/Taker 费率结构
CEX 费率档位会形成激励不对称:
| 档位 | Maker 费率 | Taker 费率 | 盈亏平衡所需净价差 |
|---|---|---|---|
| VIP 0 | 0.10% | 0.10% | 20 bps |
| VIP 5 | 0.02% | 0.05% | 7 bps |
| VIP 9 | -0.005% | 0.03% | 2.5 bps + 返佣收入 |
在较高档位,Maker 返佣意味着做市商提供流动性还能获得报酬。这从根本上改变了策略的经济性:
def maker_pnl_per_trade(
spread_captured_bps: float,
maker_fee_bps: float,
adverse_selection_bps: float,
) -> float:
"""Compute market maker P&L per round trip.
Args:
spread_captured_bps: Half-spread captured on each side.
maker_fee_bps: Maker fee (negative = rebate).
adverse_selection_bps: Expected loss to informed flow.
Returns:
Net P&L in basis points per round trip.
"""
gross = 2 * spread_captured_bps # earn half-spread on each leg
fees = 2 * maker_fee_bps # pay/receive fee on each leg
return gross - fees - adverse_selection_bps
文件
参考资料
references/price_formation.md— Glosten-Milgrom、Kyle 模型、PIN 模型、价差分解references/execution_quality.md— VWAP、TWAP、实施缺口、滑点分解references/cex_vs_dex.md— LOB 与 AMM 的结构比较、混合模型、路由决策
脚本
scripts/spread_analysis.py— 分析买卖价差,根据交易数据计算有效价差、已实现价差和报价价差(使用合成订单簿的 --demo 模式)scripts/market_maker_sim.py— 带库存管理和 P&L 的做市商模拟(使用合成价格路径的 --demo 模式)
依赖项
uv pip install numpy pandas scipy matplotlib
相关技能
- market-microstructure — 链上 DEX 微观结构(特定于 AMM)
- slippage-modeling — 执行成本估算与建模
- liquidity-analysis — 池和订单簿深度分析
- order-execution — 实用执行算法
- mev-analysis — 链上执行中的 MEV 风险