
用 Python 揭秘均值回归策略:你的收益从何而来?
2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含 500 篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!
如果你正在学习 Python,并且对金融、量化投资感兴趣,那么一个绕不开的问题就是:到底哪些算法在真实市场里「能打」?
如今的量化金融已经彻底算法化。从对冲基金同时运行上千个策略,到面向普通用户的「智能投顾」组合,几乎每一个严肃的投资决策背后都跑着一段代码。但「最好的算法」其实是一个很危险的说法——算法的表现,取决于你要解决的问题、手里的数据、当下的市场行情以及各种约束条件。
这篇文章会带你系统梳理四大核心领域里真正有效的方法:投资组合优化、算法交易、衍生品定价、波动率预测与风险管理,并配上可以直接上手的 Python 案例。希望能帮你在建立自己的量化认知框架时,少走一些弯路。
现代投资组合理论的地基,来自 1952 年 Harry Markowitz 提出的均值-方差框架。它的核心思想非常朴素:
在给定的预期收益下最小化风险,或者在给定的风险下最大化收益。
听起来很完美,但纯粹的均值-方差优化在实战中经常翻车。因为它对预期收益和协方差矩阵的估计误差极度敏感,稍微一点噪声就会算出极端、不稳定的权重(比如把 90% 的仓位全压在一只股票上)。
一个值得注意的趋势是:很多团队只用机器学习来生成「输入」(更准的收益或协方差预测),然后把数字交给经典优化器去求解。 纯粹的端到端深度学习组合模型在生产环境中反而少见,主要卡在可解释性和监管合规上。
import numpy as np# 假设有 3 个资产,给定它们的协方差矩阵cov = np.array([ [0.04, 0.006, 0.008], [0.006, 0.09, 0.012], [0.008, 0.012, 0.16],])# 用「逆波动率加权」作为风险平价的近似入门版本# 波动率越大的资产,分配的权重越小,从而平衡各资产的风险贡献vol = np.sqrt(np.diag(cov)) # 每个资产的波动率(标准差)inv_vol = 1 / vol # 取倒数weights = inv_vol / inv_vol.sum() # 归一化,使权重之和为 1print("各资产权重:", np.round(weights, 3))# 输出示例:各资产权重: [0.571 0.286 0.143]实战要点:从风险平价或 Black-Litterman 起步;只有当你确实拥有很强的预测信号时,再叠加更好的收益预测。永远不要在噪声数据上直接套用最朴素的均值-方差。
小贴士:真正的风险平价需要迭代求解,让每个资产的「边际风险贡献」相等。上面的逆波动率加权只是一个直观的入门近似,方便你先建立感觉。
在执行大额订单这件事上,VWAP、TWAP、实施差额(Implementation Shortfall)这些执行算法依然是主力军,它们已经非常成熟且高度优化。
而在生成交易信号、构建自适应策略方面,天平明显向机器学习倾斜:
此外,混合架构(如 CNN-LSTM、把 GARCH 特征喂给 LSTM)经常在股票、期货、加密货币的最新基准测试中拿到榜首。
import numpy as npdef sharpe_loss(returns, risk_free=0.0, eps=1e-8): """ 以「负夏普比率」作为损失函数。 在深度学习训练中,模型会朝着让夏普比率变大的方向优化, 这比单纯预测价格更贴近「赚钱」这个真实目标。 """ excess = returns - risk_free # 超额收益 mean = np.mean(excess) # 平均超额收益 std = np.std(excess) + eps # 收益波动率(加 eps 防止除以 0) sharpe = mean / std # 夏普比率 return -sharpe # 训练时要最小化损失,故取负号# 模拟一段策略的每日收益strategy_returns = np.array([0.01, -0.005, 0.02, 0.008, -0.002])print("负夏普损失:", round(sharpe_loss(strategy_returns), 4))实战要点:目前预测型交易里边际最强的组合是「LSTM + 金融导向的损失函数」,或者「精心设计的强化学习智能体」——但前提是你必须严格控制交易成本和过拟合。这也是新手最容易栽跟头的地方:回测里赚翻了,实盘里全亏回去。
这一块经典数值方法依然稳坐主流,各有各的适用场景:
机器学习「代理模型」正在高维问题上崭露头角,但经典数值方法仍然主导生产系统,靠的是精度、可审计性和监管认可度这三张牌。
import numpy as npfrom scipy.stats import normdef bs_call(S, K, T, r, sigma): """ Black-Scholes 欧式看涨期权定价公式。 S: 标的现价, K: 行权价, T: 到期时间(年), r: 无风险利率, sigma: 波动率 """ d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T)) d2 = d1 - sigma * np.sqrt(T) # N(d1)、N(d2) 是标准正态分布的累积分布函数 price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2) return price# 案例:现价 100,行权价 105,1 年到期,利率 3%,波动率 20%print("看涨期权价格:", round(bs_call(100, 105, 1, 0.03, 0.2), 4))在这个领域,GARCH 家族(尤其是 GARCH(1,1)、EGARCH、GJR-GARCH)依然是可靠的基准。它参数少、可解释性强,在大多数股票和外汇市场都表现不错。
而当前的性能领跑者是混合模型:
这些混合模型在高波动时期能持续降低预测误差。
在风险度量上,**期望损失(Expected Shortfall,即 CVaR)**正逐渐取代简单的 VaR(在险价值)——因为它拥有更好的理论性质(比如满足次可加性),能更真实地刻画「极端亏损到底有多惨」。
易错点提醒:VaR 只告诉你「有 95% 的把握不会亏超过某个数」,却对那 5% 的尾部一无所知;CVaR 则会告诉你「一旦真的踩雷,平均要亏多少」,对尾部风险的刻画更完整。
评判任何一个方法,都应该看这几个维度:
结论很清晰:没有任何一个算法能在所有维度上通吃。 经典模型胜在透明和稳定;现代机器学习则胜在原始预测能力——但前提是被恰当正则化,并且和金融目标对齐。
眼下最有前景的方向,恰恰位于经典金融理论与机器学习的交叉地带:金融专属损失函数、对市场微观结构的更好建模、以及可解释性技术的提升。量子方法还停留在实验阶段;而能建模「其他市场参与者行为」的多智能体强化学习,则是一个活跃的研究前沿。
对于正在学 Python 的量化爱好者,这篇文章可以浓缩成一句忠告:
先用稳健的经典方法打好地基,只在机器学习「确实能改善经济结果」的地方才引入它,并且永远不要跳过「带交易成本的严格样本外测试」。
再帮你把四大领域记牢:
最后一句话最值得贴在显示器上:最好的算法,是那个能在真实市场、真实成本、真实风险约束下活下来的算法。 理论和回测是必要的,但真正拍板的,永远是实盘中的表现。
2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:
星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!
好文推荐
1. 用 Python 打造股票预测系统:Transformer 模型教程(一)
2. 用 Python 打造股票预测系统:Transformer 模型教程(二)
3. 用 Python 打造股票预测系统:Transformer 模型教程(三)
4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)
6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用
9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解
好书推荐