Skip to content

SoYuCry/awesome-quant-interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 

Repository files navigation

Awesome Quant Interview

Awesome

量化面试、策略论文、开源工具与学习资源。

目录


开源工具

回测框架

  • 🌟 VectorBT - 向量化回测引擎,NumPy/Numba 加速,大规模参数扫描首选
  • 🌟 Backtrader - 事件驱动回测框架,功能全面,支持实盘
  • Zipline Reloaded - Quantopian 经典引擎的社区维护版

量化平台

  • 🌟🌟 Qlib - 微软 AI 量化平台,数据→模型→回测→分析全流程
  • 🌟 vnpy - 国内最流行的量化框架,股票/期货/期权/加密货币实盘
  • 🌟 Hummingbot - 开源做市与套利机器人,CEX + DEX 全覆盖

AI + Finance

  • 🌟🌟 RD-Agent - 微软亚研院自动化研发 Agent,读论文→做因子→跑实验,集成 Qlib
  • 🌟 FinRL - 金融强化学习框架
  • FinGPT - 开源金融 LLM,LoRA 微调,情感分析/研报解读
  • FinRobot - 基于 LLM 的多 Agent 金融分析平台

研报复现

  • 🌟🌟 QuantsPlaybook - 券商金工研报复现合集(华泰/光大/招商/国信),100+ 策略
  • huatai-finengi-report - 华泰金工研报集合:CNN 选股、时序交叉验证、ML 多因子

量化库

  • 🌟 QuantLib - 工业级衍生品定价库,C++ 内核 + Python 绑定
  • cvxpy - Python 凸优化,组合优化/风险预算
  • NautilusTrader - 高性能回测+实盘,Rust 内核 + Python API
  • Polars - 比 pandas 快 10-50x 的数据处理库

Awesome Lists


策略方向与论文

量化交易不是一条路,而是很多条。不同方向的底层逻辑、数据频率、持仓周期差异巨大,选方向比选策略更重要。下面按主流方向整理了奠基性论文和经典著作,每篇都是这个领域绕不开的工作。

CTA / 管理期货

在期货和外汇市场上做系统化趋势与动量。天然多空双向,对冲股市 Beta,08 年金融危机期间不少 CTA 基金逆势盈利,所以也叫"危机 Alpha"。国内 CTA 私募近年发展很快,是量化求职的热门方向之一。

  • 🌟 Moskowitz, Ooi & Pedersen (2012). Time Series Momentum. JFE
  • 🌟 Hurst, Ooi & Pedersen (2017). A Century of Evidence on Trend-Following Investing. AQR
  • Fung & Hsieh (2001). The Risk in Hedge Fund Strategies: Theory and Evidence from Trend Followers. RFS
  • Hamill, Rattray & Van Hemert (2016). Trend Following: Equity and Bond Crisis Alpha. AQR
  • Baltas & Kosowski (2013). Momentum Strategies in Futures Markets and Trend-Following Funds.
  • Levine & Pedersen (2016). Which Trend Is Your Friend? FAJ
  • 📖 Perry Kaufman.《Trading Systems and Methods》

趋势跟踪

和 CTA 高度重叠,但更纯粹地聚焦方向性信号。胜率通常只有 30%-40%,靠盈亏比赚钱。核心不是预测,而是跟随——趋势来了跟上,反转了止损走人。纪律比模型重要。

  • 🌟 Jegadeesh & Titman (1993). Returns to Buying Winners and Selling Losers. JF
  • 🌟 Asness, Moskowitz & Pedersen (2013). Value and Momentum Everywhere. JF
  • Lempérière et al. (2014). Two Centuries of Trend Following. JIS
  • Faber (2007). A Quantitative Approach to Tactical Asset Allocation. JWM
  • Baz et al. (2015). Dissecting Investment Strategies in the Cross Section and Time Series.
  • Babu et al. (2020). You Can't Always Trend When You Want. JPM
  • 📖 Andreas Clenow.《Following the Trend》

高频交易

毫秒甚至微秒级持仓,通过速度优势和微观结构信息赚取微小但高频的利润。基础设施(co-location、FPGA、网络延迟)是真正的壁垒,策略容量有限但利润率极高。面试中微观结构的论文是必考内容。

  • 🌟 Kyle (1985). Continuous Auctions and Insider Trading. Econometrica
  • 🌟 Glosten & Milgrom (1985). Bid, Ask and Transaction Prices in a Specialist Market. JFE
  • 🌟 Avellaneda & Stoikov (2008). High-Frequency Trading in a Limit Order Book. QF
  • Cont, Stoikov & Talreja (2010). A Stochastic Model for Order Book Dynamics. OR
  • Bouchaud, Farmer & Lillo (2009). How Markets Slowly Digest Changes in Supply and Demand.
  • Menkveld (2013). High Frequency Trading and the New Market Makers. JFM
  • 📖 Cartea, Jaimungal & Penalva (2015).《Algorithmic and High-Frequency Trading》
  • 📖 Hasbrouck (2007).《Empirical Market Microstructure》
  • 📖 Ernest Chan.《Quantitative Trading》

做市

在买卖两端持续报价,赚取 bid-ask spread。听起来简单,难点在于逆向选择——和知情交易者成交就是亏钱。做市的数学框架非常优美,Avellaneda-Stoikov 模型几乎是所有做市面试的起点。Hummingbot 等开源项目让你可以在加密市场上实际跑做市策略。

  • 🌟 Ho & Stoll (1981). Optimal Dealer Pricing Under Transactions and Return Uncertainty. JFE
  • 🌟 Guéant, Lehalle & Fernandez-Tapia (2013). Dealing with the Inventory Risk. MFE
  • Grossman & Miller (1988). Liquidity and Market Structure. JF
  • Stoikov (2018). The Micro-Price: A High-Frequency Estimator of Future Prices. QF
  • Glosten & Harris (1988). Estimating the Components of the Bid-Ask Spread. JFE
  • Amihud & Mendelson (1980). Dealership Market: Market-Making with Inventory. JFE
  • Guilbaud & Pham (2013). Optimal High-Frequency Trading with Limit and Market Orders. QF

统计套利

利用资产间的统计关系(协整、相关性、因子结构),在偏离时建仓、回归时平仓。市场中性,不赌方向。配对交易是最经典的入门,但现代统计套利早已进化到 PCA 驱动的篮子交易和机器学习信号。需要警惕相关性崩溃的尾部风险。

  • 🌟 Engle & Granger (1987). Co-integration and Error Correction. Econometrica
  • 🌟 Gatev, Goetzmann & Rouwenhorst (2006). Pairs Trading: Performance of a Relative-Value Arbitrage Rule. RFS
  • Avellaneda & Lee (2010). Statistical Arbitrage in the US Equities Market. QF
  • Kakushadze (2016). 101 Formulaic Alphas. Wilmott
  • Krauss (2017). Statistical Arbitrage Pairs Trading Strategies: Review and Outlook. JES
  • 📖 Pole (2007).《Statistical Arbitrage》
  • 📖 Vidyamurthy (2004).《Pairs Trading: Quantitative Methods and Analysis》

期权与波动率

不赌涨跌,赌波动率。利用期权的非线性特性和隐含波动率的错误定价获利。策略包括波动率套利、gamma scalping、dispersion trading、尾部对冲等。Black-Scholes 是起点,但真正赚钱靠的是对波动率曲面的理解——Gatheral 的书是业界圣经,粗糙波动率(Rough Vol)是近年最大的理论突破。

  • 🌟 Black & Scholes (1973). The Pricing of Options and Corporate Liabilities. JPE
  • 🌟 Heston (1993). A Closed-Form Solution for Options with Stochastic Volatility. RFS
  • 🌟 Gatheral, Jaisson & Rosenbaum (2018). Volatility Is Rough. QF
  • Dupire (1994). Pricing with a Smile. Risk
  • Carr & Madan (1999). Option Valuation Using the Fast Fourier Transform. JCF
  • Bates (1996). Jumps and Stochastic Volatility. RFS
  • Bergomi (2005). Smile Dynamics. Risk
  • 📖 Gatheral (2006).《The Volatility Surface: A Practitioner's Guide》
  • 📖 Taleb (1997).《Dynamic Hedging: Managing Vanilla and Exotic Options》

书单与资源

书单

面试

书名 说明
🌟《A Practical Guide to Quantitative Finance Interviews》(Xinfeng Zhou) 绿皮书,量化面试人手一本,概率/数学/脑筋急转弯全覆盖
《Heard on the Street》(Timothy Crack) 华尔街经典面试题集,偏概率和智力题
《Quant Job Interview Questions and Answers》(Mark Joshi) 偏衍生品定价方向,适合期权岗

数学与统计

书名 说明
🌟《Introduction to Probability》(Blitzstein & Hwang) Harvard 概率论教材,有免费 PDF,例题极好,面试前刷完前 6 章
《Probability and Statistics for Engineering and the Sciences》(Devore) 概率统计标准教材,覆盖面广
《All of Statistics》(Wasserman) 统计学速成,写给 CS 背景的人看的,紧凑高效
🌟《Analysis of Financial Time Series》(Tsay) 金融时间序列的权威教材,ARMA/GARCH/协整全覆盖
🌟《Stochastic Calculus for Finance I & II》(Shreve) 随机微积分的金标准,I 是离散,II 是连续,推导 Black-Scholes 的必经之路
《Convex Optimization》(Boyd & Vandenberghe) 凸优化经典,有免费 PDF,组合优化和风控都离不开

编程

书名 说明
《Python for Data Analysis》(McKinney) pandas 作者亲著,数据清洗的工具书
《Effective Modern C++》(Meyers) 现代 C++ 最佳实践,低延迟系统岗必读
《Python for Finance》(Hilpisch) 从零到量化系统的 Python 实战
《Introduction to Linear Algebra》(Strang) 配合 MIT 18.06 公开课食用,PCA/因子模型的数学基础

因子与策略

书名 说明
《Quantitative Equity Portfolio Management》(Chincarini & Kim) 量化股票组合从因子到实盘的全流程
🌟《Advances in Financial Machine Learning》(de Prado) 金融 ML 实战圣经,数据结构化/防过拟合/回测方法论,业界人手一本
🌟《Active Portfolio Management》(Grinold & Kahn) 主动管理的理论框架,信息比率、alpha 转移,基金公司研究员必读
《Options, Futures, and Other Derivatives》(Hull) 衍生品入门标准教材,覆盖期货/互换/期权,适合建立全局观
《Option Volatility and Pricing》(Natenberg) 期权交易实战视角,Greeks 直觉讲得很好

机器学习

书名 说明
🌟《The Elements of Statistical Learning》(Hastie et al.) 统计学习理论经典,有免费 PDF,树模型/正则化/集成学习讲得最透彻
《Deep Learning》(Goodfellow et al.) "花书",深度学习理论基础,CNN/RNN/GAN/优化全覆盖
《Machine Learning for Asset Managers》(de Prado) 资管视角的 ML,聚类/特征重要性/组合构建,薄但密度极高

中文

书名 说明
🌟 石川 等.《因子投资:方法与实践》 中文因子投资圣经,从因子定义到组合构建到陷阱规避,系统性最强
丁鹏.《量化投资:策略与技术》 国内量化入门经典,适合建立全局认知
杨博理 等.《量化投资:以Python为工具》 Python 量化实操入门,有代码可跑

博主与公众号

  • 🌟 石川 / 川总写量化 - 知乎 / 公众号. 国内因子投资写得最好的人,没有之一。每篇文章都有学术论文支撑,但写得让非科班也能看懂。做因子方向必须关注。
  • 🌟 因子动物园 (Factor Zoo) - 公众号. 石川团队出品,系统梳理学术因子文献,追踪前沿论文,比自己翻 SSRN 效率高十倍。
  • 🌟 量化投资与机器学习 (QIML) - 公众号. 国内最大的量化公众号,覆盖 ML 策略、因子研究、行业招聘动态,信息密度高。
  • 交易门 - 播客/公众号. 对话国内外顶尖交易员和量化基金经理,听行业里的人怎么想问题。
  • 数量经济学 - 知乎/公众号. 偏学术向,计量经济学与金融实证方法,适合想打扎实理论基础的人。
  • 大邓和他的Python - 知乎/B站. Python 量化编程教程,适合零基础入门。

社区与平台

  • 🌟 聚宽 JoinQuant - 国内最大量化投研平台,免费数据、回测引擎、社区策略分享,入门首选。
  • 米筐 RiceQuant - 专业量化研究平台,数据质量高,机构用户多。
  • 优矿 Uqer - 通联数据旗下,数据全面,API 友好。
  • QuantConnect - 国际量化平台,Lean 引擎开源,支持多资产多市场。
  • 发明者量化 FMZ - 数字货币/期货量化,支持多语言策略,社区活跃。
  • 知乎:量化交易 - 高质量问答和专栏,搜具体问题经常能找到好答案。
  • 经管之家 - 老牌经济金融学术论坛,有不少历史沉淀的好帖。

A股数据源

数据源 类型 链接
🌟 Tushare Pro 免费,股票/基金/期货/可转债 tushare.pro
🌟 AKShare 开源免费 akfamily/akshare
BaoStock 免费,日K/分钟K/财报 baostock.com
Wind 万得 机构级,最全(付费) wind.com.cn
东方财富 Choice 机构级(付费) choice.eastmoney.com
efinance 开源爬虫 mpquant/efinance

券商金工研报

团队 研究方向
🌟 华泰金工 「人工智能选股」系列、因子体系
🌟 光大金工 因子择时、事件驱动
天风金工 基本面因子、另类数据
中金量化 宏观量化、资产配置
招商金工 多因子模型、行业轮动
开源证券金工 覆盖面广

面试备考

竞赛

学术论文源

  • SSRN - 量化金融工作论文
  • arXiv q-fin - 金融领域最新预印本
  • NBER Working Papers
  • Risk.net / Journal of Financial Economics / Journal of Portfolio Management

面试八股文

第四篇:数学与统计基础

4.1 概率论

Q1:什么是条件概率?贝叶斯公式的直觉是什么?

标准答案:

条件概率 $P(A|B) = P(AB) / P(B)$,表示在B已发生的条件下A发生的概率。

贝叶斯公式:

$$P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}$$

直觉:贝叶斯公式是"用新证据更新旧信念"的数学表达。$P(A)$ 是先验(你原来的判断),$P(B|A)$ 是似然(新证据在你判断下出现的可能性),$P(A|B)$ 是后验(看到证据后的新判断)。

量化应用:贝叶斯方法在信号衰减判断、因子择时、Black-Litterman模型中被广泛使用。


Q2:大数定律和中心极限定理的区别是什么?

标准答案:

  • 大数定律(LLN):样本均值随样本量增大而趋近于总体均值。强调的是收敛
  • 中心极限定理(CLT):无论总体分布如何,样本均值的分布在n足够大时近似正态分布。强调的是分布形态

关键区别:LLN告诉你"平均值会收敛到真值",CLT告诉你"收敛过程的波动长什么样"。

量化应用:CLT是计算VaR、构建置信区间、进行策略回测统计检验的理论基础。如果收益率不满足独立同分布假设(如存在自相关或异方差),CLT的收敛速度会变慢,需要用Newey-West等方法修正。


Q3:什么是鞅(Martingale)?它在金融中有什么意义?

标准答案:

鞅是一种随机过程,满足 $E[X_{t+1} | \mathcal{F}_t] = X_t$,即给定当前信息,未来期望等于当前值。

金融意义

  • 在风险中性测度下,折现后的资产价格是鞅——这是期权定价的理论基础
  • 如果市场价格是鞅,则不存在趋势性的可预测利润,与有效市场假说一致
  • 鞅差分序列(Martingale Difference Sequence)常用于检验收益率的可预测性

Q4:解释常见的概率分布及其在量化中的应用

标准答案:

分布 特征 量化应用
正态分布 均值对称、薄尾 收益率建模的基准假设(但实际中有偏度和峰度)
对数正态分布 取对数后为正态 股票价格建模(GBM中价格服从对数正态)
t 分布 厚尾 更真实地描述收益率尾部风险,小样本推断
泊松分布 离散事件计数 跳跃扩散模型中的跳跃次数
指数分布 等待时间 订单到达间隔建模(高频)

延伸:实际收益率分布通常呈现"尖峰厚尾"(leptokurtic),正态假设会低估极端风险。用Student-t、GED或混合正态分布能更好地拟合。


4.2 数理统计与推断

Q5:什么是极大似然估计(MLE)?与矩估计(GMM)有什么区别?

标准答案:

  • MLE:寻找使观测数据出现概率最大的参数值。$\hat{\theta}{MLE} = \arg\max{\theta} \prod_{i} f(x_i | \theta)$
  • GMM(广义矩估计):利用总体矩条件与样本矩的匹配来估计参数,不需要假定完整的分布形式

核心区别:MLE需要完整的分布假设,效率高但对错误假设敏感;GMM更灵活,只需要矩条件,是半参数方法。

量化应用:GARCH模型常用MLE估计;资产定价模型(如Fama-French)的参数常用GMM估计;Hansen(1982)提出的GMM框架是实证资产定价的核心方法论。


Q6:假设检验中的 p 值到底是什么?为什么不能说"p值是假设为真的概率"?

标准答案:

p 值是在零假设为真的前提下,观测到当前统计量或更极端值的概率。

不能说"零假设为真的概率",因为p值是条件概率 $P(\text{data} | H_0)$,而不是 $P(H_0 | \text{data})$。后者需要贝叶斯框架。

量化应用中的陷阱

  • 策略回测中对数百个参数组合做假设检验,会出现多重检验问题(Multiple Testing)
  • 一个p < 0.05的策略,如果是从1000个策略中筛选出来的,真实显著性远低于5%
  • 修正方法:Bonferroni校正、Benjamini-Hochberg(FDR控制)、Bailey-López de Prado-Marcos的**"发夹弯"校正**

Q7:什么是协方差矩阵?为什么在量化中估计协方差矩阵是困难的?

标准答案:

协方差矩阵 $\Sigma$ 的第(i,j)个元素是资产i和资产j收益率的协方差。它是组合优化、风险管理的核心输入。

困难之处

  1. 维度灾难:N个资产需要估计 $N(N+1)/2$ 个参数,当N大于样本量T时,样本协方差矩阵奇异
  2. 噪声放大:样本协方差矩阵中的小特征值会被取逆时放大,导致组合权重极端
  3. 非平稳性:协方差结构随时间变化

常用解决方案

  • Ledoit-Wolf收缩估计:将样本矩阵向结构化目标(如对角阵)收缩
  • 因子模型降维:假设 $\Sigma = B F B^T + D$(因子部分 + 特异性部分)
  • 随机矩阵理论(RMT):用Marchenko-Pastur分布识别并剔除噪声特征值
  • DCC-GARCH:建模时变协方差

4.3 线性代数

Q8:特征值分解(EVD)和奇异值分解(SVD)有什么区别?在量化中怎么用?

标准答案:

  • EVD:$A = P \Lambda P^{-1}$,仅适用于方阵。$\Lambda$ 是特征值对角阵。
  • SVD:$A = U \Sigma V^T$,适用于任意矩阵。$\Sigma$ 是奇异值对角阵。

对于对称半正定的协方差矩阵,EVD和SVD等价。

量化应用

  • PCA(主成分分析):对收益率协方差矩阵做EVD,前几个主成分通常对应市场、规模、价值等系统性因子
  • 降噪:去除小特征值对应的成分
  • 正则化:SVD用于病态线性回归(岭回归本质上是对奇异值做收缩)

Q9:什么是正定矩阵?为什么协方差矩阵必须半正定?

标准答案:

正定矩阵满足对任意非零向量 $x$,$x^T A x > 0$;半正定则 $\geq 0$

协方差矩阵必须半正定,因为组合方差 $w^T \Sigma w$ 在物理意义上不能为负。如果估计出的协方差矩阵不是半正定的(如用不同时间窗口的数据拼接),需要做"最近半正定矩阵"投影(如Higham算法)。


4.4 随机过程与时间序列

Q10:什么是平稳性(Stationarity)?为什么要关心它?

标准答案:

  • 严平稳:联合分布不随时间平移改变
  • 宽平稳(弱平稳):均值和自协方差函数不随时间变化

为什么关心:几乎所有时间序列建模方法(ARMA、协整分析等)都假设平稳性。对非平稳序列直接建模会产生伪回归(Spurious Regression),R²虚高但没有真实关系。

检验方法:ADF检验、PP检验、KPSS检验(注意KPSS的零假设是平稳)。

处理方法:差分(I(1)序列差分一次变平稳)、去趋势、对数变换。


Q11:ARIMA 和 GARCH 模型的区别与联系?

标准答案:

  • ARIMA(p,d,q):建模条件均值。描述收益率本身的自回归和移动平均结构。
  • GARCH(p,q):建模条件方差。描述波动率的聚集效应(volatility clustering)。

联系:通常组合使用,ARIMA建模均值方程,GARCH建模残差的方差方程。完整模型:

$$r_t = \mu_t(\text{ARIMA}) + \epsilon_t, \quad \epsilon_t = \sigma_t z_t, \quad \sigma_t^2 = \omega + \alpha \epsilon_{t-1}^2 + \beta \sigma_{t-1}^2$$

量化应用:GARCH族模型广泛用于波动率预测、VaR计算、期权隐含波动率建模。常用扩展包括EGARCH(捕捉杠杆效应)、GJR-GARCH等。


Q12:什么是协整(Cointegration)?和相关性有什么区别?

标准答案:

  • 相关性:衡量两个变量线性关联的强度,是静态的
  • 协整:两个非平稳序列的某个线性组合是平稳的,是动态的长期均衡关系

经典例子:醉汉和他的狗——各自随机游走(非平稳),但距离围绕某个均值波动(协整)。

量化应用:配对交易(Pairs Trading)的理论基础。找到协整关系后:

  1. 构建价差 $S_t = Y_t - \beta X_t$
  2. 当价差偏离均值时建仓,回归时平仓
  3. 常用Engle-Granger两步法或Johansen检验判断协整关系

注意:高相关不代表协整,协整也不要求高相关。


4.5 随机微积分基础

Q13:什么是布朗运动?Itô引理是什么?

标准答案:

布朗运动(维纳过程) $W_t$

  • $W_0 = 0$
  • 增量独立且服从 $W_{t+s} - W_t \sim N(0, s)$
  • 路径连续但处处不可微

Itô引理:随机微积分的"链式法则"。若 $dX_t = \mu , dt + \sigma , dW_t$,则对 $f(X_t, t)$

$$df = \left(\frac{\partial f}{\partial t} + \mu \frac{\partial f}{\partial x} + \frac{1}{2}\sigma^2 \frac{\partial^2 f}{\partial x^2}\right)dt + \sigma \frac{\partial f}{\partial x} dW_t$$

比普通链式法则多了 $\frac{1}{2}\sigma^2 f''$ 项,因为 $(dW_t)^2 = dt$

量化应用:推导Black-Scholes公式、理解对冲比率(Delta)、推导各种衍生品定价公式。


Q14:几何布朗运动(GBM)的假设和局限是什么?

标准答案:

GBM模型:$dS_t = \mu S_t , dt + \sigma S_t , dW_t$

解为:$S_t = S_0 \exp\left[(\mu - \frac{\sigma^2}{2})t + \sigma W_t\right]$

假设

  • 对数收益率独立同分布且服从正态
  • 波动率恒定
  • 无跳跃

局限

  • 实际中波动率不恒定(波动率微笑/偏斜)
  • 收益率有厚尾(极端事件被低估)
  • 存在跳跃(如财报发布、政策突变)
  • 收益率存在自相关和波动率聚集

改进模型:随机波动率模型(Heston)、跳跃扩散模型(Merton)、局部波动率模型(Dupire)。


第五篇:编程(Python / C++)

5.1 Python基础与数据处理

Q15:Python中 list、tuple、dict、set 的区别与适用场景?

标准答案:

类型 可变性 有序性 查找复杂度 量化场景
list 可变 有序 O(n) 时间序列存储、策略信号列表
tuple 不可变 有序 O(n) 作为dict的key(如 (date, ticker))、函数多返回值
dict 可变 有序(3.7+) O(1) ticker→price映射、参数配置
set 可变 无序 O(1) 股票池去重、集合运算(交集并集求共同持仓)

面试高频追问:dict的底层实现是哈希表,冲突解决用开放寻址法(CPython);set也是哈希表。


Q16:深拷贝和浅拷贝的区别?在量化中踩坑的例子?

标准答案:

  • 浅拷贝copy.copy()list.copy()):创建新对象,但内部元素仍引用原对象
  • 深拷贝copy.deepcopy()):递归复制所有层级的对象

量化踩坑

# 危险:portfolio_b 和 portfolio_a 共享内部列表
portfolio_a = {'holdings': [{'ticker': 'AAPL', 'weight': 0.5}]}
portfolio_b = portfolio_a.copy()       # 浅拷贝
portfolio_b['holdings'][0]['weight'] = 0.3  # portfolio_a 也被修改了!

回测中修改了一个策略的持仓,另一个策略的持仓也被污染——这类bug极其隐蔽。


Q17:Pandas 中 applymapvectorized operations 的性能差异?

标准答案:

性能排序(快→慢):NumPy向量化 > Pandas内置方法 > apply > 纯Python循环

# 最快:向量化
df['ret'] = df['close'].pct_change()

# 较快:内置方法
df['log_ret'] = np.log(df['close'] / df['close'].shift(1))

# 慢:apply(每行调用一次Python函数)
df['signal'] = df.apply(lambda row: my_func(row['a'], row['b']), axis=1)

# 最慢:iterrows
for idx, row in df.iterrows(): ...

原则:能向量化就不用apply,能用内置方法就不自己写。处理大型tick数据时,性能差异可达100倍以上。

进阶:对无法向量化的复杂逻辑,考虑用 numba.jit 加速或用 polars 替代Pandas。


Q18:Python GIL是什么?如何在量化中实现真正的并行?

标准答案:

GIL(全局解释器锁)使得CPython中同一时刻只有一个线程执行Python字节码。

影响:CPU密集型任务(如大规模因子计算)无法通过多线程加速。

解决方案

方案 适用场景 工具
多进程 CPU密集型因子计算 multiprocessing, joblib, concurrent.futures.ProcessPoolExecutor
多线程 IO密集型(数据下载、API请求) threading, asyncio
向量化/C扩展 数值计算 NumPy, Numba, Cython
分布式计算 超大规模回测 Dask, Ray, Spark

Q19:如何避免Pandas中的 "SettingWithCopyWarning"?

标准答案:

这个警告出现在对DataFrame切片的赋值操作中,因为切片可能返回视图(view)而非副本(copy),赋值行为不确定。

# 危险写法:链式索引
df[df['sector'] == 'tech']['weight'] = 0.5  # 可能无效

# 正确写法1:.loc
df.loc[df['sector'] == 'tech', 'weight'] = 0.5

# 正确写法2:显式copy
subset = df[df['sector'] == 'tech'].copy()
subset['weight'] = 0.5

5.2 Python进阶

Q20:装饰器(Decorator)的原理?在量化系统中的实际应用?

标准答案:

装饰器本质上是一个接收函数并返回新函数的高阶函数,语法糖 @decorator 等价于 func = decorator(func)

量化中的实际应用

import time
import functools

# 1. 计时器:监控因子计算耗时
def timer(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        elapsed = time.perf_counter() - start
        print(f"{func.__name__} took {elapsed:.4f}s")
        return result
    return wrapper

# 2. 缓存:避免重复计算(如日频因子值)
from functools import lru_cache

@lru_cache(maxsize=1024)
def get_factor_exposure(ticker, date):
    ...

# 3. 重试机制:应对数据源不稳定
def retry(max_retries=3, delay=1):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            for attempt in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    if attempt == max_retries - 1:
                        raise
                    time.sleep(delay * (attempt + 1))
        return wrapper
    return decorator

Q21:Python中的生成器(Generator)是什么?在量化中的应用?

标准答案:

生成器是使用 yield 关键字的函数,它惰性地产生值,不会一次性将所有结果加载到内存。

量化应用:处理大规模tick数据时避免内存溢出。

def read_ticks(filepath):
    """逐行读取数亿行tick数据,内存占用恒定"""
    with open(filepath) as f:
        header = f.readline().strip().split(',')
        for line in f:
            values = line.strip().split(',')
            yield dict(zip(header, values))

# 流式处理,内存友好
for tick in read_ticks('huge_tick_data.csv'):
    process(tick)

也常用于滚动窗口计算、事件驱动回测引擎的信号生成等。


5.3 C++ 基础(量化面试高频)

Q22:C++ 中指针和引用的区别?

标准答案:

特性 指针 引用
可否为空 可以为nullptr 不可以,必须绑定对象
可否重新绑定 可以指向其他对象 不可以,绑定后不变
语法 需要 * 解引用 直接使用,语法透明
内存 占用空间(存地址) 通常被编译器优化为别名

量化场景:高频交易系统中传递大型订单簿对象时用 const & 避免拷贝开销;智能指针(shared_ptr, unique_ptr)管理行情数据的生命周期。


Q23:C++ 中的虚函数(virtual function)和多态是什么?

标准答案:

虚函数允许通过基类指针/引用调用派生类的重写方法,实现运行时多态。底层通过虚函数表(vtable)实现。

class Strategy {
public:
    virtual void on_market_data(const MarketData& md) = 0;  // 纯虚函数
    virtual ~Strategy() = default;  // 虚析构函数(重要!)
};

class MomentumStrategy : public Strategy {
public:
    void on_market_data(const MarketData& md) override {
        // 动量策略的具体实现
    }
};

面试追问:为什么基类析构函数要声明为virtual?——如果不声明,通过基类指针delete派生类对象时只调用基类析构函数,派生类资源不会释放,造成内存泄漏。


Q24:什么是 move 语义和右值引用?在高频系统中的意义?

标准答案:

C++11引入右值引用(&&)和 std::move,允许"窃取"临时对象的资源而非拷贝。

// 拷贝:O(n) —— 分配新内存,逐元素复制
std::vector<Order> orders2 = orders1;

// 移动:O(1) —— 直接接管 orders1 的内存
std::vector<Order> orders3 = std::move(orders1);
// orders1 此后处于"有效但未定义"状态

高频意义:在微秒级延迟的交易系统中,一次不必要的深拷贝可能就是几微秒的延迟。移动语义在订单传递、行情数据转发等热路径上至关重要。


Q25:C++ STL 容器的选择原则?

标准答案:

容器 底层结构 查找 插入/删除 量化场景
vector 连续数组 O(n) 尾部O(1) 时间序列、K线存储
deque 分段连续 O(n) 头尾O(1) 滑动窗口
map/set 红黑树 O(log n) O(log n) 有序订单簿
unordered_map/set 哈希表 O(1)均摊 O(1)均摊 ticker→策略映射
priority_queue 取极值O(1) 插入O(log n) 事件驱动引擎的事件队列

高频考虑vector 因内存连续、缓存友好,在遍历性能上远优于链表。高频系统中优先使用 vector + 排序,而非 map


Q26:什么是模板(Template)元编程?在量化中有什么用?

标准答案:

模板允许在编译期生成特化代码,实现零开销抽象。

// 编译期计算阶乘
template<int N>
struct Factorial {
    static constexpr int value = N * Factorial<N-1>::value;
};
template<>
struct Factorial<0> {
    static constexpr int value = 1;
};

量化应用

  • 表达式模板(Expression Templates):避免临时对象,实现高效矩阵运算(Eigen库的核心技术)
  • 策略模式的编译期实现:用模板参数选择不同的执行逻辑,避免虚函数的间接调用开销
  • CRTP(Curiously Recurring Template Pattern):静态多态,高频系统中替代虚函数

5.4 NumPy / 数值计算

Q27:NumPy 的广播(Broadcasting)机制是什么?

标准答案:

广播允许不同形状的数组进行运算。规则:

  1. 从最后一个维度开始对齐
  2. 每个维度要么相同,要么其中一个为1
  3. 维度为1的那个轴会被"广播"(逻辑复制)
# 对每只股票的收益率减去其均值(截面去均值)
returns = np.random.randn(252, 500)     # (252天, 500只股票)
mean_ret = returns.mean(axis=0)          # (500,)
demeaned = returns - mean_ret            # 广播:(252, 500) - (500,) → (252, 500)

理解广播是写出高效NumPy代码的关键,避免不必要的循环和内存分配。


Q28:如何用NumPy高效实现滚动窗口计算?

标准答案:

# 方法1:stride_tricks(零拷贝,最高效)
from numpy.lib.stride_tricks import sliding_window_view
windows = sliding_window_view(prices, window_shape=20)  # (n-19, 20)
rolling_mean = windows.mean(axis=1)

# 方法2:cumsum技巧(O(n),适合求和/均值)
cumsum = np.cumsum(np.insert(prices, 0, 0))
rolling_sum = cumsum[20:] - cumsum[:-20]
rolling_mean = rolling_sum / 20

# 方法3:Pandas(最方便,但慢于纯NumPy)
pd.Series(prices).rolling(20).mean()

在大规模因子计算中,方法1和2比Pandas快3-10倍。


第六篇:因子与Alpha策略

6.1 因子投资基础

Q29:什么是因子(Factor)?Alpha 和 Beta 的区别?

标准答案:

因子:能够系统性解释资产收益率截面差异的变量。

Alpha vs Beta

  • Beta(系统性风险暴露):承担市场、规模、价值等公共因子风险获得的补偿,人人可以获取
  • Alpha(超额收益):在控制所有已知因子暴露后剩余的收益,来自信息优势或更优的执行

$$r_i - r_f = \alpha_i + \beta_{i,MKT} \cdot (r_{MKT} - r_f) + \beta_{i,SMB} \cdot SMB + \beta_{i,HML} \cdot HML + \epsilon_i$$

如果 $\alpha_i$ 显著大于零,说明存在无法被已知因子解释的超额收益。

核心洞察:今天的Alpha可能是明天的Beta——当一个信号被足够多的人知晓和使用后,它就变成了一个定价因子。


Q30:解释 Fama-French 三因子和五因子模型

标准答案:

三因子模型(1993)

  • MKT(市场因子):市场组合超额收益
  • SMB(Small Minus Big):小盘股超额收益
  • HML(High Minus Low):高B/M(价值股)超额收益

五因子模型(2015)新增

  • RMW(Robust Minus Weak):高盈利vs低盈利
  • CMA(Conservative Minus Aggressive):低投资vs高投资

核心贡献:建立了因子投资的分析框架。任何策略的收益都应该用这些因子回归分解——如果Alpha不显著,说明你只是在承担已知风险。

争议:HML在五因子模型中可能是冗余的(被RMW和CMA吸收);动量因子(UMD)未被包含但实证上很强。


Q31:常见的量价因子有哪些?如何构建?

标准答案:

因子类别 代表因子 构建逻辑
动量 12-1月动量 过去12个月累计收益(跳过最近1个月)
反转 短期反转 过去1个月/1周收益取反
波动率 特质波动率 回归残差的标准差(IVOL)
流动性 Amihud非流动性 $|r| / \text{Volume}$ 的均值
换手率 平均换手率 日均成交量 / 流通股本
量价背离 价升量缩 价格与成交量趋势方向不一致的程度

构建流程

  1. 原始值计算 → 2. 截面标准化(z-score或排序) → 3. 异常值处理(MAD/Winsorize) → 4. 行业/市值中性化 → 5. 缺失值填充

Q32:什么是因子 IC(Information Coefficient)和 IR(Information Ratio)?

标准答案:

  • IC:因子值与下期收益率的截面Rank相关系数(Spearman)。衡量因子单期选股能力。

    • IC > 0.03 就算不错了
    • 更稳健的变体:RankIC、quantile-spread
  • ICIR:$ICIR = \frac{\overline{IC}}{\sigma_{IC}}$,即IC均值除以IC标准差。衡量因子的稳定性。

    • ICIR > 0.5 通常认为是优秀因子
  • IR(策略层面):$IR = \frac{\text{年化超额收益}}{\text{年化跟踪误差}}$。衡量策略承担主动风险的效率。

基本定律(Fundamental Law of Active Management)

$$IR \approx IC \times \sqrt{BR}$$

其中 $BR$(Breadth)是独立决策次数。含义:微弱的IC也可以通过大量独立决策积累出好的IR。


Q33:因子的多重共线性问题如何处理?

标准答案:

当多个因子高度相关时(如EP和BP都是价值因子),回归系数不稳定,单因子测试有效但组合后失效。

处理方法

  1. 正交化:对因子做Gram-Schmidt正交化或回归取残差
  2. PCA降维:提取主成分作为合成因子
  3. 因子分组:同类因子等权合成为一个复合因子
  4. 弹性网络(Elastic Net):L1+L2正则化自动处理共线性
  5. VIF检验:方差膨胀因子 > 10 视为严重共线性

Q34:什么是因子拥挤(Factor Crowding)?如何检测和应对?

标准答案:

因子拥挤:过多资金追逐同一个因子策略,导致因子估值过高、预期收益下降、崩盘风险上升。

检测信号

  • 因子多空组合的估值价差达到历史极端
  • 短边借股成本飙升(做空拥挤)
  • 同类策略的相关性上升
  • 因子回撤加深且恢复变慢

历史案例:2007年8月量化危机——大量统计套利基金同时去杠杆,价值和动量因子在几天内回撤超过20%。

应对

  • 监控因子估值水平和拥挤度指标
  • 分散因子来源(基本面+量价+另类数据)
  • 动态调整因子暴露
  • 保持流动性缓冲

6.2 组合优化

Q35:均值-方差优化(MVO)的原理和问题?

标准答案:

原理(Markowitz, 1952)

$$\min_w \frac{1}{2} w^T \Sigma w \quad \text{s.t.} \quad w^T \mu = \mu_{\text{target}}, \quad \mathbf{1}^T w = 1$$

求解得到有效前沿上的最优组合。

实践中的问题

  1. 对输入极度敏感:期望收益率微小变化会导致权重剧烈变动("误差最大化器")
  2. 估计风险:期望收益率极难准确估计,协方差矩阵含噪
  3. 集中持仓:最优解常常极度集中在少数资产上
  4. 忽略交易成本:理论最优组合频繁调仓不现实

改进方法

  • Black-Litterman模型(融入主观观点)
  • 加入正则化约束(如持仓上下限、换手约束)
  • 风险平价(Risk Parity):$w_i \propto 1/\sigma_i$
  • 最小方差组合(不需要估计期望收益率)
  • 收缩估计(Ledoit-Wolf)改进协方差矩阵输入

Q36:什么是风险平价(Risk Parity)?和等权有什么区别?

标准答案:

风险平价:使每个资产对组合总风险的贡献相等。

资产i的风险贡献:$RC_i = w_i \cdot (\Sigma w)_i$

风险平价要求:$RC_1 = RC_2 = \cdots = RC_N = \frac{w^T \Sigma w}{N}$

vs 等权:等权是 $w_i = 1/N$(权重相等),风险平价是风险贡献相等。在波动率差异大的多资产组合中,等权会让高波动资产主导风险。

典型应用:Bridgewater的All Weather策略。股债配比中,股票波动率远高于债券,等权配比下股票贡献90%+的风险;风险平价下需要大量增配债券(通常加杠杆),使风险贡献均衡。


6.3 回测与策略评估

Q37:回测中常见的偏差(Bias)有哪些?

标准答案:

偏差 描述 危害
前视偏差(Look-ahead Bias) 使用了回测时刻不可得的未来信息 收益虚高,致命
幸存者偏差(Survivorship Bias) 只用了存续至今的股票/基金数据 高估历史收益
过拟合偏差 参数过度拟合历史数据 样本外表现崩塌
交易成本忽略 不考虑滑点、手续费、冲击成本 盈利被吃掉
时间段选择偏差 选择有利的回测区间 不具代表性

如何减轻

  • 严格使用 point-in-time 数据库
  • 在回测框架中内置时间戳检查
  • 分样本内/样本外/前向验证
  • 纸交易(Paper Trading)验证

Q38:常用的策略评估指标有哪些?各自的局限?

标准答案:

指标 公式/含义 局限
年化收益率 $(1+R_{\text{total}})^{252/T} - 1$ 不反映风险
夏普比率(Sharpe) $\frac{R_p - R_f}{\sigma_p}$ 假设正态分布,忽略尾部风险
索提诺比率(Sortino) 用下行偏差替代标准差 更关注下行风险,但对下行的定义依赖阈值
最大回撤(Max DD) 峰值到谷底的最大跌幅 只描述单次最坏情况
Calmar比率 年化收益 / 最大回撤 对单一极端事件敏感
信息比率(IR) 超额收益 / 跟踪误差 依赖于基准选择

进阶指标

  • t统计量:$t = \frac{SR \times \sqrt{T}}{\text{correction}}$,检验夏普比率是否显著异于零
  • Bailey-López de Prado建议:至少需要 $t &gt; 3$ 才可信(考虑多重检验后)

Q39:什么是过拟合?如何在策略开发中避免?

标准答案:

过拟合:模型/策略在历史数据上表现优异,但在新数据上表现大幅衰减。本质上是拟合了噪声而非信号。

判断信号

  • 样本内夏普比率远高于样本外
  • 策略逻辑过于复杂(大量参数、特殊规则)
  • 对参数微调极度敏感

避免方法

  1. 数据层面:训练集/验证集/测试集严格分离;使用 Walk-Forward 验证
  2. 模型层面:限制参数数量;用简单模型作为基线
  3. 统计层面:对多重测试做校正(Deflated Sharpe Ratio)
  4. 经济学层面:策略逻辑必须有合理的经济学解释
  5. 稳健性检验:更换时间窗口、市场、参数范围看策略是否稳定

Marcos López de Prado 的名言:"回测不是研究工具,而是验证工具。"


Q40:什么是交易成本模型?如何估计市场冲击成本?

标准答案:

交易成本构成

  • 显性成本:佣金、印花税、交易所费用
  • 隐性成本:买卖价差(bid-ask spread)、市场冲击(market impact)、时机成本

市场冲击模型

Almgren-Chriss模型(经典):

$$\text{Impact} = \sigma \cdot \gamma \cdot \left(\frac{V}{ADV}\right)^{\delta}$$

其中 $V$ 是订单量,$ADV$ 是日均成交量,$\gamma$ 和 $\delta$ 是经验参数。

平方根模型(业界常用简化版):

$$\text{Impact} \approx \sigma \cdot \sqrt{\frac{V}{ADV}}$$

重要性:高换手策略(如短期反转)的收益可能被冲击成本完全吃掉。策略开发时必须将冲击成本纳入回测。


第七篇:机器学习/深度学习在量化中的应用

7.1 机器学习基础

Q41:偏差-方差权衡(Bias-Variance Tradeoff)是什么?

标准答案:

$$\text{MSE} = \text{Bias}^2 + \text{Variance} + \text{Irreducible Noise}$$

  • 偏差(Bias):模型假设过于简单导致的系统性误差。欠拟合。
  • 方差(Variance):模型对训练数据过度敏感导致的波动。过拟合。

在量化中的含义

  • 高偏差模型(如简单线性回归)可能错过非线性alpha
  • 高方差模型(如深度神经网络)可能拟合市场噪声
  • 金融数据信噪比极低(信号微弱、噪声巨大),通常偏向低方差模型更安全
  • 原则:宁可欠拟合也不要过拟合——错过一个机会的代价远小于错误地相信一个不存在的机会

Q42:正则化(L1/L2/ElasticNet)的区别和量化应用?

标准答案:

正则化 惩罚项 效果 量化场景
L1(Lasso) $\lambda \sum |w_i|$ 产生稀疏解,自动选择因子 从大量候选因子中筛选有效因子
L2(Ridge) $\lambda \sum w_i^2$ 缩小权重但不为零 因子共线性处理,稳定回归
Elastic Net $\alpha L1 + (1-\alpha) L2$ 兼具稀疏和稳定 高维因子选择的默认选择

直觉:L1像用刀切(有的因子直接砍到0),L2像用手压(所有因子都缩小但保留)。

量化中的额外考虑:正则化强度 $\lambda$ 的选择不应只看交叉验证误差,还要考虑因子的经济学可解释性——如果L1选出了无法解释的因子,可能只是拟合了噪声。


Q43:时间序列的交叉验证应该怎么做?为什么不能用普通K-Fold?

标准答案:

问题:普通K-Fold随机划分,破坏了时间序列的时序结构,导致未来信息泄漏到训练集。

正确方法

Time →
|---Train---|---Gap---|--Test--|                 第1轮
|------Train-------|---Gap---|--Test--|          第2轮
|---------Train-----------|---Gap---|--Test--|   第3轮
  • Walk-Forward(前向验证):固定或扩展窗口训练,向前滚动测试
  • Embargo Gap:训练集和测试集之间留缓冲期,防止特征计算中的信息泄漏
  • Purged K-Fold(López de Prado提出):在K-Fold基础上,清除训练集中与测试集标签在时间上重叠的样本

Embargo的计算:如果特征使用了过去20天的数据来预测未来5天的收益,Embargo至少应设为5天(标签的前瞻窗口)。


Q44:XGBoost / LightGBM 为什么在量化比赛中这么流行?

标准答案:

核心优势

  1. 天然处理非线性和交互:树模型自动捕捉因子间的非线性关系和交互效应
  2. 对异常值鲁棒:基于排序分裂,不受因子分布影响
  3. 特征重要性:内置特征选择,直接看哪些因子有用
  4. 缺失值处理:原生支持缺失值
  5. 训练效率高:GPU加速,大规模因子矩阵可快速训练

量化中的关键调参

  • max_depth:3-7即可,太深容易过拟合
  • learning_rate:0.01-0.1,配合较多的 n_estimators
  • subsample / colsample_bytree:0.5-0.8,增加随机性
  • min_child_weight:防止拟合噪声

注意:树模型在量化中的表现上限可能不如线性模型——因为金融数据信噪比极低,复杂模型更容易拟合噪声。实际中线性模型+好因子常常比复杂模型+普通因子更稳定。


Q45:特征工程在量化ML中有哪些关键技巧?

标准答案:

技巧 描述 原因
截面排序/z-score 每个截面时间点标准化 消除时间趋势,保留截面排序信息
滞后特征 feature_lag1, feature_lag5 捕捉因子动量或反转
滚动统计量 均值、标准差、偏度、峰度 捕捉分布特征的时变性
交互特征 因子A × 因子B 捕捉条件效应(如"价值+动量"联合信号)
分位数编码 连续值→分位数桶 减少异常值影响,对树模型可提升稳定性
目标编码的陷阱 不可对测试集做全局编码 信息泄漏的常见来源

最重要的原则:每个特征必须在预测时刻(point-in-time)确实可以获得。回测中使用了未来信息的特征工程是最隐蔽的前视偏差。


7.2 深度学习

Q46:RNN / LSTM / Transformer 在量化时间序列预测中各自的优劣?

标准答案:

模型 优势 劣势 量化适用
RNN 简单、参数少 梯度消失、长程依赖弱 基本淘汰
LSTM 门控机制解决长程依赖 串行计算慢,超参敏感 中频时序预测
GRU 比LSTM简化、参数更少 能力略弱于LSTM LSTM的轻量替代
Transformer 并行计算、全局注意力 对位置敏感,数据需求大 多因子截面学习,注意力权重可解释
Temporal Fusion Transformer 专为时序设计,内置变量选择 复杂度高 多变量时序+可解释性需求

实践建议:不要迷信模型复杂度。在低信噪比的金融数据中,简单LSTM配合好的特征工程和正则化,常常优于Transformer。


Q47:AutoEncoder 和 VAE 在量化中有什么用?

标准答案:

AutoEncoder(AE)

$$\text{Input} \xrightarrow{\text{Encoder}} \text{Latent} \xrightarrow{\text{Decoder}} \text{Reconstruction}$$

量化应用

  • 因子降维:从上百个原始因子中提取非线性压缩表示
  • 异常检测:重建误差大的样本可能是异常行情
  • 缺失值填充:用训练好的AE重建缺失的因子值

VAE(变分自编码器)

在AE基础上引入概率,latent space是参数化的高斯分布:$q(z|x) \sim N(\mu, \sigma^2)$

额外能力

  • 生成合成金融数据(数据增强)
  • 对市场状态的不确定性建模
  • 更平滑的latent space有利于下游任务

Q48:GAN(生成对抗网络)在量化中有哪些应用?

标准答案:

金融数据生成

  • 生成合成的价格路径/收益率序列,用于扩充训练集
  • 生成极端行情场景(压力测试)
  • 保护隐私的数据共享

常用变体

  • TimeGAN:专门针对时间序列数据,保留时序依赖性
  • WGAN-GP:训练更稳定,避免模式崩塌

核心挑战

  • 评估生成质量困难——FID等图像指标不直接适用
  • 必须验证生成数据的统计特性(自相关、波动率聚集、厚尾、杠杆效应)
  • 用生成数据训练的模型,样本外表现仍需在真实数据上验证

Q49:图神经网络(GNN)在量化中的应用场景?

标准答案:

金融市场天然是图结构:股票之间通过产业链、股东关系、资金流、相关性等形成网络。

应用场景

  • 关联股预测:上下游公司的信息传导(供应链图谱)
  • 行业传导:行业龙头的涨跌对同行业/产业链的影响建模
  • 风险传染:金融机构间的系统性风险传导
  • 知识图谱因子:从企业关系图中提取因子(如"供应商动量"因子)

常用模型:GCN、GAT(Graph Attention Network)、GraphSAGE

关键难点:图结构本身是动态变化的(公司关系、股东结构会变),需要时序图网络(Temporal GNN)或定期更新图结构。


7.3 强化学习

Q50:强化学习(RL)在量化中的应用和挑战?

标准答案:

应用场景

  • 最优执行:将大单拆分为小单逐步执行,最小化冲击成本(Almgren-Chriss的RL版本)
  • 动态组合管理:根据市场状态动态调整持仓,考虑交易成本
  • 做市策略:动态调整报价价差和挂单量

常用算法

  • PPO / A2C / SAC(连续动作空间,适合权重/价格决策)
  • DQN(离散动作空间,适合买/卖/持有决策)

核心挑战

  1. 数据不足:金融数据的有效样本远少于游戏/机器人场景
  2. 非平稳环境:市场结构持续变化,训练好的agent可能快速失效
  3. 奖励设计困难:简单用PnL做reward会导致高方差;需要设计风险调整后的reward
  4. 模拟器偏差:回测模拟器无法完美还原真实市场的冲击和流动性
  5. 可解释性差:策略决策过程不透明,难以获得风控信任

实践建议:RL在执行优化(Optimal Execution)中最为成熟,在alpha策略中仍处于研究阶段。


7.4 实战问题

Q51:如何处理金融数据中标签(Label)不平衡的问题?

标准答案:

场景:预测涨跌时,实际中大量微小变动(噪声),真正大涨大跌是少数。

处理方法

  1. 标签重定义:不用涨跌,用超额收益分位数(Top 20% vs Bottom 20%,中间丢弃)
  2. 重采样:过采样少数类(SMOTE)或欠采样多数类
  3. 损失函数加权class_weight='balanced' 或 Focal Loss
  4. 评估指标:不用Accuracy,用AUC、Precision-Recall、IC等

量化特有考虑:金融中"不平衡"不一定是问题——中间区域的样本可能确实不包含有效信号,强行学习反而引入噪声。Triple-barrier方法(López de Prado)通过止盈、止损、最长持有期三个条件定义标签,是更好的方案。


Q52:如何在量化ML中防止信息泄漏?

标准答案:

常见泄漏来源

  1. 特征泄漏

    • 使用了包含未来信息的因子(如未来才发布的财报数据)
    • 用全局统计量做标准化(应该用历史窗口内的统计量)
  2. 标签泄漏

    • 收益率标签与特征时间窗口重叠
    • 例:用t-20到t天的均值预测t到t+5的收益,但t-20到t已包含了部分t+5的信息
  3. 验证泄漏

    • 用未来数据调参(如用整个时期做网格搜索选最优参数)
    • K-Fold未保持时序
  4. 数据处理泄漏

    • 先做全局PCA再划分训练/测试集
    • 缺失值用全局均值填充

防御清单

  • 所有数据处理管道必须在训练集上fit,在测试集上transform
  • 建立 point-in-time 数据库,每条数据标注其可用时间
  • sklearn.pipeline.Pipeline 封装所有预处理步骤

Q53:解释 Attention 机制在多因子选股中的应用

标准答案:

传统多因子模型对所有因子等权或固定权重组合,Attention机制允许模型动态地针对不同股票和不同时期为因子分配不同权重。

具体做法

输入:N只股票 × K个因子 × T个时间步
               ↓
   时间维度 Attention:关注哪些历史时刻更重要
               ↓
   因子维度 Attention:关注哪些因子在当前市场环境下更有效
               ↓
   输出:每只股票的预测收益率 / 排序分数

优势

  • 自动实现"因子择时"——在不同市场状态下侧重不同因子
  • Attention权重提供可解释性——可以看到模型关注了哪些因子
  • Cross-Attention可以捕捉股票之间的关联信息

挑战:模型容易过拟合,需要较强的正则化和较大的样本量。


Q54:量化中的集成学习(Ensemble Learning)策略有哪些?

标准答案:

方法 原理 量化应用
Bagging 多个模型在不同子样本上训练,平均预测 随机森林做因子打分
Boosting 串行训练,每个模型修正前一个的残差 XGBoost/LightGBM因子选股
Stacking 用元模型组合基模型的预测 第一层多个异质模型,第二层线性组合
Blending 简单加权平均多个模型的输出 多策略信号等权/风险平价组合

量化中的特殊集成技巧

  • 时间集成:对不同时间窗口训练的模型取平均,增强稳定性
  • 因子集成:同一个Alpha逻辑,用多个模型(线性、树、NN)分别实现,取中位数信号
  • 交叉验证集成:K个Fold的模型全部保留,对新数据取K个预测的均值

核心洞察:集成学习的价值不在于提高精度,而在于降低方差——在低信噪比的金融数据中,降低方差比提高精度更重要。


Q55:大语言模型(LLM)在量化中有哪些应用?

标准答案:

已落地的应用

  • 新闻/公告情感分析:用LLM解析财报电话会议、新闻、社交媒体的情绪
  • 事件提取:从非结构化文本中提取并购、高管变动、产品发布等事件
  • 研报摘要与因子化:将卖方研报的观点量化为多空信号
  • 代码辅助:加速策略开发、回测代码编写

前沿探索

  • LLM作为Alpha信号:直接让LLM根据新闻判断涨跌方向
  • 多模态理解:结合文本、表格、图像(如K线图)的分析
  • 策略推理:让LLM解释因子失效原因或生成交易假设

关键限制

  • 推理成本高,实时交易中延迟大
  • 幻觉问题——LLM可能自信地给出错误的金融分析
  • 训练数据截止日期导致的信息滞后
  • 不适合需要精确数值计算的场景

最后的话:量化是一个需要持续学习的领域。市场在变,技术在进化,Alpha在衰减。八股文是入门的钥匙,但真正的护城河来自于对市场的深刻理解、严谨的研究方法论、以及不断迭代的能力。祝每位量化人都能找到属于自己的Alpha。

About

量化金融八股文 | 55道高频考点 × 详细解答 | 数学统计 · Python/C++ · 因子与Alpha策略 · 机器学习/深度学习 | 面试 + 学习两用指南

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors