Skip to main content

Qlib

中文 | English

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

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

功能

模块 主要能力
数据管理 日线、交易日历、基础信息、历史指数成分、行业与 ST 区间;Tushare 下载与永久 CSV 缓存,直接构建本地数据
价格复权 默认后复权,支持前复权与不复权;价格先复权,再进行表达式计算
因子表达式 算术、条件、滚动、累计、排名、相关与回归算子;自动加载预热历史,可禁止未来引用
历史过滤 ST、上市天数、行业、指数成分、可交易性与表达式过滤;支持组合条件
PIT 财务 Tushare fina_indicator 全部 163 个数值指标;保留公告与修订历史,每股一组 pit.data / pit.index
因子评估 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")

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

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。引用代码的版权与许可声明保留在相应模块中: 数值核心、因子评估、策略。

鸣谢

Release files for qlib-joshuaxql 0.1.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.1.0
File Size Uploaded
qlib_joshuaxql-0.1.0.tar.gz 116.6 kB Details

Built distribution (wheel)

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

Total release size: 172.3 kB

Release files / qlib_joshuaxql-0.1.0.tar.gz

Download URL qlib_joshuaxql-0.1.0.tar.gz
Size 116.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4f008e569ec98f83de8e99f166476a245eab73c536041d5a363613361ffa4773
BLAKE2b-256 checksum
How to use checksums
ce570e2fc5c4fed6a22dfb4bdca332a27732adfb651dfc8819c6b8dd2b3af417
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.0-py3-none-any.whl

Download URL qlib_joshuaxql-0.1.0-py3-none-any.whl
Size 55.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
80bd743aba82264c734a13b8a72fe373276e4072be3761454d054a96f8cb7526
BLAKE2b-256 checksum
How to use checksums
69b11ee0c040690b88f786177e60425237ea041cd2a2312261a8e6a3a804be97
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.1.1

2 release files

This release

0.1.0 This release

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