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 # 均匀
# 否则需要拉满 cap 的段数
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 轮:
- HR 电话:动机、组别偏好(25 min)
- Quant 技术面 1:概率 + 简单数学(45 min)
- Quant 技术面 2:Pandas live coding + 项目(60 min)
- PM Pod 匹配面:因子讨论 + Sharpe(45 min)
- Hiring Manager:风险、行为题(30 min)
VO代面 / VO辅助 备考路径
实战做法
- 概率刷题:《Heard on the Street》第 1-3 章 + 《A Practical Guide to Quantitative Finance Interviews》(绿皮书)
- Pandas 速记:把
groupby、rolling、merge_asof、resample各练 10 题 - 最优执行:阅读 Almgren-Chriss 论文(2000)+ 自己手推一遍
- PM Pod 面:准备 1 个你最熟悉的因子,能讲清楚 IC、IR、turnover
oavoservice 的 VO代面 + VO辅助 一体化服务
针对 Millennium Quant 4-5 轮 VO(HR / Quant ×2 / PM pod / HM),oavoservice 提供:
- VO辅助:概率刷题 + Pandas live coding + Almgren-Chriss 推导 + PM pod 因子讲解 mock
- VO代面:面试当天实时答题辅助,针对概率推理 + Pandas 时间序列 + PM pod 因子讨论临场支援
- 行为面剧本:围绕「风险意识 + 团队协作」准备 STAR 故事
具体方案与报价,加微信 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 不熟怎么补?
最快路径:把 groupby、rolling、merge_asof、resample 各练 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