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、多空收益、自相关、分组收益与换手率;多因子、多持有期分析及报告导出
策略与回测 TopkStrategy、TopkDropoutStrategy、WeightStrategy;日频撮合、费用、滑点、涨跌停、成交量约束及持仓报告
数值加速 纯 C 实现 rolling、expanding 和 PIT 查询核心,使用 MinGW-w64 构建,通过 NumPy / ctypes 调用

用法

1. 安装

需要 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 安装即可读取数据、计算因子和运行回测;行情与财务数据需单独准备。

运行下文的 scripts/ 数据维护、原生编译或本地文档构建命令时,请先获取源码并安装:

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。

Windows 下可选编译 C 核心,需要与 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

PyPI wheel 不包含预编译 DLL。未构建 DLL 时,表达式计算和 PIT 查询使用 pandas/NumPy 回退。环境与编译说明见安装指南。

2. 准备数据

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

~/.qlib/qlib_data/cn_data/
├─ calendars/
├─ features/
├─ instruments/
├─ industry/
├─ 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.2.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.2.0
File Size Uploaded
qlib_joshuaxql-0.2.0.tar.gz 165.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for qlib-joshuaxql 0.2.0
File
qlib_joshuaxql-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
qlib_joshuaxql-0.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
qlib_joshuaxql-0.2.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.2.0-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details
qlib_joshuaxql-0.2.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
qlib_joshuaxql-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.7 MB

Release files / qlib_joshuaxql-0.2.0.tar.gz

Download URL qlib_joshuaxql-0.2.0.tar.gz
Size 165.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8ab538f6e70813af39525cca6b5183b2cb5b968827684f58ab2380e61296151e
BLAKE2b-256 checksum
How to use checksums
dc0867631a67b68d9ac47d7d770c5d84d300b373ca885f08b4403748371c9956
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.2.0-py3-none-win_amd64.whl

Download URL qlib_joshuaxql-0.2.0-py3-none-win_amd64.whl
Size 508.2 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
abec5717eafa2b4e2e3e47655ec06cb56df75db5745a747c3b3b6106c469b16b
BLAKE2b-256 checksum
How to use checksums
85027c5baee5c46d5e58dade3e29bc553f6adcd137f556a05e7fa0f6656aca12
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.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL qlib_joshuaxql-0.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 494.6 kB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
b037abb44ba0bfe428a7f2b11bbd87c899f47bfc7cd075740ef11ba9209deb59
BLAKE2b-256 checksum
How to use checksums
75ddc2349d3101e5095ea79e4d21c43d2d5352a077bfcbdcefa2a638c28dee50
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.2.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.2.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
327173e4a0cc6946ccfb346ae06e381f1e475898b3b569a730ba7ebf5da08537
BLAKE2b-256 checksum
How to use checksums
c6a7c53a47eed659ca4c8eded3c971763eb2ddc24e762b1ac3ae166c674aa08d
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.2.0-py3-none-macosx_11_0_x86_64.whl

Download URL qlib_joshuaxql-0.2.0-py3-none-macosx_11_0_x86_64.whl
Size 486.9 kB
Tags Python 3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
11c3f0ff494600c79250a349084ff44c23fe10cd7f62716c99a708909ffdf77c
BLAKE2b-256 checksum
How to use checksums
684156da9da5711b26e35f6ec49fc2094cb5fff1df6a5c9ac96da894cfe31cd2
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.2.0-py3-none-macosx_11_0_arm64.whl

Download URL qlib_joshuaxql-0.2.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
18f1f0cb6c5ef4f17212a9e3a2c0d5ab4646d94a826a9f8f9bd974353fb3a4de
BLAKE2b-256 checksum
How to use checksums
7176b8625cc55888168ea722053f4740af926e0f59acb1b820519c2e2f566769
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.2.0-py3-none-any.whl

Download URL qlib_joshuaxql-0.2.0-py3-none-any.whl
Size 67.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
541ac73e12de2209cca17eac728c5002cf77b79df46445668a67a0ddc446c628
BLAKE2b-256 checksum
How to use checksums
8d3dd3b3dfe683d2b66d3a247893b9e345b4f502c5abd16e53500bb35cc3a211
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

0.3.0

6 release files

This release

0.2.0 This release

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