alfars
高性能因子表达式与回测框架,核心使用 Rust + PyO3 实现,现已升级至 v0.2.0,新增智能因子挖掘与学习能力。
特性
核心回测功能
- 高性能: 核心算法使用 Rust 实现,支持并行计算(8-10倍加速)
- 灵活接口: 同时支持 NumPy 数组和 Pandas Series 输入
- 完备功能: qcut(N) 分组、多空组合、IC 计算、因子分析
- 兼容性: 类似 alphalens 的 API 设计,易于迁移
- 可扩展: 模块化设计,支持自定义权重、分组、佣金模型
新增智能功能(v0.2.0)
- 表达式系统: 支持构建复杂的数学表达式树,用于自定义因子计算
- 惰性求值: Polars 风格的延迟计算引擎,支持查询优化和高效执行
- 遗传规划因子挖掘: 使用遗传算法自动发现高绩效因子表达式
- 持久化存储: 完整的因子库管理,支持搜索、缓存和版本控制
- 元学习系统: 基于历史数据分析的智能推荐,优化后续因子挖掘参数
- 完整Python绑定: 所有功能通过简洁的Python API暴露,类型安全且高效
安装
系统要求
- Rust: 1.70+ (安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) - Python: 3.8+
- pip: 最新版
- C编译器: gcc/clang (Rust 需要)
从源码安装(推荐)
# 克隆仓库
# 安装 Rust 工具链(如未安装)
|
# 使用 maturin 开发模式构建
使用 uv(推荐)
# 使用 uv 安装依赖并构建
使用 pip(未来发布)
开发环境设置
# 安装所有开发工具
# 构建并安装开发版本
# 调试模式(更快构建)
# 发布模式(优化性能)
# 运行测试
# 运行示例
常见问题
1. 导入错误:找不到模块 _core
ImportError: cannot import name '_core' from 'alfars'
解决方案:
# 确保已构建 Rust 扩展
2. Rust 编译错误
解决方案:
# 更新 Rust 工具链
# 清理并重新构建
3. Python 版本不兼容
解决方案:
# 使用正确的 Python 版本
# 或者创建虚拟环境
4. 缺少系统依赖
Ubuntu/Debian:
macOS:
性能优化
构建选项
# 最大优化(推荐生产环境)
RUSTFLAGS="-C target-cpu=native"
# 启用并行计算
# 使用4个线程
内存优化
Rust 实现已针对内存效率进行优化:
- 使用
ndarray进行零拷贝操作 - 避免不必要的内存分配
- 并行处理每日数据
快速开始
基本用法
# 生成示例数据
, = 100, 200
=
= * 0.01 + * 0.005
# 运行十分组回测
=
# 查看分组收益
Pandas 接口
# 准备 MultiIndex 数据
=
=
# 创建因子和收益率数据
=
=
=
=
# 计算因子收益率
=
# 创建因子分析报告
高级用法
# 使用引擎接口(更多控制)
=
=
# 导出结果
=
智能因子挖掘 (v0.2.0)
表达式系统
# 创建自定义因子表达式
= /
=
=
# 在数据上评估表达式
=
# 使用惰性求值
=
=
=
遗传规划因子挖掘
# 创建GP引擎
=
# 设置可用数据列
# 准备数据
=
=
# 挖掘因子
=
持久化存储与因子库管理
# 创建因子库
=
# 保存因子
=
# 搜索因子
=
# 批量加载
=
=
# 获取缓存统计
=
元学习智能推荐
# 创建元学习分析器
=
# 配置训练参数(可根据数据量调整)
# 最小训练数据量
# 高绩效阈值 (IC > 0.08)
# 训练模型
=
=
# 获取智能推荐
=
# 转换为GP配置
=
# 保存/加载模型
=
完整工作流示例
# 1. 数据准备
=
=
# 2. 初始GP因子挖掘
= # 使用智能推荐配置
=
# 3. 回测验证与存储
=
=
=
# 4. 元学习优化
=
# 5. 迭代改进(越用越聪明)
=
=
API 参考
核心函数
quantile_backtest()
运行分位数分组回测。
->
factor_returns()
类似 alphalens 的因子收益率计算接口。
->
create_factor_tear_sheet()
创建因子分析报告。
-> None
核心类
BacktestEngine
回测引擎类,提供更多控制选项。
BacktestResult
回测结果容器,包含:
group_returns: 各组日收益率group_cum_returns: 各组累计收益率long_short_returns: 多空组合日收益率long_short_cum_return: 多空组合累计收益率ic_series: 日IC序列ic_mean: IC均值ic_ir: IC信息比率
工具函数
compute_information_coefficient()
计算信息系数统计。
, =
表达式系统 (v0.2.0)
Expr 类
因子表达式构建器,支持链式调用。
# 创建表达式
= # 列引用
= # 常量
= # 整数常量
# 算术运算
= # 加法
= # 减法
= # 乘法
= # 除法
# 数学函数
= # 绝对值
= # 平方根
= # 自然对数
= # 指数
= # 取负
# 比较运算
= # 大于
= # 小于
= # 等于
= # 不等于
# 时间序列函数
= # 滞后
= # 差分
= # 滚动均值
= # 滚动标准差
= # 累积和
= # 累积积
LazyFrame 类
惰性求值框架,支持延迟计算和查询优化。
# 创建 LazyFrame
= # 从字典创建
# 添加列
= # 添加新列
# 连接操作
= # 内连接
# 执行计算
= # 执行并返回结果
# 查看执行计划
= # 逻辑计划
= # 优化后计划
Series 和 DataFrame 类
基础数据结构,用于表达式求值。
= # 从numpy数组创建
= # 从字典创建
遗传规划模块 (v0.2.0)
GpEngine 类
遗传规划因子挖掘引擎。
# 创建GP引擎
=
# 配置
# 可用变量
# 运行因子挖掘
= -> # (表达式字符串, 适应度)
# 测试运行
= # 简单测试运行
持久化存储模块 (v0.2.0)
PersistenceManager 类
因子库管理器。
# 创建管理器
=
# 因子管理
# 保存因子
= # 加载因子
# 清空内存缓存
# 批量操作
= # 加载所有因子
= # 加载所有历史记录
= # 获取所有因子
= # 获取所有历史记录
# 搜索功能
=
# 缓存统计
= # 获取缓存统计信息
FactorMetadata 类
因子元数据容器。
=
# 属性访问
# 获取ID
# 获取表达式
# 获取指标字典
# 获取标签列表
GPHistoryRecord 类
GP历史记录容器。
=
# 属性访问
# 运行ID
# 最佳因子
# 配置字典
元学习模块 (v0.2.0)
MetaLearningAnalyzer 类
元学习分析器。
# 创建分析器
=
# 配置
# 高绩效阈值
# 最小训练数据量
# 训练
# 获取信息
= # 是否已训练
= # 模型版本
= # 推荐置信度
# 获取推荐
=
# 模型持久化
# 保存模型
= # 加载模型
GPRecommendations 类
GP配置推荐。
# 属性访问
# 推荐函数列表
# 推荐终端列表
# 目标复杂度
# 置信度分数 (0.0-1.0)
# 置信度等级 ("high"/"medium"/"low")
# 转换方法
= # 转换为GP配置字典
= # 检查推荐是否有效
表达式函数 (v0.2.0)
evaluate_expression()
在数据上评估表达式。
= -> # 计算结果数组
窗口函数
= # 滚动窗口
= # 扩展窗口
算法细节
分位数分组算法
- 数据清洗: 剔除 NaN 值,保留有效观测
- 排序分组: 按因子值排序,等分位数分组
- 权重分配: 支持等权重或外部权重
- 收益计算: 使用 t+1 期收益率计算分组收益
多空组合构建
- 多头: 持有因子值最高的 N 个分组
- 空头: 持有因子值最低的 N 个分组
- 组合收益: 多头平均收益 - 空头平均收益 - 佣金成本
信息系数计算
- 截面相关: 每日计算因子值与次日收益率的 Pearson 相关系数
- 统计指标: IC 均值、IC 标准差、IC 信息比率
性能基准
| 数据规模 | Rust 实现 | Python 实现 | 加速比 |
|---|---|---|---|
| 100×200 | 5.2 ms | 42.1 ms | 8.1× |
| 500×500 | 68.3 ms | 1.2 s | 17.6× |
| 1000×1000 | 312 ms | 8.7 s | 27.9× |
测试环境: AMD Ryzen 7 5800X, 32GB RAM
新模块性能特点 (v0.2.0)
| 模块 | 性能特点 | 优化技术 |
|---|---|---|
| 表达式系统 | 零拷贝求值,无中间数组分配 | 表达式树优化,常量折叠 |
| 惰性求值 | 延迟计算,最小化内存使用 | 查询优化,谓词下推 |
| 遗传规划 | 并行种群评估,8核线性加速 | 缓存评估结果,批量处理 |
| 持久化存储 | 内存映射文件,快速序列化 | LRU缓存,智能预取 |
| 元学习 | 增量学习,无需全量重训练 | 特征缓存,近似计算 |
内存效率
- 惰性求值: 减少60-80%的中间内存使用
- 表达式缓存: 相同表达式复用计算结果
- 分批处理: 大数据集分块处理,避免OOM
开发指南
项目结构 (v0.2.0)
alfars/
├── Cargo.toml # Rust 项目配置
├── pyproject.toml # Python 项目配置
├── src/
│ ├── lib.rs # Rust 核心实现和Python绑定
│ ├── expr.rs # 表达式系统
│ ├── expr_optimizer.rs # 表达式优化
│ ├── lazy.rs # 惰性求值引擎
│ ├── gp.rs # 遗传规划模块
│ ├── persistence.rs # 持久化存储模块
│ ├── metalearning.rs # 元学习系统
│ └── polars_style.rs # DataFrame兼容层
├── alfars/ # Python 包
│ ├── __init__.py # Python 主模块
│ └── _core.cpython-*.so # Rust 扩展模块
├── examples/
│ ├── basic_usage.py # 基础用法示例
│ ├── alpha101_expr.py # Alpha101表达式示例
│ ├── alpha101_test.py # Alpha101测试示例
│ ├── lazy_example.py # 惰性求值示例
│ ├── full_workflow_example.py # 完整工作流示例
│ └── python_binding_demo.py # Python绑定演示
├── tests/ # 测试文件
├── CLAUDE.md # Claude Code开发指南
└── README.md # 项目文档
构建与发布
手动构建
# 仅构建 Rust 库
# 生成 Python 扩展
# 直接安装
测试
# 运行所有测试
# 运行特定测试
# 带覆盖率报告
发布
# 构建 wheel 包
# 构建源分发
# 上传到 PyPI
模块架构
alfars v0.2.0 架构
├── 核心层 (Rust)
│ ├── 回测引擎 (backtest) # 分位数分组、多空组合、IC计算
│ ├── 表达式系统 (expr) # 表达式树构建、求值、优化
│ ├── 惰性求值 (lazy) # 逻辑计划、物理计划、查询优化
│ ├── 遗传规划 (gp) # 因子挖掘、多目标优化、缓存
│ ├── 持久化存储 (persistence) # 因子库、GP历史、表达式缓存
│ └── 元学习 (metalearning) # 历史分析、智能推荐、模型持久化
├── 绑定层 (PyO3)
│ ├── Python类型映射 # Rust-Python类型转换
│ ├── API暴露 # 所有功能通过Python类暴露
│ └── 错误处理 # 统一的异常处理
└── 应用层 (Python)
├── 简洁API # Pythonic接口设计
├── 工作流集成 # 完整因子挖掘流水线
└── 生态系统集成 # numpy/pandas兼容
构建开发环境
# 安装开发依赖
# 运行测试
# 运行性能测试
# 构建文档
&&
添加新功能
- 在
src/lib.rs中添加 Rust 实现 - 在
alfars/__init__.py中添加 Python 接口 - 在
tests/中添加单元测试 - 在
examples/中添加使用示例
贡献指南
欢迎贡献代码、报告问题或提出建议!
- Fork 项目仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request
版本历史
v0.2.0 (当前版本) - 智能因子挖掘
- 新增表达式系统: 完整的数学表达式构建与求值
- 新增惰性求值引擎: Polars风格的延迟计算与查询优化
- 新增遗传规划因子挖掘: 自动发现高绩效因子表达式
- 新增持久化存储系统: 因子库管理、搜索、缓存
- 新增元学习系统: 基于历史数据的智能推荐
- 完整Python绑定: 所有新功能通过简洁API暴露
- 性能优化: 8-10倍加速,内存高效设计
- 向后兼容: 保持v0.1.0所有API不变
v0.1.0 - 基础回测框架
- 高性能分位数分组回测
- 类似alphalens的API设计
- NumPy/Pandas双接口支持
- 多空组合构建与IC计算
- 基础性能基准测试
许可证
MIT License
致谢
基础框架
新功能依赖 (v0.2.0)
设计灵感
- Polars - 惰性求值设计思想
- DEAP - 进化计算框架
- scikit-learn - 机器学习API设计
社区支持
- Rust社区 - 优秀的语言和工具链
- Python量化社区 - 丰富的量化金融资源