Qlib-量化投资平台


这个仓库是Microsoft开源的Qlib,它是一个面向人工智能的量化投资平台,旨在利用人工智能技术挖掘量化投资的潜力、助力研究并创造价值,支持从想法探索到实际生产的全流程。下面从几个方面详细介绍这个仓库:

核心特性

  • 多范式机器学习支持:支持多种机器学习建模范式,包括监督学习、市场动态建模和强化学习。
  • 全流程覆盖:涵盖了数据处理、模型训练、回测等完整的机器学习流程,以及量化投资的全链条,包括因子挖掘、风险建模、投资组合优化和订单执行。
  • 持续更新的SOTA研究成果:不断有不同范式的最新量化研究成果和论文在Qlib中发布,以共同解决量化投资中的关键挑战。

近期发布的重要特性

特性 状态
BPQP for End - to - end learning 📈Coming soon!(Under review)
🔥LLM - driven Auto Quant Factory🔥 🚀 Released in ♾️RD - Agent on Aug 8, 2024
KRNN and Sandwich models :chart_with_upwards_trend: Released on May 26, 2023
Release Qlib v0.9.0 :octocat: Released on Dec 9, 2022

代码结构

仓库的主要目录结构和内容如下:

.deepsource.toml
.dockerignore
.gitignore
.mypy.ini
.pre-commit-config.yaml
.pylintrc
.readthedocs.yaml
CHANGES.rst
CODE_OF_CONDUCT.md
Dockerfile
LICENSE
MANIFEST.in
Makefile
README.md
SECURITY.md
build_docker_image.sh
pyproject.toml
setup.py
.github/
 ISSUE_TEMPLATE/
 PULL_REQUEST_TEMPLATE.md
 brew_install.sh
 labeler.yml
 release-drafter.yml
 workflows/
scripts/
 README.md
 check_data_health.py
 check_dump_bin.py
 collect_info.py
 data_collector/
 dump_bin.py
 ...
examples/
 ...
qlib/
 ...
docs/
 ...
tests/
 ...
  • .github:包含与GitHub相关的配置文件,如工作流(workflows)、问题模板(ISSUE_TEMPLATE)和拉取请求模板(PULL_REQUEST_TEMPLATE.md)等。
  • scripts:包含各种脚本文件,如数据检查(check_data_health.pycheck_dump_bin.py)、信息收集(collect_info.py)和数据收集器(data_collector)等。
  • examples:提供了一些使用示例,帮助用户快速上手Qlib
  • qlib:核心代码目录,包含了Qlib的主要功能实现。
  • docs:文档目录,包含了项目的文档,可通过文档链接查看。
  • tests:测试代码目录,用于对Qlib的功能进行测试。

核心模块分析

存储模块

qlib/qlib/data/storage目录下,定义了多种存储类,用于处理不同类型的数据存储,如日历数据、工具数据和特征数据等。 - CalendarStorage:用于存储日历数据,其方法行为与List的同名方法保持一致,但具体实现需要子类完成。

class CalendarStorage(BaseStorage):
    def __init__(self, freq: str, future: bool, **kwargs):
        self.freq = freq
        self.future = future
        self.kwargs = kwargs

    @property
    def data(self) -> Iterable[CalVT]:
        raise NotImplementedError("Subclass of CalendarStorage must implement `data` method")
    # 其他方法...
  • InstrumentStorage:用于存储工具数据,同样需要子类实现具体方法。
class InstrumentStorage(BaseStorage):
    def __init__(self, market: str, freq: str, **kwargs):
        self.market = market
        self.freq = freq
        self.kwargs = kwargs

    @property
    def data(self) -> Dict[InstKT, InstVT]:
        raise NotImplementedError("Subclass of InstrumentStorage must implement `data` method")
    # 其他方法...
  • FeatureStorage:用于存储特征数据,提供了数据写入、重写、索引等方法。
class FeatureStorage(BaseStorage):
    def __init__(self, instrument: str, field: str, freq: str, **kwargs):
        self.instrument = instrument
        self.field = field
        self.freq = freq
        self.kwargs = kwargs

    @property
    def data(self) -> pd.Series:
        raise NotImplementedError("Subclass of FeatureStorage must implement `data` method")
    # 其他方法...

数据处理模块

qlib/qlib/data/dataset/storage.py中,定义了数据存储的基类和具体实现类。 - BaseHandlerStorage:数据处理存储的基类,定义了fetchfrom_dfis_proc_func_supported等抽象方法。

class BaseHandlerStorage:
    def fetch(
        self,
        selector: Union[pd.Timestamp, slice, str, list] = slice(None, None),
        level: Union[str, int] = "datetime",
        col_set: Union[str, List[str]] = DataHandler.CS_ALL,
        fetch_orig: bool = True,
        proc_func: Callable = None,
        **kwargs,
    ) -> pd.DataFrame:
        raise NotImplementedError("fetch is method not implemented!")

    @staticmethod
    def from_df(df: pd.DataFrame):
        raise NotImplementedError("from_df method is not implemented!")

    def is_proc_func_supported(self):
        raise NotImplementedError("is_proc_func_supported method is not implemented!")
  • HashingStockStorage:继承自BaseHandlerStorage,通过哈希的方式存储股票数据,提高随机访问的效率。
class HashingStockStorage(BaseHandlerStorage):
    def __init__(self, df):
        self.hash_df = dict()
        self.stock_level = get_level_index(df, "instrument")
        for k, v in df.groupby(level="instrument"):
            self.hash_df[k] = v
        self.columns = df.columns

    def fetch(
        self,
        selector: Union[pd.Timestamp, slice, str] = slice(None, None),
        level: Union[str, int] = "datetime",
        col_set: Union[str, List[str]] = DataHandler.CS_ALL,
        fetch_orig: bool = True,
    ) -> pd.DataFrame:
        # 具体实现...

快速开始相关

  • 安装:可以通过pip安装pyqlib,支持多种操作系统,包括LinuxWindowsmacOS
  • 数据准备:仓库提供了数据处理脚本,帮助用户准备所需的数据。
  • 自动量化研究工作流:提供了自动量化研究工作流的示例,方便用户快速上手。
  • 自定义量化研究工作流:用户可以通过编写代码构建自定义的量化研究工作流。

相关链接