跳轉到

2010 -- 閃電崩盤與高頻交易:毫秒級的市場#

案件描述#

2010 年 5 月 6 日下午 2:32,美國股市發生史上最離奇的崩盤:

  • 道瓊指數在 5 分鐘內暴跌近 1,000 點(約 9%);
  • 成交量爆增到每秒數十萬筆;
  • 部分股票(如 Accenture)以 0.01 美元成交——一分錢賣一股;P&G 暴跌 35%;
  • 20 分鐘後,市場又反彈回原位。

這就是「閃電崩盤」(Flash Crash)。SEC 與 CFTC 的官方報告(2010)指出元凶是一支演算法賣單引發的流動性雪崩——而它發生的速度,說明市場已經完全進入毫秒級演算法交易的時代。

前因:高頻交易的崛起#

  • 最佳執行的演算法化(Almgren–Chriss 2000,見 2000-AlmgrenChriss最佳執行.md):機構訂單由演算法拆單執行。
  • 做市演算法:Avellaneda–Stoikov(2008)把做市變成隨機控制問題——高頻做市商用毫秒級速度提供買賣價差。
  • 速度軍備競賽:2000 年代末,交易延遲從秒 → 毫秒 → 微秒;券商花數億美元縮短光纖路徑(芝加哥到紐約的微波塔)。
  • 線索:到 2010 年,美股約 50% 以上的成交量來自高頻交易(HFT)——市場已經是演算法互相交易的世界。

推理過程#

線索一:官方報告的時間線#

SEC/CFTC 報告(2010)與 Kirlenko 等(2015)的學術分析重建了整個案件:

  1. 2:32:共同基金 Waddell & Reed 用演算法賣出 75,000 份 E-mini S&P 500 期貨合約(約 41 億美元)——演算法設定「按成交量比例(POV)」賣出,不考慮價格。
  2. 2:32–2:45:高頻做市商先買後賣(快速倒手),持倉時間從平均數秒降到數十毫秒——流動性看似存在,實際是「虛假的流動性」。
  3. 2:45:做市商持倉爆增 → 停止報價(流動性蒸發)→ 演算法繼續按 POV 賣出 → 價格雪崩。
  4. 2:45:28:部分股票的買單報價跌到 0.01 美元(「stub quotes」——做市商的防護性最低報價被觸發)。
  5. 2:47:CME 的停損邏輯(Stop Logic)暫停期貨交易 5 秒 → 所有演算法同步重置 → 市場反彈。

線索二:流動性的數學本質#

偵探的核心推理:閃電崩盤的本質是「流動性不是常數,是狀態相依的」。

  • Almgren–Chriss 模型假設衝擊函數 \(\eta\) 是常數——但做市商的報價深度 \(D\) 隨持倉、波動率與壓力劇變:
\[ \text{實際衝擊} = \frac{\text{交易量}}{\text{報價深度}(t)} \]

當 \(D(t) \to 0\) ,同樣的交易量產生無限大的衝擊——一分錢成交就是 \(D \to 0\) 的極端案例。

  • Kirlenko–Kyle–Samadi–Tuzun(2015)用交易員層級資料證明:HFT 在崩盤前「買漲賣跌」(趨勢追隨行為),放大而非吸收了波動。

線索三:與 1987 年的同構#

1987 黑色星期一 2010 閃電崩盤
元凶 投資組合保險程式 POV 演算法賣單 + HFT
放大器 正回饋:跌→賣→更跌 流動性蒸發:深度→0
速度 分鐘級(人工執行) 毫秒級(演算法執行)
解法 熔斷機制 Stop Logic + 之後的熔斷改革

同一個教訓:所有人都用同一類演算法時,系統性風險以更快的速度重演(見 1987-黑色星期一與投資組合保險.md)。

後果#

  • 監管改革:
  • 熔斷機制改革(2010–2012):個股熔斷(Limit Up-Limit Down)、市場熔斷標準更新
  • stub quotes 廢除(2010)
  • SEC 的 Market Access Rule(2010):券商必須對演算法接入設防護(kill switches)
  • MiFID II(2018,歐盟):HFT 需註冊、演算法需測試
  • 做市演算法的修正:做市商加入壓力偵測與自動停手邏輯。
  • 學科化:最佳執行與做市成為隨機控制的完整學科(Cartea–Jaimungal 2015)。
  • 速度的反思:IEX(2013,Banks 的 Speed Traders 書與《Flash Boys》2014)的 350 微秒延遲線——「速度不是一切」的反叛。
  • 2017 年後:機器學習進入交易——深度學習的執行與避險(見 2017-深度避險.md)。

現代程式重現:流動性蒸發的雪崩#

import numpy as np

def flash_crash_sim(n_steps=300, sell_rate=0.002, depth0=0.05, seed=0):
    """流動性蒸發:報價深度隨壓力下降 → 衝擊爆增"""
    rng = np.random.default_rng(seed)
    price = 1.0; depth = depth0
    path = [price]
    for _ in range(n_steps):
        pressure = (1 - price)                    # 價格越低壓力越大
        depth = max(depth0 * (1 - 3*pressure), 0.001)  # 深度蒸發
        impact = sell_rate / depth                # 衝擊 = 量/深度 → 爆增
        price = price - impact - rng.normal(0, 0.001)
        path.append(price)
    return np.array(path)

path = flash_crash_sim()
print("最大瞬時跌幅:", (path.min() - 1) * 100, "%")
# 深度蒸發 → 衝擊爆增 → 閃電崩盤的數學本質

偵探筆記#

  • 動機:POV 演算法不考慮價格 + HFT 的虛假流動性
  • 工具:最佳執行、做市隨機控制、狀態相依的流動性
  • 遺產:熔斷改革、做市的壓力邏輯、IEX 的速度反叛
  • 核心教訓:流動性是狀態相依的——它會在最有需要的那一刻蒸發。

參考資料#

  • SEC & CFTC (2010). Findings Regarding the Market Events of May 6, 2010.
  • Kirilenko, A., Kyle, A., Samadi, M., Tuzun, T. (2015). "The Flash Crash: The Impact of High Frequency Trading on an Electronic Market". Journal of Finance.
  • Lewis, M. (2014). Flash Boys. W.W. Norton.