alpha-lab 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- alpha_lab-0.1.0/LICENSE +21 -0
- alpha_lab-0.1.0/PKG-INFO +260 -0
- alpha_lab-0.1.0/README.md +231 -0
- alpha_lab-0.1.0/alpha_lab.egg-info/PKG-INFO +260 -0
- alpha_lab-0.1.0/alpha_lab.egg-info/SOURCES.txt +37 -0
- alpha_lab-0.1.0/alpha_lab.egg-info/dependency_links.txt +1 -0
- alpha_lab-0.1.0/alpha_lab.egg-info/requires.txt +15 -0
- alpha_lab-0.1.0/alpha_lab.egg-info/top_level.txt +3 -0
- alpha_lab-0.1.0/blazestore/__init__.py +21 -0
- alpha_lab-0.1.0/blazestore/config.py +31 -0
- alpha_lab-0.1.0/blazestore/core.py +202 -0
- alpha_lab-0.1.0/blazestore/parse.py +85 -0
- alpha_lab-0.1.0/datacenter/__init__.py +6 -0
- alpha_lab-0.1.0/datacenter/enums.py +28 -0
- alpha_lab-0.1.0/datacenter/inform_data/__init__.py +25 -0
- alpha_lab-0.1.0/datacenter/inform_data/basic.py +321 -0
- alpha_lab-0.1.0/datacenter/inform_data/table.py +107 -0
- alpha_lab-0.1.0/datacenter/market_data/__init__.py +27 -0
- alpha_lab-0.1.0/datacenter/market_data/basic.py +179 -0
- alpha_lab-0.1.0/datacenter/market_data/table.py +112 -0
- alpha_lab-0.1.0/pyproject.toml +64 -0
- alpha_lab-0.1.0/setup.cfg +4 -0
- alpha_lab-0.1.0/tool_box/__init__.py +7 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/__init__.py +6 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/client.py +125 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/dtype.py +408 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/parse.py +65 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/raw.py +51 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/tests/test_client.py +35 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/tests/test_dtype.py +55 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/tests/test_raw.py +31 -0
- alpha_lab-0.1.0/tool_box/clickhouse_df/thread_utils.py +55 -0
- alpha_lab-0.1.0/tool_box/xcals/__init__.py +31 -0
- alpha_lab-0.1.0/tool_box/xcals/api.py +276 -0
- alpha_lab-0.1.0/tool_box/xcals/base.py +220 -0
- alpha_lab-0.1.0/tool_box/ygo/__init__.py +4 -0
- alpha_lab-0.1.0/tool_box/ygo/delay.py +83 -0
- alpha_lab-0.1.0/tool_box/ygo/exceptions.py +31 -0
- alpha_lab-0.1.0/tool_box/ygo/pool.py +178 -0
alpha_lab-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 GDUF-QLab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
alpha_lab-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: alpha-lab
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A High-performance And Standard Alpha Factor Mining System
|
|
5
|
+
Author-email: huangbogeng <huangbogeng@outlook.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
11
|
+
Requires-Python: >=3.11
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: polars>=1.38.1
|
|
15
|
+
Requires-Dist: pandas>=3.0.0
|
|
16
|
+
Requires-Dist: clickhouse-driver>=0.2.6
|
|
17
|
+
Requires-Dist: pyarrow>=23.0.0
|
|
18
|
+
Requires-Dist: numpy>=2.4.0
|
|
19
|
+
Requires-Dist: tqdm>=4.66.0
|
|
20
|
+
Requires-Dist: joblib>=1.3.0
|
|
21
|
+
Requires-Dist: loguru>=0.7.0
|
|
22
|
+
Requires-Dist: sqlparse>=0.5.5
|
|
23
|
+
Requires-Dist: dynaconf>=3.2.12
|
|
24
|
+
Requires-Dist: pytest>=9.0.0
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest; extra == "dev"
|
|
27
|
+
Requires-Dist: ruff; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
# Alpha Lab: High-Performance Alpha Mining System
|
|
31
|
+
|
|
32
|
+
[](https://opensource.org/licenses/MIT)
|
|
33
|
+
[](https://www.python.org/downloads/)
|
|
34
|
+
[](https://github.com/astral-sh/ruff)
|
|
35
|
+
[](https://pola.rs/)
|
|
36
|
+
|
|
37
|
+
**Alpha Lab** 是一个专为量化金融研究设计的高性能数据处理与因子挖掘框架。它深度集成了现代 Python 数据技术栈(Polars, Apache Arrow, ClickHouse),旨在解决传统量化研究中数据加载慢、内存占用高、计算效率低等核心痛点。
|
|
38
|
+
|
|
39
|
+
通过采用惰性计算(Lazy Evaluation)和列式存储(Columnar Storage),Alpha Lab 能够在单机环境下高效处理 TB 级别的金融时序数据。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🌟 核心特性 (Features)
|
|
44
|
+
|
|
45
|
+
- **🚀 极致性能**: 基于 Rust 编写的 **Polars** 引擎,支持多线程并行计算、SIMD 优化及外存(Out-of-Core)处理。
|
|
46
|
+
- **💾 混合存储架构**:
|
|
47
|
+
- **Blazestore**: 基于 Parquet 的本地数据仓库,支持自动分区管理与谓词下推,专为高频行情设计。
|
|
48
|
+
- **ClickHouse**: 无缝集成 ClickHouse 数据库,适合海量截面数据的 OLAP 分析。
|
|
49
|
+
- **🛠 工程化工具箱 (Toolbox)**:
|
|
50
|
+
- **Xcals**: 内置高精度中国市场交易日历,支持复杂的交易日推算、偏移及周期聚合。
|
|
51
|
+
- **Ygo**: 针对 IO 密集型与 CPU 密集型任务优化的并发调度器,简化大规模数据清洗流程。
|
|
52
|
+
- **🔄 数据复用设计**: 独创的“统一视图”模式,无缝连接按天存储的行情数据(Market Data)与按表存储的基础信息(Inform Data),最大化 IO 效率。
|
|
53
|
+
|
|
54
|
+
## 📦 安装指南 (Installation)
|
|
55
|
+
|
|
56
|
+
### 环境要求
|
|
57
|
+
- OS: Linux / macOS / Windows (WSL推荐)
|
|
58
|
+
- Python: 3.9+
|
|
59
|
+
|
|
60
|
+
### 推荐安装 (使用 uv)
|
|
61
|
+
我们强烈推荐使用 [uv](https://github.com/astral-sh/uv) 进行极速环境构建与依赖管理:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 1. 安装 uv
|
|
65
|
+
pip install uv
|
|
66
|
+
|
|
67
|
+
# 2. 快速同步环境(推荐)
|
|
68
|
+
# 这将自动创建虚拟环境并安装 pyproject.toml 中的所有依赖(包含开发依赖)
|
|
69
|
+
uv sync --all-extras
|
|
70
|
+
|
|
71
|
+
# 3. 激活环境
|
|
72
|
+
source .venv/bin/activate # Linux/macOS
|
|
73
|
+
# .venv\Scripts\activate # Windows
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 传统方式 (逐步执行)
|
|
77
|
+
如果您更习惯手动管理:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 创建虚拟环境
|
|
81
|
+
uv venv
|
|
82
|
+
|
|
83
|
+
# 激活环境
|
|
84
|
+
source .venv/bin/activate # Linux/macOS
|
|
85
|
+
# .venv\Scripts\activate # Windows
|
|
86
|
+
|
|
87
|
+
# 安装项目依赖
|
|
88
|
+
uv pip install -e .[dev]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 常规安装 (使用 pip)
|
|
92
|
+
```bash
|
|
93
|
+
pip install -e .[dev]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## ⚙️ 配置 (Configuration)
|
|
97
|
+
|
|
98
|
+
项目首次运行会自动在用户主目录 (`~`) 下生成必要的配置文件。
|
|
99
|
+
|
|
100
|
+
1. **交易日历配置** (`~/.xcals`)
|
|
101
|
+
- 存放交易日历数据文件,确保 `xcals` 模块能正确计算交易日。
|
|
102
|
+
|
|
103
|
+
2. **Blazestore 配置** (`~/.blaze/config.toml`)
|
|
104
|
+
- 配置本地数据仓库的存储路径。
|
|
105
|
+
- 示例内容:
|
|
106
|
+
```toml
|
|
107
|
+
[storage]
|
|
108
|
+
root = "/data/blazestore"
|
|
109
|
+
compression = "zstd"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 🚀 快速上手 (Quick Start)
|
|
113
|
+
|
|
114
|
+
### 对于因子研究员
|
|
115
|
+
因子研究员可以直接使用 `datacenter` 模块获取数据,无需了解底层存储细节。请查看 [4. 因子研究示例](#4-因子研究示例) 了解如何使用。
|
|
116
|
+
|
|
117
|
+
### 系统架构参考
|
|
118
|
+
|
|
119
|
+
#### 1. 本地数据仓库 (Blazestore)
|
|
120
|
+
底层存储引擎,用于数据的持久化与高效查询。
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
import polars as pl
|
|
124
|
+
from blazestore import core
|
|
125
|
+
|
|
126
|
+
# 1. 写入数据 (自动处理分区与元数据)
|
|
127
|
+
df = pl.DataFrame({
|
|
128
|
+
"date": ["2023-01-01", "2023-01-01", "2023-01-02"],
|
|
129
|
+
"asset": ["000001", "000002", "000001"],
|
|
130
|
+
"close": [10.5, 20.0, 10.6]
|
|
131
|
+
})
|
|
132
|
+
# 假设按 date 分区存储
|
|
133
|
+
core.put(df, tb_name="daily_bars")
|
|
134
|
+
|
|
135
|
+
# 2. 查询数据 (SQL 风格,支持 Lazy Evaluation)
|
|
136
|
+
# 此时不进行实际 IO,仅构建查询计划
|
|
137
|
+
lazy_df = core.sql("SELECT * FROM daily_bars WHERE date = '2023-01-01'")
|
|
138
|
+
|
|
139
|
+
# 3. 执行计算
|
|
140
|
+
result = lazy_df.collect()
|
|
141
|
+
print(result)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 2. 交易日历 (Xcals)
|
|
145
|
+
处理复杂的交易日逻辑。
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
from tool_box.xcals import api
|
|
149
|
+
|
|
150
|
+
# 获取日期范围内的所有交易日
|
|
151
|
+
trading_days = api.get_tradingdays(beg_date="2023-01-01", end_date="2023-01-31")
|
|
152
|
+
|
|
153
|
+
# 计算 T+1 交易日
|
|
154
|
+
next_day = api.shift_tradeday("2023-01-20", 1)
|
|
155
|
+
|
|
156
|
+
# 判断是否为交易日
|
|
157
|
+
is_open = api.is_tradeday("2023-01-22") # False (Sunday)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 3. 高级模式:数据清洗与复用
|
|
161
|
+
结合 `ygo` 并发调度与 `datacenter` 数据抽象,实现高效的数据清洗流水线。
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
import polars as pl
|
|
165
|
+
from tool_box.ygo import Pool
|
|
166
|
+
import datacenter as dc
|
|
167
|
+
|
|
168
|
+
# 初始化并发池
|
|
169
|
+
pool = Pool(n_jobs=8)
|
|
170
|
+
|
|
171
|
+
# 定义任务:下载并清洗某日的行情数据
|
|
172
|
+
@pool.submit(job_name="clean_market_data")
|
|
173
|
+
def process_daily_data(date: str):
|
|
174
|
+
# 逻辑层统一调用,底层自动路由到对应存储 (Parquet/DB)
|
|
175
|
+
df = dc.md.read_kline_day(date, dc.Instrument.STOCK)
|
|
176
|
+
cleaned_df = df.filter(pl.col("volume") > 0)
|
|
177
|
+
# ... 存储逻辑
|
|
178
|
+
return f"{date} done"
|
|
179
|
+
|
|
180
|
+
# 批量提交任务
|
|
181
|
+
for date in ["2023-01-01", "2023-01-02"]:
|
|
182
|
+
process_daily_data(date=date)
|
|
183
|
+
|
|
184
|
+
# 执行并发任务
|
|
185
|
+
pool.do()
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 4. 因子研究示例
|
|
189
|
+
对于因子研究员,我们提供了简洁的数据访问接口,无需了解底层存储细节。
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
import polars as pl
|
|
193
|
+
import datacenter as dc
|
|
194
|
+
from tool_box import xcals
|
|
195
|
+
|
|
196
|
+
# 获取日期范围
|
|
197
|
+
start_date = "2023-01-01"
|
|
198
|
+
end_date = "2023-01-31"
|
|
199
|
+
trading_days = xcals.get_tradingdays(start_date, end_date)
|
|
200
|
+
|
|
201
|
+
# 读取股票日线数据
|
|
202
|
+
df = dc.md.read_data_batch(
|
|
203
|
+
start_date,
|
|
204
|
+
end_date,
|
|
205
|
+
dc.Instrument.STOCK,
|
|
206
|
+
dc.DataType.KLINE_DAY
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# 计算因子:5日收益率
|
|
210
|
+
factor_df = df.with_columns(
|
|
211
|
+
# 计算每日收益率
|
|
212
|
+
daily_return=pl.col("close").pct_change(),
|
|
213
|
+
# 计算5日收益率
|
|
214
|
+
five_day_return=pl.col("close").pct_change(periods=5)
|
|
215
|
+
).filter(
|
|
216
|
+
# 过滤掉无效数据
|
|
217
|
+
pl.col("volume") > 0
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# 展示结果
|
|
221
|
+
print(factor_df.head())
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## 📂 项目结构 (Project Structure)
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
alpha-lab/
|
|
228
|
+
├── tool_box/ # 核心基础设施
|
|
229
|
+
│ ├── xcals/ # 交易日历服务
|
|
230
|
+
│ ├── ygo/ # 并发任务调度器
|
|
231
|
+
│ └── clickhouse_df/ # ClickHouse 客户端封装
|
|
232
|
+
├── blazestore/ # 本地 Parquet 存储引擎
|
|
233
|
+
├── datacenter/ # 数据访问层 (Data Access Object)
|
|
234
|
+
│ ├── market_data/ # 行情数据接口
|
|
235
|
+
│ └── inform_data/ # 基础信息数据接口
|
|
236
|
+
├── tests/ # 单元测试集
|
|
237
|
+
├── pyproject.toml # 项目依赖与配置
|
|
238
|
+
└── README.md # 项目文档
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## 🤝 贡献 (Contributing)
|
|
242
|
+
|
|
243
|
+
欢迎提交 Issue 和 Pull Request!在提交代码前,请确保通过以下检查:
|
|
244
|
+
|
|
245
|
+
1. **代码格式化**: 本项目使用 `ruff` 进行代码检查和格式化。
|
|
246
|
+
```bash
|
|
247
|
+
# 检查并自动修复 Lint 错误
|
|
248
|
+
ruff check . --fix
|
|
249
|
+
|
|
250
|
+
# 格式化代码
|
|
251
|
+
ruff format .
|
|
252
|
+
```
|
|
253
|
+
2. **运行测试**:
|
|
254
|
+
```bash
|
|
255
|
+
pytest tests/
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 📄 许可证 (License)
|
|
259
|
+
|
|
260
|
+
本项目采用 [MIT 许可证](LICENSE) 开源。
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Alpha Lab: High-Performance Alpha Mining System
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.python.org/downloads/)
|
|
5
|
+
[](https://github.com/astral-sh/ruff)
|
|
6
|
+
[](https://pola.rs/)
|
|
7
|
+
|
|
8
|
+
**Alpha Lab** 是一个专为量化金融研究设计的高性能数据处理与因子挖掘框架。它深度集成了现代 Python 数据技术栈(Polars, Apache Arrow, ClickHouse),旨在解决传统量化研究中数据加载慢、内存占用高、计算效率低等核心痛点。
|
|
9
|
+
|
|
10
|
+
通过采用惰性计算(Lazy Evaluation)和列式存储(Columnar Storage),Alpha Lab 能够在单机环境下高效处理 TB 级别的金融时序数据。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🌟 核心特性 (Features)
|
|
15
|
+
|
|
16
|
+
- **🚀 极致性能**: 基于 Rust 编写的 **Polars** 引擎,支持多线程并行计算、SIMD 优化及外存(Out-of-Core)处理。
|
|
17
|
+
- **💾 混合存储架构**:
|
|
18
|
+
- **Blazestore**: 基于 Parquet 的本地数据仓库,支持自动分区管理与谓词下推,专为高频行情设计。
|
|
19
|
+
- **ClickHouse**: 无缝集成 ClickHouse 数据库,适合海量截面数据的 OLAP 分析。
|
|
20
|
+
- **🛠 工程化工具箱 (Toolbox)**:
|
|
21
|
+
- **Xcals**: 内置高精度中国市场交易日历,支持复杂的交易日推算、偏移及周期聚合。
|
|
22
|
+
- **Ygo**: 针对 IO 密集型与 CPU 密集型任务优化的并发调度器,简化大规模数据清洗流程。
|
|
23
|
+
- **🔄 数据复用设计**: 独创的“统一视图”模式,无缝连接按天存储的行情数据(Market Data)与按表存储的基础信息(Inform Data),最大化 IO 效率。
|
|
24
|
+
|
|
25
|
+
## 📦 安装指南 (Installation)
|
|
26
|
+
|
|
27
|
+
### 环境要求
|
|
28
|
+
- OS: Linux / macOS / Windows (WSL推荐)
|
|
29
|
+
- Python: 3.9+
|
|
30
|
+
|
|
31
|
+
### 推荐安装 (使用 uv)
|
|
32
|
+
我们强烈推荐使用 [uv](https://github.com/astral-sh/uv) 进行极速环境构建与依赖管理:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 1. 安装 uv
|
|
36
|
+
pip install uv
|
|
37
|
+
|
|
38
|
+
# 2. 快速同步环境(推荐)
|
|
39
|
+
# 这将自动创建虚拟环境并安装 pyproject.toml 中的所有依赖(包含开发依赖)
|
|
40
|
+
uv sync --all-extras
|
|
41
|
+
|
|
42
|
+
# 3. 激活环境
|
|
43
|
+
source .venv/bin/activate # Linux/macOS
|
|
44
|
+
# .venv\Scripts\activate # Windows
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 传统方式 (逐步执行)
|
|
48
|
+
如果您更习惯手动管理:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# 创建虚拟环境
|
|
52
|
+
uv venv
|
|
53
|
+
|
|
54
|
+
# 激活环境
|
|
55
|
+
source .venv/bin/activate # Linux/macOS
|
|
56
|
+
# .venv\Scripts\activate # Windows
|
|
57
|
+
|
|
58
|
+
# 安装项目依赖
|
|
59
|
+
uv pip install -e .[dev]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 常规安装 (使用 pip)
|
|
63
|
+
```bash
|
|
64
|
+
pip install -e .[dev]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## ⚙️ 配置 (Configuration)
|
|
68
|
+
|
|
69
|
+
项目首次运行会自动在用户主目录 (`~`) 下生成必要的配置文件。
|
|
70
|
+
|
|
71
|
+
1. **交易日历配置** (`~/.xcals`)
|
|
72
|
+
- 存放交易日历数据文件,确保 `xcals` 模块能正确计算交易日。
|
|
73
|
+
|
|
74
|
+
2. **Blazestore 配置** (`~/.blaze/config.toml`)
|
|
75
|
+
- 配置本地数据仓库的存储路径。
|
|
76
|
+
- 示例内容:
|
|
77
|
+
```toml
|
|
78
|
+
[storage]
|
|
79
|
+
root = "/data/blazestore"
|
|
80
|
+
compression = "zstd"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 🚀 快速上手 (Quick Start)
|
|
84
|
+
|
|
85
|
+
### 对于因子研究员
|
|
86
|
+
因子研究员可以直接使用 `datacenter` 模块获取数据,无需了解底层存储细节。请查看 [4. 因子研究示例](#4-因子研究示例) 了解如何使用。
|
|
87
|
+
|
|
88
|
+
### 系统架构参考
|
|
89
|
+
|
|
90
|
+
#### 1. 本地数据仓库 (Blazestore)
|
|
91
|
+
底层存储引擎,用于数据的持久化与高效查询。
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
import polars as pl
|
|
95
|
+
from blazestore import core
|
|
96
|
+
|
|
97
|
+
# 1. 写入数据 (自动处理分区与元数据)
|
|
98
|
+
df = pl.DataFrame({
|
|
99
|
+
"date": ["2023-01-01", "2023-01-01", "2023-01-02"],
|
|
100
|
+
"asset": ["000001", "000002", "000001"],
|
|
101
|
+
"close": [10.5, 20.0, 10.6]
|
|
102
|
+
})
|
|
103
|
+
# 假设按 date 分区存储
|
|
104
|
+
core.put(df, tb_name="daily_bars")
|
|
105
|
+
|
|
106
|
+
# 2. 查询数据 (SQL 风格,支持 Lazy Evaluation)
|
|
107
|
+
# 此时不进行实际 IO,仅构建查询计划
|
|
108
|
+
lazy_df = core.sql("SELECT * FROM daily_bars WHERE date = '2023-01-01'")
|
|
109
|
+
|
|
110
|
+
# 3. 执行计算
|
|
111
|
+
result = lazy_df.collect()
|
|
112
|
+
print(result)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 2. 交易日历 (Xcals)
|
|
116
|
+
处理复杂的交易日逻辑。
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
from tool_box.xcals import api
|
|
120
|
+
|
|
121
|
+
# 获取日期范围内的所有交易日
|
|
122
|
+
trading_days = api.get_tradingdays(beg_date="2023-01-01", end_date="2023-01-31")
|
|
123
|
+
|
|
124
|
+
# 计算 T+1 交易日
|
|
125
|
+
next_day = api.shift_tradeday("2023-01-20", 1)
|
|
126
|
+
|
|
127
|
+
# 判断是否为交易日
|
|
128
|
+
is_open = api.is_tradeday("2023-01-22") # False (Sunday)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 3. 高级模式:数据清洗与复用
|
|
132
|
+
结合 `ygo` 并发调度与 `datacenter` 数据抽象,实现高效的数据清洗流水线。
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
import polars as pl
|
|
136
|
+
from tool_box.ygo import Pool
|
|
137
|
+
import datacenter as dc
|
|
138
|
+
|
|
139
|
+
# 初始化并发池
|
|
140
|
+
pool = Pool(n_jobs=8)
|
|
141
|
+
|
|
142
|
+
# 定义任务:下载并清洗某日的行情数据
|
|
143
|
+
@pool.submit(job_name="clean_market_data")
|
|
144
|
+
def process_daily_data(date: str):
|
|
145
|
+
# 逻辑层统一调用,底层自动路由到对应存储 (Parquet/DB)
|
|
146
|
+
df = dc.md.read_kline_day(date, dc.Instrument.STOCK)
|
|
147
|
+
cleaned_df = df.filter(pl.col("volume") > 0)
|
|
148
|
+
# ... 存储逻辑
|
|
149
|
+
return f"{date} done"
|
|
150
|
+
|
|
151
|
+
# 批量提交任务
|
|
152
|
+
for date in ["2023-01-01", "2023-01-02"]:
|
|
153
|
+
process_daily_data(date=date)
|
|
154
|
+
|
|
155
|
+
# 执行并发任务
|
|
156
|
+
pool.do()
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 4. 因子研究示例
|
|
160
|
+
对于因子研究员,我们提供了简洁的数据访问接口,无需了解底层存储细节。
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
import polars as pl
|
|
164
|
+
import datacenter as dc
|
|
165
|
+
from tool_box import xcals
|
|
166
|
+
|
|
167
|
+
# 获取日期范围
|
|
168
|
+
start_date = "2023-01-01"
|
|
169
|
+
end_date = "2023-01-31"
|
|
170
|
+
trading_days = xcals.get_tradingdays(start_date, end_date)
|
|
171
|
+
|
|
172
|
+
# 读取股票日线数据
|
|
173
|
+
df = dc.md.read_data_batch(
|
|
174
|
+
start_date,
|
|
175
|
+
end_date,
|
|
176
|
+
dc.Instrument.STOCK,
|
|
177
|
+
dc.DataType.KLINE_DAY
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# 计算因子:5日收益率
|
|
181
|
+
factor_df = df.with_columns(
|
|
182
|
+
# 计算每日收益率
|
|
183
|
+
daily_return=pl.col("close").pct_change(),
|
|
184
|
+
# 计算5日收益率
|
|
185
|
+
five_day_return=pl.col("close").pct_change(periods=5)
|
|
186
|
+
).filter(
|
|
187
|
+
# 过滤掉无效数据
|
|
188
|
+
pl.col("volume") > 0
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# 展示结果
|
|
192
|
+
print(factor_df.head())
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 📂 项目结构 (Project Structure)
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
alpha-lab/
|
|
199
|
+
├── tool_box/ # 核心基础设施
|
|
200
|
+
│ ├── xcals/ # 交易日历服务
|
|
201
|
+
│ ├── ygo/ # 并发任务调度器
|
|
202
|
+
│ └── clickhouse_df/ # ClickHouse 客户端封装
|
|
203
|
+
├── blazestore/ # 本地 Parquet 存储引擎
|
|
204
|
+
├── datacenter/ # 数据访问层 (Data Access Object)
|
|
205
|
+
│ ├── market_data/ # 行情数据接口
|
|
206
|
+
│ └── inform_data/ # 基础信息数据接口
|
|
207
|
+
├── tests/ # 单元测试集
|
|
208
|
+
├── pyproject.toml # 项目依赖与配置
|
|
209
|
+
└── README.md # 项目文档
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 🤝 贡献 (Contributing)
|
|
213
|
+
|
|
214
|
+
欢迎提交 Issue 和 Pull Request!在提交代码前,请确保通过以下检查:
|
|
215
|
+
|
|
216
|
+
1. **代码格式化**: 本项目使用 `ruff` 进行代码检查和格式化。
|
|
217
|
+
```bash
|
|
218
|
+
# 检查并自动修复 Lint 错误
|
|
219
|
+
ruff check . --fix
|
|
220
|
+
|
|
221
|
+
# 格式化代码
|
|
222
|
+
ruff format .
|
|
223
|
+
```
|
|
224
|
+
2. **运行测试**:
|
|
225
|
+
```bash
|
|
226
|
+
pytest tests/
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## 📄 许可证 (License)
|
|
230
|
+
|
|
231
|
+
本项目采用 [MIT 许可证](LICENSE) 开源。
|