market-microstructure-traditional について
暗号資産の取引分析やマーケットメイク研究向けのスキルです。中央集権型取引所の指値注文板を扱い、DEXのAMM構造と比較しながら、価格形成や執行品質、リスクを解説します。
主な機能
- 01スプレッドと取引コストの分解
- 02価格インパクトと板の不均衡の分析
- 03注文到着・価格形成モデルの解説
- 04VWAPと実行不足による執行評価
- 05CEXの注文板とDEX AMMの比較
活用シーン
- 01大口注文の執行コスト分析
- 02マーケットメイクの気配と在庫リスク評価
- 03CEXと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 の仕組みと DEX の AMM ベースの構造を比較します。
核となる概念
| 概念 | 何がわかるか |
|---|---|
| ビッド・アスク・スプレッド | 即時性のコスト。今取引する場合と後で取引する場合のコスト差 |
| 価格インパクト | 注文が市場価格をどのように動かすか |
| 注文板の不均衡 | キューの数量から予測する短期的な方向性 |
| 逆選択 | 情報を持つ取引相手と取引するリスク |
| 在庫リスク | 累積ポジションによるマーケットメーカーのエクスポージャー |
| 執行品質 | ベンチマークと比較して約定がどの程度良好か |
ビッド・アスク・スプレッドの分解
ビッド・アスク・スプレッドは単一の要素ではありません。次の3つの要素に分解できます(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のラムダ(1985)
Kyleのモデルでは、情報を持つトレーダーが1人、ノイズトレーダー、マーケットメーカーが登場します。マーケットメーカーは、純注文フローの線形関数として価格を設定します。
price_change = lambda * net_order_flow
**ラムダ(λ)**は、売買方向を符号化した出来高1単位あたりの恒久的な価格インパクトを測定します。ラムダが高いほど、市場の流動性は低くなります。ラムダは、価格変化を売買方向を符号化した出来高に対して回帰して推定します。
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
一般的なアルファ値: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 et al., 2014)。より深いレベルを加えると予測力は高まりますが、その効果は急速に薄れます。
取引到着過程
ポアソン過程
最も単純なモデルでは、取引は一定の率 λ で到着します。到着間隔は指数分布に従います。ベースラインとしては有用ですが、実際の注文フローを表すには単純すぎます。
ホークス過程
各取引によって後続の取引が発生する確率が高まる、自己励起型点過程です。注文フローのクラスター化を捉えます。
intensity(t) = mu + sum(alpha * exp(-beta * (t - t_i)))
- mu:ベースライン到着率
- alpha:励起の大きさ(各イベントが強度をどれだけ高めるか)
- beta:減衰率(励起がどれだけ速く弱まるか)
- alpha/beta < 1:定常性の条件(分岐比)
分岐比 α/β は、取引のうち イノベーション ではなく 反応 にあたる割合を示します。暗号資産市場での一般的な値は 0.5~0.8 です(反応性が高いことを示します)。
マーケットメイカーの収益構造
マーケットメイカーはスプレッドから利益を得ますが、次の 3 つのリスクに直面します。
- 逆選択 — 情報を持つトレーダーに負けること
- 在庫リスク — 指向性のあるエクスポージャーが蓄積すること
- 競争 — 他の MM がスプレッドを狭めること
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 ベンチマーク
出来高加重平均価格(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 と曲線の形状から暗黙的に決まる |
| 逆選択 | MM は情報に応じて価格を改定 | LP はインパーマネントロスを被る |
| 執行 | 価格・時間優先 | ブロックへの取り込み順 |
| レイテンシ | マイクロ秒 | ブロック時間(Solana は 400ms、Ethereum は 12s) |
| MEV | フロントランニングはより困難(MM がコロケーションされているため) | サンドイッチ攻撃が常態化 |
| 手数料 | メイカー/テイカー(メイカーリベートが適用されることが多い) | 固定ティア(例:5、30、100 bps) |
CEX を使う場合:大口注文、レイテンシに敏感な戦略、狭いスプレッドが必要な場合、BTC/ETH/主要通貨ペア。
DEX を使う場合:ロングテールトークン、検閲耐性、DeFi とのコンポーザビリティ、透明性の高い執行。
構造の詳細な比較については references/cex_vs_dex.md を参照してください。
メイカー/テイカー手数料体系
CEX の手数料ティアは、インセンティブの非対称性を生み出します。
| ティア | メイカー手数料 | テイカー手数料 | 必要な純スプレッド |
|---|---|---|---|
| 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 + リベート収入 |
上位ティアでは、メイカーリベートによりマーケットメイカーは流動性を提供することで 報酬を受け取れます。これによって戦略の収益構造が根本的に変わります。
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— 在庫管理と損益を含むマーケットメイカーのシミュレーション(合成価格推移を使う--demoモードあり)
依存関係
uv pip install numpy pandas scipy matplotlib
関連スキル
- market-microstructure — オンチェーンDEXのマイクロストラクチャー(AMM固有)
- slippage-modeling — 執行コストの推定とモデリング
- liquidity-analysis — プールとオーダーブックの流動性分析
- order-execution — 実践的な執行アルゴリズム
- mev-analysis — オンチェーン執行におけるMEVリスク