快速开始

bagelquant-core 是 BagelQuant 的面板数据与图计算基础。当研究数据已经以 pandas 形式存在,并且你希望用可复现的方式组织因子逻辑时,可以使用它。

安装

uv add bagelquant-core

本地开发时可以从仓库根目录运行:

uv run python example.py

构建 Domain

Domain 定义交易日历和资产池。包本身不会下载交易日历或证券主数据,这些信息应由数据层提供。

import pandas as pd

from bagelquant_core import Domain

domain = Domain(
    calendar=pd.bdate_range("2024-01-01", "2024-12-31"),
    universe=["AAPL", "MSFT"],
)

创建 Panel

Panel.from_domain 会把原始数据对齐到研究域。行是交易日,列是资产,值必须是数值。

from bagelquant_core import Panel

price = Panel.from_domain(price_df, domain, name="price")
book = Panel.from_domain(book_df, domain, name="book")
quality = Panel.from_domain(quality_df, domain, name="quality")

组合因子图

Transformer 是一元操作,composer 用于组合一个或多个输入。二者都会返回惰性的 Graph

from bagelquant_core.composer import div, weighted_sum
from bagelquant_core.transformer import rank, rolling_mean, winsorize, zscore

bm_ratio = div(book, price, name="bm_ratio")
bm_factor = rank(zscore(winsorize(bm_ratio)), name="bm_factor")
quality_factor = rank(zscore(quality), name="quality_factor")

prediction = weighted_sum(
    bm_factor,
    quality_factor,
    weights=[0.5, 0.5],
    name="prediction",
)

signal = rolling_mean(rank(prediction), window=20, name="signal")

执行

在最下游图上调用 compute()。执行运行时会计算上游依赖,并在本次执行中缓存中间结果。

signal.compute()
result = signal.output
frame = result.data

frame 可以继续交给组合构建或回测模块。