跳到正文

目录

awesome-systematic-trading:量化交易资源地图与学习路径

这个仓库是什么

awesome-systematic-trading 是一个按策略分类的论文导航加工具链清单(2026 年 8 月约 12.5k Stars、1.5k Forks)。量化交易的论文和工具数量庞大,新手不知道从哪篇论文开始读,老手也容易漏掉某个方向的奠基工作。仓库本身不提供交易信号或回测平台,它是一张知识地图——每个策略方向的奠基论文、可用的回测库、能拿到行情的数据源,都列在这里。

从零学量化的人,可以用这个仓库快速找到该读的论文。量化交易论文数量巨大,但每个策略方向真正奠基的通常只有 3-5 篇,仓库筛出了这些。

已经入门的量化研究者,可以拿它查漏补缺:检查自己有没有漏掉某个方向的经典论文,或者某个 Python 库比自己手写的版本更成熟。

Stars 数会随时间变化,文中提到的 12.5k Stars 为 2026 年 8 月观测值,使用时以仓库当前数据为准。


资源分类总览

仓库内容分三类:研究材料(论文、书籍)、工具(代码库、回测框架)、原料(数据源)。三类资源对应量化工作的不同阶段。


量化工作的三个阶段:研究、回测、实盘

量化交易的工作流可以拆成三个阶段。

研究阶段:读论文,理解策略的经济学直觉和统计假设。产出是策略的逻辑描述和参数范围。

回测阶段:用历史数据验证策略,检查收益、夏普比率、最大回撤、换手率。产出是回测报告和参数选择。主要用回测框架(backtrader、zipline)和历史数据(yfinance、Polygon)。

实盘阶段:接入实时行情和券商接口,处理滑点、延迟、资金成本。产出是实盘交易记录。

三个阶段反复迭代。以动量策略为例:

  1. 读论文:Jegadeesh & Titman (1993) 发现过去 3-12 个月表现好的股票在未来 3-12 个月继续跑赢。
  2. 写策略:用过去 12 个月收益率作为信号,正动量做多,负动量做空。
  3. 回测:用 yfinance 拉标普 500 成分股数据,按月调仓,计算夏普比率和最大回撤。
  4. 检查:对比不同 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 的完整用法涉及 initStratinitPortfinitAcct 等多个初始化步骤,适合多资产组合回测,可参考 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
end

Julia 的数值计算性能接近 C,语法接近 Python。但生态规模远不及 Python,量化相关的库数量少,适合对性能敏感的特定场景(高频因子计算、大规模组合优化)。


书籍推荐

入门必读(按顺序)

  1. Quantitative Trading — Ernest Chan:从零到实盘的最短路径,适合有编程基础但没做过量化的人
  2. Machine Learning for Algorithmic Trading — Stefan Jansen:把 ML 和交易结合得最系统的一本书
  3. Advances in Financial Machine Learning — Marcos López de Prado:金融 ML 的进阶读物,关注过拟合和样本偏差

专题深入

方向推荐书籍作者
技术分析Technical Analysis of the Financial MarketsJohn Murphy
期权Options, Futures, and Other DerivativesJohn Hull
风险管理Dynamic HedgingNassim 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 仓库完整资源列表
BacktraderPython 回测框架
QuantConnect云端量化平台(含教程)
zipline-reloaded社区维护的 Zipline 回测引擎

参与讨论

使用 GitHub 登录。欢迎补充事实、异议与实践。