这个仓库是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.py
、check_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
:数据处理存储的基类,定义了fetch
、from_df
和is_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
,支持多种操作系统,包括Linux
、Windows
和macOS
。 - 数据准备:仓库提供了数据处理脚本,帮助用户准备所需的数据。
- 自动量化研究工作流:提供了自动量化研究工作流的示例,方便用户快速上手。
- 自定义量化研究工作流:用户可以通过编写代码构建自定义的量化研究工作流。
相关链接
- 项目文档
- GitHub仓库
- RD - Agent:LLM驱动的自动量化工厂工具。