基于 pandas/numpy 的轻量级多因子选股研究平台,覆盖 行情面板 → 因子计算 → IC 评价 → 分层回测 → 组合回测 → 报告生成 的完整量化研究流程。零重依赖(仅 pandas/numpy),全部计算本地离线完成。
alpha_lab/
├── config.py # 全局配置(佣金、TopK、层数等)
├── data/ # 行情面板 PanelData + 合成数据 + dzh_data 快照适配器
├── factors/ # 因子基类、注册表、内置因子库
│ ├── momentum.py 动量(mom)、均线偏离(ma_bias)
│ ├── volatility.py 已实现波动率(vol)、下行波动率(downside_vol)
│ ├── volume.py 量价相关性(pv_corr)、量比(volume_ratio)
│ └── candle.py 上/下影线频率、实体占比(K线形态类)
├── evaluation/ # RankIC/ICIR、分层收益与净值、绩效指标
├── portfolio/ # 等权 / TopK / 逆波动率组合构建
├── backtest/ # 面板化向量化回测(t 日信号 t+1 日成交,无未来函数)
└── report/ # Markdown 因子研究报告生成
pip install pandas numpy
python examples/demo_synthetic.py # 合成数据端到端演示(不触网)from alpha_lab.data import PanelData, make_synthetic_panel
# 方式一:合成数据(演示/测试)
panel, true_exposure = make_synthetic_panel(n_dates=250, n_symbols=20)
# 方式二:长表 DataFrame(列: date, symbol, open, high, low, close, volume)
panel = PanelData.from_long(long_df)from alpha_lab.factors import list_factors, make_factor
print(list_factors()) # ['body_ratio', 'downside_vol', ..., 'volume_ratio']
mom = make_factor("mom", lookback=20)
values = mom.compute(panel) # DataFrame[date × symbol]自定义因子:继承 Factor 并用 @register_factor("名字") 注册。
from alpha_lab.evaluation.ic import forward_returns, ic_series, ic_summary
from alpha_lab.evaluation.quantile import quantile_returns
fwd = forward_returns(panel.close, periods=1) # t → t+1 前视对齐
ic = ic_series(factor_values, fwd) # 每日 RankIC
print(ic_summary(ic)) # 均值/ICIR/t值/正比例
q = quantile_returns(factor_values, fwd, quantiles=5)from alpha_lab.backtest.engine import BacktestEngine
from alpha_lab.portfolio.builder import topk_weight
weights = topk_weight(factor_values, k=5) # 因子值前 5 名等权
result = BacktestEngine().run(panel, weights) # t 日信号 t+1 日成交
print(result.metrics) # 年化/夏普/回撤/换手from alpha_lab.data.adapters import panel_from_dzh_snapshots
panel = panel_from_dzh_snapshots("path/to/snapshot_dir") # 目录含 snapshot_*.parquet- 无未来函数:t 日收盘后计算的因子权重,t+1 日按收盘价成交(引擎内部 shift(1))。
- 佣金:按单边换手 × 佣金率 × 2 计提(买、卖各一次)。
- 停牌处理:无行情的股票当日无法调仓,沿用前一日权重。
- 因子值方向统一为"越大越好",反向因子在因子内部取负。
python -m pytest tests/ -v # 42 个用例,覆盖数据/因子/评价/组合/回测/报告