yuhua-crypto/dynamic-factor-rotation
GitHub: yuhua-crypto/dynamic-factor-rotation
基于市场状态识别与注意力机制的A股动态因子轮动量化策略框架,解决传统多因子模型中静态权重无法适应市场环境变化的问题。
Stars: 0 | Forks: 0
# 动态因子轮动策略 — Dynamic Factor Rotation Strategy
## 💡 核心理念
**"不判断股票好坏,判断哪些因子在当前市场环境下会有效"**
传统多因子模型使用静态权重,但因子有效性随市场环境剧烈变化。本项目构建了一个**市场状态驱动 + 注意力机制的动态因子轮动系统**,实现因子层面的"择时"。
市场状态 → 注意力查询 → 因子权重 → 动态配置 → 超额收益
## 🏗 项目结构
量化项目/
├── config.yaml # 全局配置
├── requirements.txt # 依赖
├── README.md
├── src/
│ ├── data/ # 数据层
│ │ ├── fetcher.py # 数据获取 (akshare)
│ │ ├── cleaner.py # 数据清洗
│ │ └── universe.py # 股票池管理
│ ├── factors/ # 因子库 (18个因子)
│ │ ├── base.py # 因子基类
│ │ ├── value.py # 价值因子 (EP/BP/SP/OCF_EV)
│ │ ├── momentum.py # 动量因子 (多尺度)
│ │ ├── quality.py # 质量因子 (ROE/毛利率/应计)
│ │ ├── volatility.py # 波动率因子
│ │ ├── liquidity.py # 流动性/规模因子
│ │ ├── growth.py # 成长因子
│ │ ├── sentiment.py # 情绪因子
│ │ └── registry.py # 因子注册中心
│ ├── evaluation/ # 因子评价
│ │ ├── ic_analysis.py # IC分析
│ │ ├── layer_analysis.py # 分层回测
│ │ ├── factor_corr.py # 相关性分析
│ │ └── fama_macbeth.py # Fama-MacBeth
│ ├── regime/ # ⭐ 市场状态模块 (核心创新)
│ │ ├── market_state.py # 状态特征工程
│ │ ├── regime_detector.py # HMM状态识别
│ │ ├── factor_memory.py # 因子记忆模块
│ │ └── crowding.py # 因子拥挤度
│ ├── model/ # ⭐ 注意力融合模型 (核心创新)
│ │ ├── attention_fusion.py # 跨注意力网络
│ │ ├── trainer.py # 滚动训练框架
│ │ └── predictor.py # 权重预测器
│ ├── backtest/ # 回测引擎
│ │ ├── engine.py # 月频回测
│ │ ├── portfolio.py # 组合构建
│ │ ├── cost_model.py # 成本模型
│ │ └── constraints.py # 风控约束
│ ├── analysis/ # 绩效分析
│ │ ├── performance.py # 绩效指标
│ │ ├── attribution.py # 归因分析
│ │ └── report.py # 报告生成
│ └── main.py # 主流程
├── notebooks/ # Jupyter分析
├── data/ # 数据缓存
└── outputs/ # 输出 (图表/表格/模型)
## 🚀 快速开始
### 安装依赖
pip install -r requirements.txt
### 运行完整流程
# 完整流程 (数据下载 → 因子计算 → 训练 → 回测)
python -m src.main
# 仅下载数据
python -m src.main --step 1
# 仅模型训练和回测 (使用缓存数据)
python -m src.main --model-only --skip-data
### 分步运行 (推荐首次使用)
# 在 Jupyter Notebook 中逐步探索
# 见 notebooks/ 目录
## 🔬 技术架构
### 因子体系 (18个因子)
| 类别 | 因子 | 说明 |
|------|------|------|
| 价值 | ep_ttm, bp, sp_ttm, ocf_ev | 盈利/净资产/营收/现金流 对市值的比率 |
| 动量 | ret_1m, ret_3m, ret_12m_1m, ret_1m_reversal | 多时间尺度动量+反转 |
| 质量 | roe_ttm, gross_margin, accruals | 盈利/毛利/应计质量 |
| 波动 | vol_1m, idiosyncratic_vol | 历史波动+特质波动 |
| 规模/流动性 | ln_cap, turnover_1m | 对数市值+换手率 |
| 成长 | earnings_growth | 盈利增长 |
| 情绪 | amplitude_1m, volume_ratio, price_position | 振幅/量比/价格位置 |
### 市场状态 (HMM)
使用4个隐状态识别市场环境:
- **状态0**: 低波震荡 → 防御型因子主导
- **状态1**: 牛市趋势 → 动量因子主导
- **状态2**: 高波下跌 → 低波/质量因子主导
- **状态3**: 反弹修复 → 价值因子主导
### 注意力融合网络
Factor Memory [LSTM] → Factor Context
↘
Cross-Attention → Dynamic Weights
↗
Market State [MLP] → State Embedding
### 回测参数
| 参数 | 设置 |
|------|------|
| 股票池 | 中证500/中证1000 |
| 调仓频率 | 月度 |
| 持仓数量 | 60只 |
| 交易成本 | 佣金0.03% + 印花税0.05% + 滑点0.05% |
| 回测区间 | 2018-2025 |
## 📊 验证方法
### 基准对比
1. **等权多因子** — 所有因子等权重
2. **IC-IR加权** — 传统滚动IC-IR加权
3. **静态注意力** — 消融: 去除市场状态输入
4. **HMM等权** — 消融: 去除注意力机制
### 消融实验
- 去掉市场状态 → 量化信息损失
- 去掉因子记忆 → 量化历史信息价值
- 去掉注意力 → 量化非线性融合贡献
### 关键指标
- Rank IC > 0.05, IC_IR > 0.5
- Sharpe > 等权基准 10%+
- 因子轮动Alpha显著为正
## 🎯 项目独特卖点
1. **因子择时**而非股票择时 — 更高维度的投资视角
2. **Attention机制**学习因子间非线性交互
3. **市场状态驱动**的自适应因子配置
4. **因子拥挤度**作为反向信号 — 实战视角
5. **消融实验**证明每个组件的价值 — 学术严谨
6. **完整的量化工程闭环** — 数据→因子→模型→回测→归因
## 📝 数据源
- [akshare](https://github.com/akfamily/akshare) — A股免费数据接口
- 申万行业分类
- 中证指数行情
- SHIBOR利率
## ⚠️ 注意事项
- 首次数据下载可能耗时较长(全A日线数据量大)
- 建议使用缓存 (`--skip-data` 跳过重复下载)
- 模型训练需要 PyTorch,GPU可加速
- 回测结果包含交易成本、停牌、涨跌停等实际约束
标签:A股, Python, 凭据扫描, 因子择时, 多因子模型, 无后门, 时间序列分析, 算法交易, 逆向工具, 量化投资