awesome-systematic-trading:量化交易资源地图与学习路径
posts posts 2026-04-12T02:29:31+08:00awesome-systematic-trading 按策略分类整理了量化交易的研究论文、代码库和数据集。本文按动量、均值回归、统计套利、机器学习、加密货币五大方向,梳理核心论文、代码示例和工具链。技术笔记量化交易, Python, 金融, 算法这个仓库是什么
awesome-systematic-trading 是一个按策略分类的论文导航加工具链清单(2026 年 8 月约 12.5k Stars、1.5k Forks)。量化交易的论文和工具数量庞大,新手不知道从哪篇论文开始读,老手也容易漏掉某个方向的奠基工作。仓库本身不提供交易信号或回测平台,它是一张知识地图——每个策略方向的奠基论文、可用的回测库、能拿到行情的数据源,都列在这里。
从零学量化的人,可以用这个仓库快速找到该读的论文。量化交易论文数量巨大,但每个策略方向真正奠基的通常只有 3-5 篇,仓库筛出了这些。
已经入门的量化研究者,可以拿它查漏补缺:检查自己有没有漏掉某个方向的经典论文,或者某个 Python 库比自己手写的版本更成熟。
Stars 数会随时间变化,文中提到的 12.5k Stars 为 2026 年 8 月观测值,使用时以仓库当前数据为准。
资源分类总览
仓库内容分三类:研究材料(论文、书籍)、工具(代码库、回测框架)、原料(数据源)。三类资源对应量化工作的不同阶段。
量化工作的三个阶段:研究、回测、实盘
量化交易的工作流可以拆成三个阶段。
研究阶段:读论文,理解策略的经济学直觉和统计假设。产出是策略的逻辑描述和参数范围。
回测阶段:用历史数据验证策略,检查收益、夏普比率、最大回撤、换手率。产出是回测报告和参数选择。主要用回测框架(backtrader、zipline)和历史数据(yfinance、Polygon)。
实盘阶段:接入实时行情和券商接口,处理滑点、延迟、资金成本。产出是实盘交易记录。
三个阶段反复迭代。以动量策略为例:
- 读论文:Jegadeesh & Titman (1993) 发现过去 3-12 个月表现好的股票在未来 3-12 个月继续跑赢。
- 写策略:用过去 12 个月收益率作为信号,正动量做多,负动量做空。
- 回测:用 yfinance 拉标普 500 成分股数据,按月调仓,计算夏普比率和最大回撤。
- 检查:对比不同 lookback 周期(3、6、12 个月),看收益是否稳定。
五大策略方向:核心论文与代码示例
动量策略 (Momentum / Trend Following)
动量策略是量化交易中研究最多的方向之一。Jegadeesh & Titman (1993) 的经典论文发现:过去 3-12 个月表现好的股票,在未来 3-12 个月继续跑赢的概率显著高于随机游走。Asness et al. (2013) 进一步证明动量效应在全球多个资产类别中都存在。
动量效应的成因,学术上有几种解释:投资者对信息反应不足(新信息缓慢反映到价格里)、羊群效应(趋势形成后跟风资金强化趋势)、处置效应(赢家卖得太早、输家拿得太久)。
核心论文:
- Jegadeesh & Titman (1993) — 动量效应的原始发现
- Asness et al. (2013) — 跨资产类别的价值与动量
- Moskowitz et al. (2012) — 时间序列动量(期货市场)
- Hurst et al. (2013) — 动态动量策略
import numpy as np
import pandas as pd
def momentum_strategy(prices: pd.DataFrame, lookback: int = 12, holding: int = 1) -> pd.DataFrame:
"""动量策略:过去 lookback 月涨幅 > 0 则做多,否则做空。
Args:
prices: 价格序列,index 为日期,columns 为资产
lookback: 回看周期(月)
holding: 信号滞后周期(月)
Returns:
持仓信号 DataFrame,1 表示做多,-1 表示做空
"""
returns = prices.pct_change(periods=lookback)
signal = returns.shift(holding)
return np.sign(signal)均值回归 (Mean Reversion)
均值回归策略基于一个假设:资产价格在短期会偏离均值,但长期会回归。配对交易(Pairs Trading)是最经典的均值回归实现——找两只高度相关的股票,当价差扩大时做空强势股、做多弱势股,等价差回归后平仓。
均值回归成立的前提是协整关系(Cointegration):两只股票的价差是平稳序列,不会无限发散。如果只是相关而不协整,价差可能趋势性扩大,配对交易会持续亏损。实施前必须做协整检验(Engle-Granger 或 Johansen 检验)。
核心论文:
- Gatev et al. (2006) — 配对交易的基础框架
- Elliott et al. (2005) — 配对交易的随机过程建模
- Pole (2007) — 统计套利的系统化方法
import pandas as pd
def pairs_trading_signal(stock1: pd.Series, stock2: pd.Series,
lookback: int = 60, entry_threshold: float = 2.0) -> pd.Series:
"""配对交易信号:价差 z-score 超越阈值时入场,回归时平仓。
Args:
stock1: 股票 1 的价格序列
stock2: 股票 2 的价格序列
lookback: 滚动窗口长度
entry_threshold: 入场 z-score 阈值
Returns:
持仓信号序列,1 做多价差,-1 做空价差,0 平仓
"""
spread = stock1 - stock2
rolling_mean = spread.rolling(lookback).mean()
rolling_std = spread.rolling(lookback).std()
z_score = (spread - rolling_mean) / rolling_std
signal = pd.Series(0, index=spread.index)
signal[z_score > entry_threshold] = -1 # 价差过大,做空
signal[z_score < -entry_threshold] = 1 # 价差过小,做多
signal[abs(z_score) < 0.5] = 0 # 回归均值,平仓
return signal统计套利 (Statistical Arbitrage)
统计套利从均值回归扩展到多资产组合:用协方差矩阵做权重优化。Avellaneda & Lee (2010) 的论文是统计套利的标准框架,用 PCA 提取残差因子,对残差做均值回归。
配对交易处理两只股票的价差,统计套利处理一个股票池相对于共同因子的残差。残差更接近白噪声,均值回归的统计性质更好,但对模型假设更敏感。
核心论文:
- Avellaneda & Lee (2010) — 统计套利的系统框架
- Bogousslavsky (2016) — 低频再平衡的套利策略
- Narang (2013) — Inside the Black Box,量化交易入门必读
import numpy as np
import pandas as pd
class StatisticalArbitrage:
"""统计套利:基于协方差矩阵逆矩阵的权重优化。"""
def __init__(self, securities: pd.DataFrame, lookback: int = 20):
self.securities = securities
self.lookback = lookback
self.weights: pd.Series | None = None
def compute_weights(self) -> pd.Series:
returns = self.securities.pct_change()
window = returns.tail(self.lookback)
cov = window.cov()
inv_cov = np.linalg.pinv(cov.values)
mu = window.mean()
self.weights = pd.Series(inv_cov @ mu, index=self.securities.columns)
return self.weights机器学习交易 (Machine Learning Trading)
ML 在量化交易中的应用集中在两个方向:价格预测(LSTM/Transformer)和因子挖掘(树模型)。Fischer & Krauss (2018) 用 LSTM 预测 S&P 500 成分股,证明深度学习在选股上优于传统模型。
ML 在量化里的主要问题是过拟合。金融数据信噪比极低,深度模型容易学到噪声。López de Prado 在《Advances in Financial Machine Learning》里反复强调:金融 ML 首先要解决交叉验证(Purged K-Fold)和特征数量控制,模型复杂度反而是次要因素。
核心论文:
- Dixon et al. (2016) — 机器学习在交易中的应用综述
- Fischer & Krauss (2018) — LSTM 股票预测
- Kolm & Ritter (2019) — 机器学习在金融中的现代视角
加密货币交易 (Crypto Trading)
加密货币市场的微观结构与传统市场不同——24/7 交易、无涨跌停、跨交易所价差大。Makarov & Schoar (2020) 系统研究了加密货币的跨交易所套利,发现价差主要来自资本流动摩擦,交易成本反而是次要因素。
加密货币的市场参与者结构、流动性分布、监管环境都和股票市场差异很大,适合作为独立方向研究。同样的动量策略在加密货币上的表现可能和股票市场相反——加密货币的动量更短(周级别),反转更快。
核心论文:
- Makarov & Schoar (2020) — 加密货币跨交易所套利
- Liu (2019) — 加密货币动量效应
数据集与数据源
市场数据(免费 + 付费)
| 数据源 | 类型 | 免费额度 | 适合场景 |
|---|---|---|---|
| yfinance | 股票/ETF | 免费 | 学习、回测、A 股/美股 |
| Polygon.io | 实时/历史 | 有限免费 | 实时行情 |
| Alpaca | 免佣金 | 免费 | 美股实盘 |
| Binance | 加密货币 | 免费 | 加密货币回测 |
| CCXT | 加密货币 | 免费 | 跨交易所统一接口 |
import yfinance as yf
import pandas as pd
def get_market_data(tickers: str | list[str],
start: str = '2010-01-01',
end: str = '2024-12-31') -> pd.DataFrame:
"""下载历史复权收盘价。
Args:
tickers: 股票代码或代码列表(如 'AAPL' 或 ['AAPL', 'MSFT'])
start: 开始日期
end: 结束日期
Returns:
复权收盘价 DataFrame
"""
data = yf.download(tickers, start=start, end=end, auto_adjust=True)
return data['Close']yfinance 是非官方接口,Yahoo Finance 可能随时更改 API 导致库失效。生产环境建议用 Polygon 或 Alpaca 的官方 API。
另类数据
| 数据源 | 类型 | 用途 |
|---|---|---|
| SEC EDGAR | 监管文件 | 基本面分析、事件驱动 |
| Finnhub | 新闻/情绪 | 舆情分析 |
| Twitter API | 社交媒体 | 情绪信号 |
| 卫星图像 | 物理数据 | 零售、能源趋势 |
另类数据的主要问题是数据清洗。卫星图像原始数据需要大量预处理才能转成可用信号,个人研究者通常用聚合后的二手数据。
代码库:Python / R / Julia
Python 量化生态
| 库 | 用途 | 替代方案 |
|---|---|---|
| backtrader | 回测框架 | zipline |
| zipline | 回测框架(Quantopian 开源) | backtrader |
| pyfolio | 组合分析 | 自定义 |
| quantlib | 衍生品定价 | — |
| ffn | 金融函数 | 自定义 |
import backtrader as bt
class MovingAverageStrategy(bt.Strategy):
"""双均线交叉策略:收盘价上穿 SMA20 买入,下穿卖出。"""
params = (('period', 20),)
def __init__(self) -> None:
self.ma = bt.indicators.SMA(self.data.close, period=self.params.period)
self.order = None
def next(self) -> None:
if self.order:
return
if not self.position:
if self.data.close[0] > self.ma[0]:
self.order = self.buy()
else:
if self.data.close[0] < self.ma[0]:
self.order = self.sell()backtrader 文档完整、社区活跃,适合新手入门;zipline 的 API 设计接近 Quantopian 的生产环境,但 Quantopian 已于 2020 年关闭,社区接手了 zipline 的维护(zipline-reloaded)。
R 量化生态
R 在学术量化社区中仍然活跃。quantstrat 是 R 生态中最成熟的回测框架。用 TTR + quantmod 计算双均线信号,比 quantstrat 的完整流程更轻量:
library(quantmod)
library(TTR)
# 拉取 AAPL 日线数据
getSymbols("AAPL", src = "yahoo", from = "2020-01-01", to = "2024-12-31")
# 计算 20 日和 60 日均线
aapl_sma20 <- SMA(Cl(AAPL), n = 20)
aapl_sma60 <- SMA(Cl(AAPL), n = 60)
# 生成信号:SMA20 上穿 SMA60 买入,下穿卖出
signal <- Lag(ifelse(aapl_sma20 > aapl_sma60, 1, -1))
returns <- dailyReturn(Cl(AAPL)) * signal
# 计算累计收益
cumulative <- cumprod(1 + returns) - 1
plot(cumulative, main = "AAPL 双均线策略累计收益")quantstrat 的完整用法涉及 initStrat、initPortf、initAcct 等多个初始化步骤,适合多资产组合回测,可参考 quantstrat 官方文档。
Julia 量化生态
Julia 在金融工程中增长最快,JuMP.jl 是数学优化领域的事实标准,Flux.jl 是纯 Julia 实现的深度学习框架。
"""回测:根据信号计算累计收益曲线。"""
function backtest(prices::Vector{Float64}, signals::Vector{Float64})::Vector{Float64}
returns = diff(prices) ./ prices[1:end-1]
strategy_returns = returns .* signals[2:end]
cumulative = cumprod(1 .+ strategy_returns)
return cumulative
endJulia 的数值计算性能接近 C,语法接近 Python。但生态规模远不及 Python,量化相关的库数量少,适合对性能敏感的特定场景(高频因子计算、大规模组合优化)。
书籍推荐
入门必读(按顺序)
- Quantitative Trading — Ernest Chan:从零到实盘的最短路径,适合有编程基础但没做过量化的人
- Machine Learning for Algorithmic Trading — Stefan Jansen:把 ML 和交易结合得最系统的一本书
- Advances in Financial Machine Learning — Marcos López de Prado:金融 ML 的进阶读物,关注过拟合和样本偏差
专题深入
| 方向 | 推荐书籍 | 作者 |
|---|---|---|
| 技术分析 | Technical Analysis of the Financial Markets | John Murphy |
| 期权 | Options, Futures, and Other Derivatives | John Hull |
| 风险管理 | Dynamic Hedging | Nassim Taleb |
学习路径:从零到量化策略开发
从 Python 基础到量化策略开发,按序推进:先掌握 pandas、numpy 处理时间序列,再理解 CAPM、Fama-French 三因子模型,补充协整检验、平稳性等时间序列知识,最后从动量策略入手切入回测框架。
采用建议
入门者:先读 Ernest Chan 的《Quantitative Trading》,同时用 yfinance 拉数据、用 backtrader 跑通一个动量策略。先把动量和均值回归的逻辑跑通,再考虑 ML。
研究者:按策略方向对照仓库的论文清单,检查是否漏掉了奠基论文。统计套利方向重点看 Avellaneda & Lee (2010),ML 方向重点看 López de Prado 的过拟合处理。
准备上实盘者:从 Alpaca paper trading 开始,验证回测和模拟盘的差异。实盘的滑点、延迟、资金成本会侵蚀回测收益,行业经验是夏普比率打 30-50% 的折扣。
常见问题
回测收益很好,为什么实盘不行?
差距主要来自四个方面:滑点、交易成本、前视偏差、过拟合。行业经验是回测夏普比率打 30-50% 折扣,具体取决于策略换手率。
Python 和 R 做量化哪个更好?
Python 生态更完整,社区大,新手建议从 Python 开始。R 在学术量化社区更活跃,适合复杂统计分析。
机器学习在量化中真的有用吗?
有用,前提是处理好过拟合。金融数据信噪比极低,先解决交叉验证(Purged K-Fold)和特征选择,模型复杂度是次要问题。
加密货币量化交易和股票有什么区别?
加密货币 24/7 交易、无涨跌停、跨交易所价差大。动量更短(周级别),反转更快。建议单独研究,不要直接搬股票策略。
相关资源
| 资源 | 用途 |
|---|---|
| GitHub 仓库 | 完整资源列表 |
| Backtrader | Python 回测框架 |
| QuantConnect | 云端量化平台(含教程) |
| zipline-reloaded | 社区维护的 Zipline 回测引擎 |
参与讨论
使用 GitHub 登录。欢迎补充事实、异议与实践。
讨论暂时无法加载。