Skip to main content

Qlib

中文 | English

Qlib 是面向本地股票量化研究的 Python 工具库,覆盖行情与财务数据管理、表达式因子计算、历史股票池筛选、因子评估和日频回测。通过统一的数据接口,将本地数据转化为可分析、可回测的研究结果。

PyPI · 在线文档 · 功能介绍 · 快速上手 · API 参考 · 数据集

功能

模块 主要能力
数据管理 日线、交易日历、基础信息、历史指数成分、行业与 ST 区间;Tushare 下载与永久 CSV 缓存,直接构建本地数据
价格复权 默认后复权,支持前复权与不复权;价格先复权,再进行表达式计算
因子表达式 算术、条件、滚动、累计、排名、相关与回归算子;自动加载预热历史,可禁止未来引用
历史过滤 ST、上市天数、行业、指数成分、可交易性与表达式过滤;支持组合条件
PIT 财务 Tushare fina_indicator 全部 163 个数值指标;保留公告与修订历史,每股一组 pit.data / pit.index
因子预处理 均值标准差、中位数 MAD 两种去极值方法,Z-score 标准化;可组合去极值、中性化、标准化
因子评估 IC、RankIC、ICIR、多空收益、自相关、分组收益与换手率;批量计算后按因子分别导出 CSV 与离线 pyecharts 交互报告
策略与回测 TopkStrategy、TopkDropoutStrategy、WeightStrategy;日频撮合、费用、滑点、涨跌停、成交量约束及持仓报告
数值加速 Windows、Linux、macOS 平台 wheel 内置纯 C rolling、expanding 和 PIT 查询核心,通过 NumPy / ctypes 调用

用法

1. 安装

当前版本为 0.3.0,需要 Python 3.10+。从 PyPI 安装:

python -m pip install qlib-joshuaxql

发行包名称为 qlib-joshuaxql,Python 导入名仍是 qlib:

import qlib

print(qlib.__version__)

升级时使用 python -m pip install --upgrade qlib-joshuaxql。建议使用独立虚拟环境。 PyPI 安装即可读取数据、计算因子和运行回测;行情与财务数据需单独准备。 匹配的平台 wheel 包含预编译数值库:Windows x86_64、Linux x86_64/aarch64、macOS arm64/x86_64,安装时不需要编译器。 0.3.0 提供这五个平台的预编译 wheel,以及由同一版本源码生成的新源码包(sdist)。 已安装 0.2.0 的用户使用上方普通升级命令即可更新。

运行下文的 scripts/ 数据维护、原生编译或本地文档构建命令时,请先获取源码并安装。 源码构建需要对应的 C 编译器:Windows 使用 MinGW-w64 GCC,Linux 使用 GCC,macOS 使用 Clang。

git clone https://github.com/joshuaxql/qlib.git
cd qlib
python -m venv .venv
.venv\Scripts\python.exe -m pip install -e ".[download,docs]"

仅使用数据读取、因子分析和回测时,可安装 -e .。Linux/macOS 对应的 Python 路径为 .venv/bin/python。

修改 C 源码后,可重新构建三个数值库。Windows 使用与 Python 架构匹配的 MinGW-w64 GCC:

# GCC 已在 PATH 中时
.venv\Scripts\python.exe scripts/build_rolling.py

# 也可指定编译器路径
.venv\Scripts\python.exe scripts/build_rolling.py --cc D:/software/mingw64/bin/gcc.exe

Linux/macOS 使用 .venv/bin/python scripts/build_rolling.py。平台库分别为 .dll、.so、.dylib; 通过 ctypes 调用,不依赖 CPython 或 NumPy C ABI,因此每个平台使用一个 py3-none wheel。 环境、回退及构建验证说明见安装指南和原生 wheel 构建。

2. 准备数据

从 Hugging Face 数据集 下载 cn_data.zip,解压到 ~/.qlib/qlib_data/。解压后应存在:

~/.qlib/qlib_data/cn_data/
├─ calendars/
├─ features/
├─ instruments/
├─ industry/
├─ industry_names.json
├─ financial/
└─ stock_basic.csv

也可配置 scripts/config.py 中的数据目录和起始日期,再从 Tushare 构建:

$env:TUSHARE_TOKEN = "你的 Token"
.venv\Scripts\python.exe scripts/build_data.py

下载以完整 CSV 为缓存单位;构建直接读取 CSV 写出 Qlib 数据。财务和涨跌停字段也可独立维护:

# 从已有季度 CSV 构建财务数据;添加 --download 可先下载/刷新
.venv\Scripts\python.exe scripts/build_pit.py

# 为已有日线数据下载并补充每日涨跌停价
.venv\Scripts\python.exe scripts/build_limits.py --download

读取和回测可离线运行,无需 Tushare Token。详细说明见数据维护。

3. 读取行情与计算因子

import qlib
from qlib.data import D
from qlib.data.filter import ListingDaysFilter, STFilter

provider = qlib.init("~/.qlib/qlib_data/cn_data", adjust="hfq")

prices = D.daily(
    ["000001.SZ", "600000.SH"], ["open", "close", "volume"],
    "2025-01-01", "2025-12-31",
)

pool = D.instruments("csi300", [STFilter(), ListingDaysFilter(min_days=180)])
features = D.features(
    pool,
    ["$close", "Mean($close, 20)", "$close / Ref($close, 20) - 1", "P($$eps)"],
    "2025-01-01", "2025-12-31",
    allow_future=False,
)
print(features.head())
  • adjust="hfq" 为默认后复权;"qfq" 为前复权;"none" 为原始价格。
  • daily() 和 features() 返回以 (instrument, datetime) 为索引的 DataFrame。
  • P($$eps) 读取当时已公告的最新报告期 EPS;PRef($$eps, -1) 读取前一自然季度。
  • 更新本地数据后调用 D.clear_cache() 或重新初始化。

算子与时点语义见表达式、历史过滤和PIT 财务。

4. 评估因子

沿用上面的 provider 和 pool:

from qlib.contrib.report.analysis_model import factor_analysis

analysis = factor_analysis(
    pool,
    {"momentum20": "$close / Ref($close, 20) - 1"},
    "2025-01-01", "2025-12-31",
    provider=provider, horizons=(1, 5, 20), quantiles=5,
    price="open", entry_lag=1,
)
print(analysis.summary)
analysis.save("outputs/factor_analysis")

默认标签为下一交易日开盘进入、持有指定交易日数后的开盘价收益。指标口径与底层评估接口见因子分析。

factor_analysis() 默认执行均值±3倍标准差去极值、行业+对数总市值中性化、Z-score 标准化。 market_cap="total_mv" 为默认市值口径,可通过 neutralize_min_samples 调整回归最小样本数(默认 3)。 也可单独中性化已有因子:

from qlib.contrib.report.analysis_model import neutralize_factors

neutral = neutralize_factors(
    features[["$close / Ref($close, 20) - 1"]],
    provider=provider, market_cap="total_mv", min_samples=20,
)

行业和市值使用因子当日数据,缺失或无效样本保留 NaN;market_cap="circ_mv" 可改用流通市值。

还支持按日横截面去极值与标准化:winsorize_factors(..., method="std") 使用均值±n倍标准差, method="mad" 使用中位数±n×1.4826×MAD;standardize_factors() 计算 Z-score。 组合处理固定按“去极值 → 中性化 → 标准化”的顺序执行:

from qlib.contrib.report.analysis_model import preprocess_factors

processed = preprocess_factors(
    features[["$close / Ref($close, 20) - 1"]], provider=provider,
    winsorize="std", winsorize_n=3,
    neutralize=True, neutralize_min_samples=20,
    standardize=True,
)

factor_analysis() 也支持这些参数。各步骤默认开启,去极值默认 winsorize="std", winsorize_n=3; 标准差采用 ddof=0,缺失值保留 NaN。默认需要本地历史行业和总市值数据。 设置 winsorize=None, neutralize=False, standardize=False 可关闭全部预处理,winsorize="mad" 可改用中位数法。 完整口径及零 MAD、恒定样本的处理见因子分析文档。

5. 运行回测

from qlib.backtest import ExchangeConfig, backtest
from qlib.contrib.strategy import TopkDropoutStrategy

strategy = TopkDropoutStrategy(
    topk=50, n_drop=5,
    score="$close / Ref($close, 20) - 1",
    instruments=pool, risk_degree=0.95,
)
result = backtest(
    strategy, "2025-01-01", "2025-12-31",
    provider=provider, initial_cash=1_000_000,
    exchange=ExchangeConfig(
        deal_price="open", lot_size=100,
        buy_cost=0.0001, sell_cost=0.0001, sell_tax=0.0005, min_cost=5,
    ),
)
print(result.metrics)
result.save("outputs/backtest")

信号在下一交易日执行,撮合使用原始价格,并自动读取 up_limit / down_limit 边界。TopkDropoutStrategy 根据实际持仓换出股票,先卖后买,保留股票不重新调权。结果包含净值、持仓、成交、订单和绩效指标。执行假设与配置见策略与回测。

默认买卖佣金均为 万分之一(0.0001),每笔最低佣金仍为 5 元; 印花税为 万分之五(0.0005),仅卖出收取,在卖出佣金之外另计。 这些是固定回测参数,不自动按历史政策切换;可通过 ExchangeConfig 显式覆盖。

6. 关键日志

日志统一使用 Loguru(安装时自动包含),仅记录阶段开始、完成摘要、报告路径和重要警告。 不输出逐股/逐日进度条、逐次重试详情或 joblib 任务进度;批量构建中的重复数据警告按类别汇总数量。 数据读取与表达式求值保持安静,异常仍正常抛出,不会被日志吞掉。

Qlib 不修改调用方的日志处理器。可在应用入口配置简洁输出:

import sys
from loguru import logger

logger.remove()  # 由应用主动替换默认处理器;已有日志配置时无需重复设置
logger.add(sys.stderr, level="INFO", format="{time:HH:mm:ss} | {level} | {message}",
           backtrace=False, diagnose=False)

只看警告可将 level 改为 "WARNING"。日志默认不写文件;文件输出及脚本环境变量设置见 日志配置。

7. 浏览文档

在线阅读:Qlib 文档。

文档使用 Sphinx 和 sphinx_rtd_theme,涵盖使用指南、Python API、表达式与 C 接口:

.venv\Scripts\python.exe -m sphinx -b html -W --keep-going docs docs/_build/html

构建后打开 docs/_build/html/index.html。更多入口:包结构、API 参考、文档维护。

开源协议

本项目采用 MIT License。引用代码的版权与许可声明保留在相应模块中: 数值核心、因子评估、策略。

鸣谢

Metadata

Release files for qlib-joshuaxql 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qlib-joshuaxql 0.3.0
File Size Uploaded
qlib_joshuaxql-0.3.0.tar.gz 636.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for qlib-joshuaxql 0.3.0
File
qlib_joshuaxql-0.3.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
qlib_joshuaxql-0.3.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
qlib_joshuaxql-0.3.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl Python 3 none Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 Details
qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details
qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 3.1 MB

Release files / qlib_joshuaxql-0.3.0.tar.gz

Download URL qlib_joshuaxql-0.3.0.tar.gz
Size 636.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5cf2051e8acc899aca47f76e9f1b81b9c25953e7844ea215269a38f6c69ff583
BLAKE2b-256 checksum
How to use checksums
41f99e9b3d97867528e75d8e944923ced7ecca2f12b2c914bbc1ff53a77f154f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / qlib_joshuaxql-0.3.0-py3-none-win_amd64.whl

Download URL qlib_joshuaxql-0.3.0-py3-none-win_amd64.whl
Size 508.3 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
c82c83d161dd01b9f52b47ea8b5868e056f7f6daf2ec538e857e62162cfcdb1b
BLAKE2b-256 checksum
How to use checksums
8c1d214c6b94d801fc7a5984e4e9f008c05f9fd752147f96073bcb569e98944c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / qlib_joshuaxql-0.3.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL qlib_joshuaxql-0.3.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 494.7 kB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
7a4fd0660d489aed2501c8ac7efcb115b5d9e58b0804e1e19a4536b27168fc89
BLAKE2b-256 checksum
How to use checksums
9e56e9d5f55f7fc04d17ec8bb970a7b4f6a9428cf040c386f693d72d8e33067a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / qlib_joshuaxql-0.3.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl

Download URL qlib_joshuaxql-0.3.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Size 494.7 kB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 Python 3
SHA-256 checksum
How to use checksums
ad6456aec242b46af45376938a48f617bc8cde518a399591c57f71c55014fec8
BLAKE2b-256 checksum
How to use checksums
35236fcca01613ae2d369093d9016301d6be4f9bd78ddb6f787402761ea254c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_x86_64.whl

Download URL qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_x86_64.whl
Size 487.0 kB
Tags Python 3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
84f60e6ac2672661d5ea7485eaa480702a83765f5f69a11a1935c4904cb3ccef
BLAKE2b-256 checksum
How to use checksums
90000a4050cf3973481693b09087e50f33fe1869c47003ad697b224ddd2a70b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_arm64.whl

Download URL qlib_joshuaxql-0.3.0-py3-none-macosx_11_0_arm64.whl
Size 486.9 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
623f6e98d41f8b4dd111979e365709baa2d9a4ca61db25319ea391cdc7c6a5c2
BLAKE2b-256 checksum
How to use checksums
2291b1d4dacd8eceef64b5bd0ba49e094d89c340f6325baaf6a6cdbe4651ced6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

0.3.0 This release

6 release files

0.2.0

7 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page