← 返回博客列表 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  # 均匀
    # 否则需要拉满 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 轮:

  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