← 返回博客列表 Millennium Quant OA 速通|Pandas + 概率 + 最优执行 VO辅助
Millennium

Millennium Quant OA 速通|Pandas + 概率 + 最优执行 VO辅助

2026-05-23

Millennium 是全球资管规模 Top 5 的多策略对冲基金,旗下 ~300 个独立 PM pod。Quant Intern / NewGrad OA 是 pod 入口的第一道筛子,难度高、时间紧、口味偏「Pandas + 概率 + 数值优化」。本文整理 OA 三大主线的高频题型,附 Python 解法与 VO辅助 实战路径。

Millennium Quant OA 概览

维度 详情
平台 HackerRank / 自研 IDE
时长 90–120 分钟
题量 3–4 道(含 1 道 Pandas)
难度 LC Medium-Hard + 数值题
评分 自动判题 + 数值精度阈值

主线一:Pandas 数据处理

题目

df: [date, symbol, close, volume]。求每个 symbol 过去 20 日 VWAP 与今日 close 的 z-score。

import pandas as pd
import numpy as np

def vwap_zscore(df, window=20):
    df = df.sort_values(['symbol', 'date']).copy()
    df['pv'] = df['close'] * df['volume']
    g = df.groupby('symbol', group_keys=False)
    df['vwap20'] = g['pv'].rolling(window).sum().reset_index(0, drop=True) \
                 / g['volume'].rolling(window).sum().reset_index(0, drop=True)
    df['mean20'] = g['close'].rolling(window).mean().reset_index(0, drop=True)
    df['std20']  = g['close'].rolling(window).std().reset_index(0, drop=True)
    df['z'] = (df['close'] - df['mean20']) / df['std20'].replace(0, np.nan)
    return df[['date', 'symbol', 'vwap20', 'z']]

注意groupby + rolling 顺序、std 为 0 的处理。

主线二:概率推理

题目

n 次硬币,正面概率 p。求至少 k 次连续正面的概率(用 DP)。

def prob_at_least_k_consec_heads(n, k, p):
    # dp[i] = P(no run of k by step i)
    dp = [0.0] * (n + 1)
    dp[0] = 1.0
    # 用「前 j 个里没有 k 连」的滚动 DP
    no_run = [1.0] * (n + 2)
    fail = [0.0] * (n + 2)
    # f(n) = P(no k-run in n flips), 递推:
    # f(n) = sum_{j=1..k} p^(j-1) * (1-p) * f(n-j) for n >= k - 1
    f = [0.0] * (n + 2)
    f[0] = 1.0
    for i in range(1, n + 1):
        s = 0.0
        for j in range(1, min(k, i) + 1):
            s += (p ** (j - 1)) * (1 - p) * f[i - j]
        if i >= k:
            f[i] = s
        else:
            f[i] = s + p ** i  # 还能直接 i 次正面但不够 k
    return 1.0 - f[n]

注意f 的边界 i < k 要单独处理。Millennium 喜欢追问「为什么不能用蒙特卡洛 + 大数定律」——答案:OA 自动判题对精度阈值是 1e-6,蒙卡需要 1e8 次模拟才能稳过

主线三:最优执行

题目

要在 T 个时间步内卖出 Q 股,每步成交量 q_t,单步 market impact ∝ q_t²。求最小总 impact(Almgren-Chriss 简化版)。

def optimal_execution(Q, T, lam=1e-3):
    # 等量切分是最优解(无趋势 + 平方 impact)
    q = Q / T
    impact = T * lam * q * q
    schedule = [q] * T
    return schedule, impact

进阶版(出现率 ~30%)会附加风险厌恶 + drift 项,需要解 Almgren-Chriss 解析解;这部分可以在 OA 中给出公式说明 + 简化解法。

高频题速查

题型 频率 核心模板
Pandas rolling + groupby ★★★★★ groupby_keys=False + reset_index
概率 / 期望 DP ★★★★ 状态压缩 + 边界
最优执行 ★★★★ 等量切分 / Almgren-Chriss
数值积分 ★★★ Simpson / Gauss-Legendre
Top-K + heap ★★★ heapq + 复杂键

VO辅助 实战路径

oavoservice 套餐

针对 Millennium Quant 这种 4–5 轮、Pandas + 概率 + 数值优化全维度考核:

加微信 Coding0201 沟通方案与报价。

从 Pandas 卡顿到顺利通过 Millennium OA

这次很高兴帮这批同学顺利通过 Millennium Quant OA。很多同学反馈,自己刷 LeetCode 时根本练不到 Pandas + 数值精度 这两个 quant 特有维度,到 OA 当天看到 groupby + rolling + std=0 这种组合就慌。

如果你也在准备 Millennium、Citadel、Point72、Two Sigma 这类 multi-strat 对冲基金的 Quant Intern / NewGrad OA / VO,感觉一个人复习方向模糊,欢迎联系 oavoservice。我们会根据你的具体水平和弱点,提供专业的 OA / VO 实战辅助服务和一对一 VO辅助 指导。


FAQ

Millennium OA 用什么语言?

主流是 Python(Pandas 题强制)。少数 pod 接受 C++ / Q / kdb+。

Pandas 题精度阈值?

通常 1e-6。groupbyrolling.std() 在样本量不足时会 NaN,要正确处理。

Millennium VO 是和 PM 直接面吗?

是。一旦 OA + 第一轮通过,会直接被 1–3 个 pod 的 PM 抢,每个 pod 独立 onsite。

不同 pod 的 OA 一样吗?

OA 阶段共用题库;onsite 阶段每个 pod 自己出题,equity / fixed income / commodities 风格差异大。


正在准备 Millennium / 头部 multi-strat 的 Quant 面试?

👉 立即添加微信:Coding0201获取 Millennium 高频题与 VO辅助 方案


联系方式

Email: [email protected]
Telegram: @OAVOProxy