Skip to content
Published on

マーケット・マイクロストラクチャ & アルゴリズム取引理論 2026 ディープダイブ: 板情報・Almgren-Chriss・Avellaneda-Stoikov・Kyle ラムダ完全ガイド

Authors

2026年マイクロストラクチャ: 学術と現場が再会する

2026年春、Citadel Securities が「PhD in stochastic control, no industry experience required」という求人を出した。マイクロストラクチャは周縁から採用ターゲットへと位置を変えた。Charles-Albert Lehalle 著 High-Frequency and Algorithmic Trading: A Quantitative Approach 第2版が出版され、Almgren-Chriss(2001)、Avellaneda-Stoikov(2008)、Kyle(1985)が新人クォンツの必読書になった。韓国では KRX が2022年に ETF/ETN の呼値を5ウォンから1ウォンに縮小し、マイクロストラクチャ・データの解析余地が広がった。日本では JPX の J-GATE 4世代化により応答遅延が <10μs まで短縮された。本稿では LOB モデリング、執行アルゴリズム、マーケットメイク、インパクトモデルという業界標準理論をコードと共に整理する。

Limit Order Book(LOB)とは何か

LOB は売買双方の未約定注文を価格別にキューで保持するデータ構造である。最良買気配(best bid)と最良売気配(best ask)の差がスプレッド、中点が S_t(mid price)。KRX の KOSPI200 銘柄は3階層以上、JPX は最大8階層が公開される。NASDAQ ITCH 5.0 はマイクロ秒単位ですべての板変更を配信する。

LOB イベントは6種類に分類される。新規指値注文、成行注文、取消、訂正、約定、失効。このイベント列のモデリングがマイクロストラクチャ研究の出発点になる。

# lob.py — 最小構成の LOB データ構造 (価格 → キュー)
from sortedcontainers import SortedDict
from collections import deque
from dataclasses import dataclass

@dataclass
class Order:
    order_id: int
    side: str       # 'BID' or 'ASK'
    price: int      # 整数ティック (KRX: 1ティック=1ウォン)
    size: int
    ts_ns: int

class LimitOrderBook:
    def __init__(self):
        self.bids = SortedDict()   # price -> deque[Order]
        self.asks = SortedDict()
        self.orders = {}           # order_id -> Order

    def submit(self, o: Order):
        book = self.bids if o.side == 'BID' else self.asks
        if o.price not in book:
            book[o.price] = deque()
        book[o.price].append(o)
        self.orders[o.order_id] = o

    def cancel(self, order_id: int):
        o = self.orders.pop(order_id, None)
        if not o:
            return
        book = self.bids if o.side == 'BID' else self.asks
        book[o.price].remove(o)
        if not book[o.price]:
            del book[o.price]

    def best_bid(self):
        return self.bids.peekitem(-1)[0] if self.bids else None

    def best_ask(self):
        return self.asks.peekitem(0)[0] if self.asks else None

    def mid_price(self):
        b, a = self.best_bid(), self.best_ask()
        return (b + a) / 2 if b and a else None

キュー位置動態と FIFO マッチング

大半の取引所(KRX、JPX、NYSE、NASDAQ)は価格-時間優先(price-time priority)FIFO 方式である。同一価格では先着順で約定する。マーケットメイカーにとってキュー位置はオプション価値そのもので、前列にいるほど成行で抜ける前に約定する確率が高い。

Cont-Stoikov-Talreja(2010)はキュー動態を生死過程として定式化した。第1階層のキュー長 L_t は新規指値で +1、前方の約定・取消で -1 する。導出される量として first-passage time が中心になる。

Hawkes 点過程による LOB イベントモデル

指値到着、成行到着、取消は単純な Poisson ではなく、自己励起(self-exciting)的に振る舞う。Hawkes 過程が標準ツールである。強度関数 λ(t) は次のとおり。

# hawkes.py — 単変量 Hawkes プロセス・シミュレーション
# lambda(t) = mu + sum_{t_i < t} alpha * exp(-beta * (t - t_i))
import numpy as np

def simulate_hawkes(T: float, mu: float, alpha: float, beta: float, seed=0):
    assert alpha < beta, "安定性: alpha/beta < 1"
    rng = np.random.default_rng(seed)
    events = []
    t = 0.0
    lam_bar = mu  # thinning 上限
    while t < T:
        u = rng.uniform()
        w = -np.log(u) / lam_bar
        t = t + w
        if t >= T:
            break
        lam = mu + sum(alpha * np.exp(-beta * (t - ti)) for ti in events)
        d = rng.uniform()
        if d * lam_bar <= lam:
            events.append(t)
            lam_bar = lam + alpha   # ジャンプ後の上限を更新
    return np.array(events)

events = simulate_hawkes(T=60.0, mu=0.5, alpha=0.4, beta=1.0, seed=42)
print(f"60秒間で {len(events)} イベント, 平均強度 {len(events)/60:.2f}/s")

多変量 Hawkes(買イベントが売イベントを誘発する等)については Bacry-Mastromatteo-Muzy(2015)の総説がある。現場では Hawkes をベースライン信号として扱い、より深い構造はニューラル系(Deep Hawkes、Transformer ベースのマーク列)で置き換える流れである。

Kyle(1985)モデルと情報非対称性

Albert Kyle の1985年 Econometrica 論文 "Continuous Auctions and Insider Trading" がこの分野の出発点である。情報保有者、ノイズトレーダー、マーケットメイカー(MM)の3者が登場する。MM は総注文フロー y = x + u を観測する。x は情報保有者の数量、u はノイズ。MM はベイズ更新で資産価値 v を推定し、価格を p = μ + λy と設定する。

主要結果: Kyle ラムダ λ = σ_v / (2 σ_u)。資産のボラティリティが高く、ノイズフローが薄いほど価格は注文フローに敏感になる。λ はマーケットインパクトと情報非対称性の標準指標である。

Glosten-Milgrom(1985)逆選択モデル

同年 Journal of Financial Economics に掲載された Glosten-Milgrom は気配ベースのモデルである。MM は買気配 b と売気配 a を事前設定する。情報保有者の買は資産価値の上方シグナル、売は下方シグナルとなる。損益分岐を維持するには a > E[v|買], b < E[v|売] が必要。この差がスプレッドの逆選択(adverse selection)成分である。

スプレッドの3成分分解: HRT、MRT、AS

Stoll(1989)および Huang-Stoll(1997)は観測スプレッドを3つに分解した。

  • 注文処理コスト: 清算・取引所手数料 — ほぼ定数。
  • 在庫コスト: 望まない持高を抱えるリスク(Stoll 1978 在庫モデル)。
  • 逆選択コスト: Glosten-Milgrom 成分。

GMM 回帰で NYSE 大型株を分析すると逆選択 約40%、在庫 15%、処理 45% 程度(Huang-Stoll 1997)。韓国 KOSPI200 銘柄は2023年の IBK 分析では逆選択比率が約30%とされる。

Avellaneda-Stoikov(2008)マーケットメイク

Marco Avellaneda と Sasha Stoikov は2008年 Quantitative Finance に "High-Frequency Trading in a Limit Order Book" を発表した。MM の効用関数を U(x) = -exp(-γ x) と置き、動的計画法で最適買気配・売気配を導出した。閉形式の見積もりは業界標準となった。

主要オブジェクト: 在庫オフセットを含む reservation price r と最適スプレッド δ_a + δ_b

# avellaneda_stoikov.py — AS マーケットメイクの見積もり
import numpy as np

def as_quotes(S, q, t, T, sigma, gamma, k):
    """
    S: 中値
    q: 現在の在庫 (正値=ロング)
    t: 現在時刻 (残時間 T - t)
    sigma: mid のボラティリティ
    gamma: リスク回避度
    k: 成行到着強度の減衰 (lambda(delta) = A * exp(-k * delta))
    """
    tau = T - t
    # reservation price: 在庫がロングなら売気配側に寄せる
    r = S - q * gamma * sigma**2 * tau
    spread = gamma * sigma**2 * tau + (2 / gamma) * np.log(1 + gamma / k)
    bid = r - spread / 2
    ask = r + spread / 2
    return bid, ask, r

bid, ask, r = as_quotes(S=100.0, q=5, t=0.0, T=1.0, sigma=2.0, gamma=0.1, k=1.5)
print(f"reservation={r:.3f}, bid={bid:.3f}, ask={ask:.3f}")

読み方: 在庫 q が正なら reservation price が中値を下回り、売気配はより攻撃的になる。「もう持ってるから早く売れ」が自動的に実装される。γ(リスク回避度)が大きいほどスプレッドは広がる。

Cartea-Jaimungal 拡張と産業応用

AS モデルは強度一定・無限地平など簡素化前提が多い。Álvaro Cartea と Sebastian Jaimungal は Algorithmic and High-Frequency Trading(2015)で時間変動強度、価格ジャンプ、日中パターンを含む拡張を整理した。Optiver や Jump Trading 等のマーケットメイカーは AS の reservation price の発想を維持しつつ、強度関数をデータ駆動推定に置き換える方針を採る。

Almgren-Chriss(2001)最適執行

Robert Almgren と Neil Chriss の2001年 Journal of Risk 論文 "Optimal Execution of Portfolio Transactions" は執行アルゴリズムの標準である。マネージャーが X 株を時間 T 内に清算する状況を扱う。急ぎすぎればインパクト、遅すぎればボラティリティ露出。

価格動態: S_t = S_0 + σ W_t - γ (X - x_t) - η (dx_t/dt)γ が恒久インパクト、η が一時インパクト。目的関数は E[cost] + λ Var[cost] の最小化。

解は hyperbolic sine/cosine の閉形式となる。λ = 0 で TWAP、λ → ∞ で即時清算に縮退する。

# almgren_chriss.py — 最適執行の軌道
import numpy as np

def ac_trajectory(X, T, N, sigma, eta, gamma, lam):
    """
    X: 総清算量
    T: 期限
    N: 分割数
    sigma: 価格ボラティリティ
    eta: 一時インパクト
    gamma: 恒久インパクト
    lam: リスク回避度 (lambda)
    """
    tau = T / N
    eta_tilde = eta - 0.5 * gamma * tau
    kappa_sq = lam * sigma**2 / eta_tilde
    kappa = np.sqrt(kappa_sq) if kappa_sq > 0 else 1e-9
    times = np.arange(N + 1) * tau
    # x_k = sinh(kappa * (T - t_k)) / sinh(kappa * T) * X
    x = np.sinh(kappa * (T - times)) / np.sinh(kappa * T) * X
    trades = -np.diff(x)
    return times, x, trades

t, x, trades = ac_trajectory(X=1_000_000, T=1.0, N=20,
                              sigma=0.02, eta=2.5e-7, gamma=2.5e-8, lam=2e-6)
print(f"初回スライス={trades[0]:.0f}, 最終={trades[-1]:.0f}")

lam が小さければスケジュールはほぼ均等(TWAP)に、大きければ前倒し執行となる。Goldman Sachs SIGMA X や JPM Aqua の執行アルゴリズムは AC を骨格に据えている。

VWAP, TWAP, Implementation Shortfall

業界で最もよく見る3つの執行アルゴリズム。

  • TWAP(時間加重平均価格): 時間を均等分割。AC で λ → 0 の場合。
  • VWAP(出来高加重平均価格): 過去の日中出来高プロファイルを追従。典型的なU字。
  • IS(Implementation Shortfall): Perold(1988)が定義した「意思決定時価格 - 実現平均」の差を最小化。AC が IS 最小化の閉形式解。
アルゴリズムベンチマークリスク適合
TWAP時間平均出来高変動流動性低銘柄
VWAP日中出来高加重平均出来高予測誤差大型指数銘柄
IS意思決定時 midボラティリティ短期アルファ有

マーケットインパクト・モデル: 平方根則

Almgren-Thum-Hauptmann-Li(2005)および Bouchaud グループの実測では、インパクトは取引量の平方根に依存する: I = Y σ √(V/V_daily)Y は約 0.5–1、σ は日次ボラティリティ。この square-root law は ITG、Virtu、Citi の TCA レポートでもほぼそのまま使われる。

線形 Kyle ラムダと平方根則が両立する理由は時間スケールの違いである。Kyle は1時点の限界インパクト、平方根則はメタオーダー全体の累積インパクトを評価する。

短期アルファとシグナル減衰

マイクロアルファは通常、数十秒から数分以内に減衰する。平均回帰シグナルは 1–5 分の地平、モメンタムは 5–30 分が一般的。Penalva-Cartea-Jaimungal は OFI(Order Flow Imbalance)を最強の短期シグナルと位置づけている。

# ofi.py — Order Flow Imbalance シグナル
def ofi(book_snapshots):
    """連続した板スナップショットから OFI を算出。
    bid_size 増加 → 買圧力、ask_size 増加 → 売圧力。
    """
    ofi_series = []
    for i in range(1, len(book_snapshots)):
        prev, cur = book_snapshots[i - 1], book_snapshots[i]
        dbid = 0
        if cur.bid_price > prev.bid_price:
            dbid = cur.bid_size
        elif cur.bid_price == prev.bid_price:
            dbid = cur.bid_size - prev.bid_size
        else:
            dbid = -prev.bid_size
        dask = 0
        if cur.ask_price < prev.ask_price:
            dask = cur.ask_size
        elif cur.ask_price == prev.ask_price:
            dask = cur.ask_size - prev.ask_size
        else:
            dask = -prev.ask_size
        ofi_series.append(dbid - dask)
    return ofi_series

OFI を将来の中値変化に回帰すると R² は 0.05–0.15 程度になる。絶対値は控えめだが、HFT には十分な信号である。

ダークプールと隠れた流動性

NYSE/NASDAQ のライト板の外側で、ダークプール(IEX、ICAP、MS POOL ほか)が米国出来高の約15%を占める。情報漏洩を減らす目的で運用され、中点マッチ(midpoint match)が最も一般的である。IEX の 350μs スピードバンプはマイクロストラクチャ的に興味深い実験だった。

アイスバーグ注文はライト板に一部のみ表示し、残りを隠す。KRX は公式にはアイスバーグを提供せず、JPX は ToSTNeT-2 のブロック取引で類似機能を実現する。NYSE と NASDAQ は reserve、hidden、midpoint peg などのバリエーションを提供する。

バックテストの落とし穴: ルックアヘッドとサバイバーシップ

マイクロ戦略のバックテストは日足戦略よりはるかに失敗しやすい。

  • ルックアヘッド: 同タイムスタンプに複数イベントがある場合の順序は曖昧。ITCH/OUCH のメッセージ・シーケンス番号で厳密に並べる必要がある。
  • 部分約定無視: 1000株注文が 200+800 で分割される現実を無視するとコスト推定が崩れる。
  • 自己インパクト: 自身の注文が板を動かさないと仮定するとリターンが過大になる。
  • サバイバーシップ: 上場廃止銘柄を除くとリターンが過大になる。CRSP は含む、FactSet はオプション提供。
  • カレンダー効果: オプション SQ、指数リバランス、MSCI 算入発表など、非反復事象は別途扱う。

TAQ ティックデータと KRX、JPX のデータ環境

NYSE TAQ(Trade and Quote)は1993年から全約定・全気配を配信する。2026 年の TAQ Premium はマイクロ秒タイムスタンプと MDF フォーマットを提供。韓国は KRX マイクロデータセンターが銘柄別の板スナップショットと約定データを提供し、FnGuide や韓国資本市場研究院に加工データがある。日本は JPX 子会社 JPX-R&T が ToSTNeT 取引まで含むフルデータをライセンス販売している。

韓国市場の特徴

KRX は 09:00–15:30 の連続取引で、始値・終値の同時呼値(call-auction)時間帯がある。始値同時呼値(08:30–09:00)と終値同時呼値(15:20–15:30)では連続取引と異なる優先順位ロジックが適用される。さらに韓国は LP(Liquidity Provider)制度を運営し、ETF/ETN/ELW に対し帯域内呼値の義務を課す代わりに証券取引税の免除を与える。2022年の呼値刻み縮小(5ウォン→1ウォン、一部銘柄)はスプレッドを約30%圧縮し、メーカー収益も同程度減じたとされる。

日本市場の特徴

JPX の J-GATE は2024年に4世代化し応答遅延は <10μs 級となった。ToSTNeT は連続板外のブロック取引と時間外取引を扱う。日本独自の「板寄せ(itayose)」は韓国の同時呼値に似るが価格決定ロジックは異なる。JPX は arrowhead サイトで取引所直結のコロケーションも提供する。

マーケットメイカー P&L 分解: スプレッド vs 在庫リスク

MM の日次 P&L は2つの項に分解される。

  • スプレッド P&L: Σ (約定価格 - 中値) × 数量 — 設計上常に正にする。
  • 在庫 P&L: q_t × (S_T - S_0) — 残持高を中値経路に晒す。

AS はその両者をバランスする。γ が小さいほどスプレッド収益は増えるが、在庫分散も増える。現実のデスクは「flat by close」を強く強制する。

敵対的環境: スプーフィングと 200ms クールダウン

マイクロストラクチャは敵対的である。2010年の Flash Crash 以降、SEC は spoofing(虚偽呼値+即取消)を明示的に禁止した。Sarao(2014)と Coscia(2016)が代表的判例。韓国の資本市場法178条も spoofing を相場操縦として扱う。学術的には Cont と De Larrard の "Order Book Dynamics in Liquid Markets"(2013)が、高い取消率や未約定率は正常なマイクロストラクチャ特性そのものであることを示した。

学術 vs 産業モデル対応表

領域学術モデル産業バリアント主な差
マーケットメイクAvellaneda-Stoikov (2008)Cartea-Jaimungal 時間変動強度無限強度 → データ駆動
最適執行Almgren-Chriss (2001)アルファ減衰込み Optimal ISアルファ信号結合
インパクト線形 Kyle ラムダ平方根則(メタオーダー)時間スケール
LOB 動態Cont-Stoikov-Talreja (2010)Deep Hawkes、Transformer非パラ化
シグナルOFI、VPINニューラル埋め込み、グラフ信号入力次元

KR vs JP 市場構造比較

項目KRX(韓国)JPX(日本)
立会時間09:00–15:3009:00–11:30, 12:30–15:30
同時呼値始値/終値同時呼値板寄せ(itayose)
マッチングエンジンEXTURE+arrowhead 4.0(<10μs)
呼値単位2022年以降 1ウォン銘柄別ティアリング
LP 制度ETF/ETN/ELW 義務任意マーケットメイク
ダーク取引実質なしToSTNeT-2 ブロック
データ配信KRX マイクロデータセンターJPX-R&T ライセンス

結論: モデルは見積もり、執行はコード

マイクロストラクチャ・モデルは重い数式の裏に単純な直観を隠している。Kyle ラムダは「フローは価格をどれだけ動かすか」、Avellaneda-Stoikov は「在庫リスクを気配にどう織り込むか」、Almgren-Chriss は「インパクトとボラを何分の何で取引するか」を問う。2026年の産業の差は、モデルそのものではなく、それを駆動するデータパイプライン、マッチングエンジンとの遅延、そしてアルファが減衰する中でシグナルを毎分再校正する運用能力に宿る。学術とデスクが再会する地点で、核心は変わらない。板情報を読む眼差しである。

References

  • Kyle, A.S. (1985). "Continuous Auctions and Insider Trading." Econometrica 53(6): 1315–1335.
  • Glosten, L.R., Milgrom, P.R. (1985). "Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders." Journal of Financial Economics 14(1): 71–100.
  • Almgren, R., Chriss, N. (2001). "Optimal Execution of Portfolio Transactions." Journal of Risk 3(2): 5–39.
  • Avellaneda, M., Stoikov, S. (2008). "High-Frequency Trading in a Limit Order Book." Quantitative Finance 8(3): 217–224.
  • Stoll, H.R. (1989). "Inferring the Components of the Bid-Ask Spread: Theory and Empirical Tests." Journal of Finance 44(1): 115–134.
  • Huang, R.D., Stoll, H.R. (1997). "The Components of the Bid-Ask Spread: A General Approach." Review of Financial Studies 10(4): 995–1034.
  • Cont, R., Stoikov, S., Talreja, R. (2010). "A Stochastic Model for Order Book Dynamics." Operations Research 58(3): 549–563.
  • Bacry, E., Mastromatteo, I., Muzy, J.-F. (2015). "Hawkes Processes in Finance." Market Microstructure and Liquidity 1(1).
  • Almgren, R., Thum, C., Hauptmann, E., Li, H. (2005). "Direct Estimation of Equity Market Impact." Risk magazine, July 2005.
  • Cartea, A., Jaimungal, S., Penalva, J. (2015). Algorithmic and High-Frequency Trading. Cambridge University Press.
  • Lehalle, C.-A., Laruelle, S. (2018, 2026 第2版). Market Microstructure in Practice. World Scientific.
  • Bouchaud, J.-P., Bonart, J., Donier, J., Gould, M. (2018). Trades, Quotes and Prices: Financial Markets Under the Microscope. Cambridge University Press.
  • Cont, R., De Larrard, A. (2013). "Price Dynamics in a Markovian Limit Order Market." SIAM Journal on Financial Mathematics 4(1): 1–25.
  • Perold, A.F. (1988). "The Implementation Shortfall: Paper Versus Reality." Journal of Portfolio Management 14(3): 4–9.
  • NASDAQ TotalView-ITCH 5.0 Specification: https://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NQTVITCHSpecification.pdf
  • KRX 市場運営規程: http://regulation.krx.co.kr/
  • JPX arrowhead システムホワイトペーパー: https://www.jpx.co.jp/english/equities/trading/domestic/