基于多视角注意力神经网络(MVAN)的A股智能选股模型。本项目使用沪深300成分股的技术面因子,通过深度学习方法预测短期股票走势,从而辅助智能选股。
该项目旨在提出一种多视角注意力神经网络(Multi-View Attention Network, MVAN)模型,基于沪深300成分股的技术面因子,预测短期股票走势,从而辅助智能选股。项目同时比较MVAN与经典机器学习模型(如LightGBM、MLP、Transformer)在统一选股任务上的表现。
- 提出一种多视角注意力神经网络(MVAN)
- 基于沪深300成分股技术面因子预测短期股票走势
- 将预测结果应用于选股任务
- 比较MVAN与经典机器学习模型的表现
- 股票池:沪深300历史成分股(353支)
- 数据字段(每日每股):
- 市场类: open_price, close_price, high_price, low_price
- 成交类: volume, amount, turnover_rate
- 波动类: amplitude, change_percent, change_amount
- 市值类: total_market_cap_yuan, circulating_market_cap
- 股本类: total_shares, circulating_shares
- 技术指标类: macd_diff, macd_dea, macd, rsi_6, rsi_12, rsi_24
| 阶段 | 时间区间 | 用途 |
|---|---|---|
| 训练集 | 2014-01-01 ~ 2019-12-31 | 模型训练 |
| 验证集 | 2020-01-01 ~ 2022-12-31 | 模型选择与调参 |
| 测试集 | 2023-01-01 ~ 2025-07-15 | 模拟实盘评估 |
多视角注意力神经网络将特征分为不同的"视角"进行处理:
-
输入结构:
- 输入:[batch_size, time_step=10, feature_dim]
- 拆分多视角:
- View 1:动量视角(收益率、MACD、RSI类)
- View 2:成交视角(volume、amount、换手率等)
- View 3:波动视角(amplitude、change_percent等)
-
模型结构:
- 每个视角:
- 输入 10×N 张量 → BiGRU/TCN 提取时间序列特征
- Attention 权重聚合 → 得到视角向量 vi
- 融合层:
- [v1, v2, v3] → Concatenate → 全连接层 (ReLU/Dropout)
- 输出层:
- 分类:Softmax / 回归:Linear
- 每个视角:
| 模型 | 输入处理方式 | 输出层 | 说明 |
|---|---|---|---|
| LogisticRegression | 每条样本 flatten(10×F) | Softmax | 简单基线 |
| MLP | flatten(10×F) → FC层 | 分类/回归 | 多层感知机 |
| LightGBM/XGBoost | flatten(10×F) | 分类/回归 | 特征重要性可解释 |
| TCN | 输入 10×F | 分类 | 卷积提取序列特征 |
| Transformer | 输入为序列 | 分类 | 可用于横截面/时间建模 |
沪深300选股实验/
│
├── config/ # 配置文件
│ ├── __init__.py
│ ├── config.py # 全局配置
│ └── model_config.py # 模型配置
│
├── data/ # 数据处理模块
│ ├── __init__.py
│ ├── data_loader.py # 数据加载
│ ├── data_processor.py # 数据预处理
│ ├── feature_engineer.py # 特征工程
│ └── data_utils.py # 数据工具函数
│
├── models/ # 模型定义
│ ├── __init__.py
│ ├── mvan.py # MVAN模型
│ ├── baseline_models.py # 基线模型
│ └── model_utils.py # 模型工具函数
│
├── training/ # 训练相关
│ ├── __init__.py
│ ├── trainer.py # 训练器
│ ├── evaluator.py # 评估器
│ └── backtest.py # 回测模块
│
├── experiments/ # 实验管理
│ ├── __init__.py
│ ├── main_experiment.py # 主实验
│ ├── ablation_study.py # 消融实验
│ └── hyperparameter_tuning.py # 超参数调优
│
├── utils/ # 工具函数
│ ├── __init__.py
│ ├── logger.py # 日志工具
│ ├── visualization.py # 可视化
│ └── metrics.py # 评估指标
│
├── results/ # 结果保存
│ ├── models/ # 训练好的模型
│ ├── logs/ # 训练日志
│ ├── plots/ # 可视化结果
│ └── backtest_results/ # 回测结果
│
├── 沪深300数据/
│ ├── raw/ # 原始数据
│ └── processed/ # 处理后的数据
│
├── requirements.txt # 依赖包
├── setup.py # 安装脚本
└── main.py # 主运行脚本
# 安装依赖
pip install -r requirements.txt# 数据预处理
python main.py --mode data_process
# 特征工程
python main.py --mode feature_engineer# 训练和评估MVAN模型
python main.py --mode experiment --model MVAN
# 训练和评估基线模型
python main.py --mode experiment --model MLP
python main.py --mode experiment --model TCN
python main.py --mode experiment --model Transformer
python main.py --mode experiment --model LightGBM
# 训练和评估所有模型
python main.py --mode experiment --model all# 运行所有消融实验
python main.py --mode ablation --experiment all
# 运行特定消融实验
python main.py --mode ablation --experiment No-View
python main.py --mode ablation --experiment No-Attn
python main.py --mode ablation --experiment Only-Price
python main.py --mode ablation --experiment Only-MACD-RSI# 运行网格搜索超参数调优
python main.py --mode tuning --mode grid_search
# 使用最佳参数训练模型
python main.py --mode tuning --mode train_best --best_params_file results/hyperparameter_tuning_XXX/best_params.json- Precision@TopK: 每日预测TopK股票命中率
- Macro-F1 / AUC: 多分类模型评估
- IC / RankIC: 排序效果(回归模型)
- NDCG@K: 用于打分型模型的排序能力
- 年化收益率、最大回撤
- 夏普比率、盈亏比、胜率
- 换手率分析