
用 Python 揭秘均值回归策略:你的收益从何而来?
2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含 350 篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!
在瞬息万变的金融市场中,如何从 1000 多只股票中找到真正有价值的交易机会?传统的技术分析早已不够用,现在的顶级交易员都在用 AI 信号 + 量化异常检测 + 情绪分析 的组合拳。
今天为大家带来一份来自 Empirical Markets 平台的系统化交易工作流,并结合 Python 代码示例,让学习 Python 的你也能快速上手量化分析。无论你是刚入门的新手,还是正在构建自己量化系统的开发者,这篇文章都值得收藏!
Empirical Markets 将市场分析拆解为两个层次:
整个工作流可以概括为:从市场层筛选候选 → 在个股层验证信号 → 综合决策。
这是一个基于 CAPM 模型的 α vs β 散点图,覆盖 900 多只股票。
import numpy as np
import pandas as pd
import yfinance as yf
# 下载股票数据(以 NVDA 和标普 500 为例)
stock = yf.download("NVDA", start="2024-01-01", end="2024-12-31")
market = yf.download("SPY", start="2024-01-01", end="2024-12-31")
# 计算日收益率
stock_returns = stock["Close"].pct_change().dropna()
market_returns = market["Close"].pct_change().dropna()
# 无风险利率(假设年化 4.5%,换算为日度)
risk_free_rate = 0.045 / 252
# 超额收益
excess_stock = stock_returns - risk_free_rate
excess_market = market_returns - risk_free_rate
# 计算 Beta(协方差/方差)
beta = np.cov(excess_stock, excess_market)[0, 1] / np.var(excess_market)
# 计算 Alpha(截距项)
alpha = excess_stock.mean() - beta * excess_market.mean()
# 年化 Alpha
alpha_annualized = alpha * 252
print(f"Beta(β): {beta:.4f}")
print(f"Alpha(α)年化: {alpha_annualized:.4%}")解读规则:
Empirical Markets 提供多个 AI 模型,每个模型训练用于识别特定类型的事件。
在 Downside Risk Elevated 模型中,$ETR 的精确率(Precision)达到 75.9%,且这一指标是基于留出测试集(hold-out test dataset) 计算的,有效避免了数据泄露。
from sklearn.metrics import precision_score, classification_report
# 模拟模型预测结果
y_true = [1, 0, 1, 1, 0, 1, 0, 1, 1, 0] # 实际标签(1 表示发生下跌)
y_pred = [1, 0, 1, 0, 0, 1, 1, 1, 1, 0] # 模型预测
# 计算精确率
precision = precision_score(y_true, y_pred)
print(f"模型精确率: {precision:.2%}")
# 详细报告
print(classification_report(y_true, y_pred, target_names=["正常", "下跌"]))Flow Ratio 衡量资金流入或流出某只股票的强度,相对于大盘和该股票自身的历史水平。
import pandas as pd
import numpy as np
def calculate_flow_ratio(df, window=20):
"""
计算资金流比率(Flow Ratio)
:param df: 包含 Close 和 Volume 列的 DataFrame
:param window: 滚动窗口长度
:return: Flow Ratio 的 σ 值
"""
# 计算成交金额
df["dollar_volume"] = df["Close"] * df["Volume"]
# 计算均值和标准差
df["mean_flow"] = df["dollar_volume"].rolling(window=window).mean()
df["std_flow"] = df["dollar_volume"].rolling(window=window).std()
# 以 σ 为单位的异常值
df["flow_sigma"] = (df["dollar_volume"] - df["mean_flow"]) / df["std_flow"]
return df
# 使用示例
data = yf.download("QXO", start="2025-01-01", end="2026-04-20")
result = calculate_flow_ratio(data)
# 找出异常流入日(σ > 3)
anomalies = result[result["flow_sigma"] > 3]
print(f"发现 {len(anomalies)} 个资金流异常日")
print(anomalies[["Close", "Volume", "flow_sigma"]].tail())点击任意股票后,进入 Ticker Intelligence Dashboard,可以叠加三类信号:
通过多层信号交叉验证,你可以:
import matplotlib.pyplot as plt
import pandas as pd
# 下载数据
df = yf.download("TM", start="2025-10-01", end="2026-04-21")
# 计算 20 日 EMA
df["EMA_20"] = df["Close"].ewm(span=20, adjust=False).mean()
# 计算布林带
df["MA_20"] = df["Close"].rolling(window=20).mean()
df["STD_20"] = df["Close"].rolling(window=20).std()
df["Upper"] = df["MA_20"] + 2 * df["STD_20"]
df["Lower"] = df["MA_20"] - 2 * df["STD_20"]
# 绘图
plt.figure(figsize=(12, 6))
plt.plot(df.index, df["Close"], label="TM Price", color="white")
plt.plot(df.index, df["EMA_20"], label="EMA 20", color="cyan")
plt.plot(df.index, df["Upper"], label="上轨", color="green", alpha=0.5)
plt.plot(df.index, df["Lower"], label="下轨", color="red", alpha=0.5)
plt.fill_between(df.index, df["Upper"], df["Lower"], alpha=0.1)
plt.title("TM 股价与技术指标叠加")
plt.legend()
plt.show()Cross-Asset Similarity 视图展示与目标股票行为相似的其他证券。
平台发现 VEA(81.9%)、TM 行为相似,但 $TM 明显跑输这一同行组,暗示相对弱势。
import pandas as pd
import numpy as np
# 定义一组待比较的股票
tickers = ["TM", "VIK", "VEA", "URA", "VEU", "VXUS", "VGK"]
# 下载数据
data = yf.download(tickers, start="2026-03-20", end="2026-04-21")["Close"]
# 计算日收益率
returns = data.pct_change().dropna()
# 计算相关系数矩阵
corr_matrix = returns.corr()
# 查看与 TM 的相关度,按相似度降序排序
similarity = corr_matrix["TM"].drop("TM").sort_values(ascending=False)
print("与 TM 相似度排行:")
print((similarity * 100).round(1).astype(str) + "%")除了技术信号,平台还整合了内部人交易和 SEC 披露文件两大信息维度。
本文系统梳理了 Empirical Markets 的高胜率交易分析工作流,核心要点如下:
交易的本质是概率游戏,长期成功来源于持续把胜率倾斜到自己这一边。对于 Python 学习者来说,掌握这些量化工具不仅能帮你更理性地看待市场,也能让你的编程技能在真实场景中发挥价值。
建议从本文的代码示例入手,尝试使用 yfinance、pandas、numpy 等库复现这些分析方法,逐步构建属于自己的量化分析工具箱!
2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:
星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!
好文推荐
1. 用 Python 打造股票预测系统:Transformer 模型教程(一)
2. 用 Python 打造股票预测系统:Transformer 模型教程(二)
3. 用 Python 打造股票预测系统:Transformer 模型教程(三)
4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)
6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用
9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解
好书推荐