← 返回部落格列表 Millennium 量化實習 OA 面經|機率 + Pandas + 最優執行 VO代面與 VO輔助指南
Millennium

Millennium 量化實習 OA 面經|機率 + Pandas + 最優執行 VO代面與 VO輔助指南

2026-05-20

Millennium Management 是全球最大的多策略對沖基金之一,旗下 PM pod 數量近 300。Millennium 的 Quant Intern / Quant Researcher OA 在過去兩年內已經形成穩定模型——機率與期望、Pandas 時間序列、最優執行三大主線。本文按一畝三分地 + Wall Street Oasis 高頻面經做主題整理,並補充 VO代面 / VO輔助 實作備考。

Millennium OA 概覽

維度 Quant Intern Quant Researcher
平台 HackerRank + 自建 HackerRank + 郵件附件
時長 75-120 分鐘 120-180 分鐘
題量 4-6 題(含機率 + Pandas + 程式設計) 3-4 道大題
難度 LC Medium-Hard + 機率扎實 偏研究 + 實作
重點 機率、Pandas、最優執行 因子構造、回測、模型

題型一:機率與期望

Millennium 的機率題以「幾何想像 + 簡單條件」為主,不會出現晦澀的特殊分布。

代表題 1:抽牌期望

一副 52 張牌洗勻後從頂部依次抽取。期望抽到第一張紅心 (Heart) 的位置是?

思路:13 張紅心把 52 張牌分成 14 段(前、中、後),由對稱性,第一張紅心前的「非紅心」期望 = (52 − 13) / (13 + 1) = 39/14。所以第一張紅心位置期望 = 39/14 + 1 ≈ 3.786。

代表題 2:隨機漫步過零次數

簡單隨機漫步 S_n = X_1 + ... + X_n,每一步 X_i = ±1 等機率。求 S_n = 0 的次數期望(n 給定)。

from math import comb

def expected_zero_crossings(n):
    total = 0
    for k in range(2, n + 1, 2):
        prob = comb(k, k // 2) / (2 ** k)
        total += prob
    return total

Millennium 機率題最忌當場列方程——先寫直覺答案,再用 simulation 驗證,最後給閉式。

題型二:Pandas 時間序列

Millennium OA 經常給一段 .csv 風格的行情資料,要求用 Pandas 完成多步指標計算。

代表題:組合的日 PnL + 滾動 Sharpe

import pandas as pd
import numpy as np

def portfolio_metrics(df: pd.DataFrame, window: int = 60) -> pd.DataFrame:
    """
    df 必含欄: date, ticker, close, weight
    回傳每天的組合收益 + 滾動 Sharpe
    """
    df = df.sort_values(["ticker", "date"]).copy()
    df["ret"] = df.groupby("ticker")["close"].pct_change()
    pnl = (df["ret"] * df["weight"]).groupby(df["date"]).sum()
    rolling = pnl.rolling(window=window)
    sharpe = rolling.mean() / rolling.std() * np.sqrt(252)
    return pd.DataFrame({"pnl": pnl, "sharpe": sharpe})

Follow-up 1:要求處理停牌(缺失 close 時不能貢獻 pnl)。 Follow-up 2:要求支援 跨幣別(df 多一欄 currency + fx_rate)。

題型三:最優執行 / TWAP

代表題:分段最少 market impact 執行

需要在 T 個時間段內賣出 Q 股,每段執行量 q_t。每段的 market impact 函數 cost(q_t) = α · q_t²(α > 0),要求最小化總 cost。

思路:拉格朗日法,可證最優解是 q_t = Q / T(均勻切分,TWAP)。如果加約束 q_t ≤ cap,轉化為帶上界的二次規劃。

def twap_with_cap(Q, T, cap):
    if Q <= cap * T:
        return [Q / T] * T  # 均勻
    full = Q // cap
    remainder = Q - full * cap
    schedule = [cap] * full + [remainder] + [0] * (T - full - 1)
    return schedule[:T]

Millennium 面試官最愛問的 follow-up 是:「如果 impact 是 α · q + β · q² 呢?」——答案是仍均勻,但需要重新求導。

一畝三分地高頻題速查

類別 頻率 備考核心
機率 / 期望 ★★★★★ 對稱性、indicator、simulation
Pandas 時間序列 ★★★★★ groupby + rolling
最優執行 / TWAP ★★★★ 凸最佳化、拉格朗日
因子構造 ★★★ IC / IR、winsorize
簡化做市 ★★ bid-ask spread

VO 流程

Millennium VO 通常 4-5 輪:

  1. HR 電話:動機、組別偏好(25 min)
  2. Quant 技術面 1:機率 + 簡單數學(45 min)
  3. Quant 技術面 2:Pandas live coding + 專案(60 min)
  4. PM Pod 匹配面:因子討論 + Sharpe(45 min)
  5. Hiring Manager:風險、行為題(30 min)

VO代面 / VO輔助 備考路徑

實戰做法

oavoservice 的 VO代面 + VO輔助 一體化服務

針對 Millennium Quant 4-5 輪 VO(HR / Quant ×2 / PM pod / HM),oavoservice 提供:

具體方案與報價,加微信 Coding0201 溝通。

7 天衝刺方案

天數 任務
D1 綠皮書第 1-3 章 + 隨機漫步 5 題
D2 Pandas 時間序列:組合 PnL / 滾動 Sharpe 一類 5 題
D3 最優執行:Almgren-Chriss 推導一遍
D4 因子構造:IC、IR、turnover 實作一遍
D5 1 次完整 90 分鐘 OA mock
D6 PM Pod 面:1 個因子講解 + 1 個風險問題
D7 行為面 STAR:風險意識 + 團隊協作

FAQ

Millennium 機率題難嗎?

整體在 IMO / Putnam 入門級,但口語化講清楚是最大的難點。建議先寫直覺,再 simulation 驗證,最後閉式。

Pandas 不熟怎麼補?

最快路徑:把 groupbyrollingmerge_asofresample 各練 10 題。Millennium 幾乎每場都會讓 live coding 一段。

Almgren-Chriss 一定要懂嗎?

不必全部推完,但要能講清楚為什麼 TWAP 是凸 quadratic cost 下的最優解,以及加上 cap / 風險厭惡後的變化方向。

Quant Intern 沒過冷卻期?

通常 12 個月。換組(如從 Statistical Arb 改投 Macro)一般不算同一池。


正在準備 Millennium Quant OA / VO?

oavoservice 提供 Millennium / Citadel / Two Sigma / Jane Street 等頂級 quant 機構的 機率題專項輔導、Pandas live coding、最優執行推導、PM Pod 面劇本等 VO輔助 服務。我們的 mentor 來自一線 quant 團隊,可以針對 Intern / Researcher 制定 1-2 週衝刺方案。

👉 立即加入微信:Coding0201獲取 Millennium 高頻題與 VO輔助方案


聯絡方式

Email: [email protected]
Telegram: @OAVOProxy