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, 凭据扫描, 因子择时, 多因子模型, 无后门, 时间序列分析, 算法交易, 逆向工具, 量化投资