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.0003, sell_cost=0.0003, min_cost=5,
    ),
)
print(result.metrics)
result.save("outputs/backtest")

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

6. 浏览文档

在线阅读: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.1.2

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.1.2
File Size Uploaded
qlib_joshuaxql-0.1.2.tar.gz 129.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qlib-joshuaxql 0.1.2
File Interpreter ABI Platform
qlib_joshuaxql-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 189.5 kB

Release files / qlib_joshuaxql-0.1.2.tar.gz

Download URL qlib_joshuaxql-0.1.2.tar.gz
Size 129.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e53cfadb3939689cc9e50745a2942f69b35a5a7f01d5155da42e7173cf50022f
BLAKE2b-256 checksum
How to use checksums
310d77ce1899c847548ccba76eee5c8b87a59365986a6abab3e178fc845711ff
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.1.2-py3-none-any.whl

Download URL qlib_joshuaxql-0.1.2-py3-none-any.whl
Size 59.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
122ea385f665cbf8f1a3d98b9281161f655ddd23bd9c7386ca24157f31bf834d
BLAKE2b-256 checksum
How to use checksums
b816b2eed03aea4f93fa950d0e8365b86c771db537dd8a7e6e472a1a1bcdcdcc
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

0.2.0

7 release files

0.1.3

2 release files

This release

0.1.2 This release

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