- 增加系统整体架构设计图示,涵盖应用层、策略层、核心层及基础设施层 - 详细描述多市场数据支持,涵盖A股、港股、美股及加密货币数据源 - 介绍混合数据源配置示例,支持SSH隧道代理功能 - 说明定时调度系统的本地及Docker运行方法 - 详细描述自动报告通知功能,包括图表、信号及钉钉推送支持 - 列出项目结构目录及核心文件说明 - 提供快速开始指南,包括环境配置、本地运行及Docker部署步骤 - 附加策略配置rotation.yaml示例及技术栈说明
203 lines
12 KiB
Markdown
203 lines
12 KiB
Markdown
# ETF轮动策略系统
|
||
|
||
基于多因子动量的ETF轮动量化交易系统,支持多市场数据(A股/港股/美股/加密货币),提供回测分析、定时调度和自动通知功能。
|
||
|
||
## 架构设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 应用层 (Applications) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ run_rotation │ │ daily_scheduler │ │ test_chart │ │
|
||
│ │ (回测入口) │ │ (定时调度) │ │ (图表测试) │ │
|
||
│ └────────┬────────┘ └────────┬────────┘ └─────────────────┘ │
|
||
└───────────┼────────────────────┼──────────────────────────────────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 策略层 (Strategies) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ ETF Rotation Strategy │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │ │
|
||
│ │ │ Engine │ │ Report │ │ Portfolio │ │ Signal │ │ │
|
||
│ │ │ (回测引擎) │ │ (报告生成) │ │ (持仓跟踪) │ │ (信号生成) │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 核心层 (Core) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ Data Sources │ │ Factors │ │ Utils │ │
|
||
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │
|
||
│ │ │ Tushare │ │ │ │ Momentum │ │ │ │ Metrics │ │ │
|
||
│ │ │ (A股指数) │ │ │ │ (动量因子) │ │ │ │ (绩效计算) │ │ │
|
||
│ │ ├───────────┤ │ │ └───────────┘ │ │ └───────────┘ │ │
|
||
│ │ │ YFinance │ │ │ │ │ │ │
|
||
│ │ │ (港美加密) │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │
|
||
│ │ ├───────────┤ │ │ │ CCI │ │ │ │ Chart │ │ │
|
||
│ │ │SSH Tunnel │ │ │ │ (CCI因子) │ │ │ │ (图表绘制) │ │ │
|
||
│ │ │(代理支持) │ │ │ └───────────┘ │ │ └───────────┘ │ │
|
||
│ │ └───────────┘ │ │ │ │ │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 基础设施层 (Infrastructure) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ Notification │ │ OSS Storage │ │ Database │ │
|
||
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │
|
||
│ │ │ DingTalk │ │ │ │ Aliyun │ │ │ │ PostgreSQL│ │ │
|
||
│ │ │ (钉钉) │ │ │ │ OSS │ │ │ │ │ │ │
|
||
│ │ └───────────┘ │ │ └───────────┘ │ │ └───────────┘ │ │
|
||
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 核心特性
|
||
|
||
### 1. 多市场数据支持
|
||
- **A股指数**: 通过 Tushare 获取沪深300、中证500等17只指数
|
||
- **港股/美股/加密货币**: 通过 YFinance 获取恒生科技、纳斯达克、BTC、ETH等
|
||
- **交易日历对齐**: 以A股交易日为基准,非A股市场数据前向填充
|
||
|
||
### 2. 混合数据源架构
|
||
```python
|
||
# config/strategies/rotation.yaml
|
||
ssh_tunnel:
|
||
enabled: true
|
||
host: "x.x.x.x" # 阿里云香港ECS
|
||
key_path: "hk_ecs.pem" # SSH私钥(相对路径)
|
||
|
||
data_source:
|
||
china_indices: "tushare"
|
||
global_indices: "yfinance"
|
||
```
|
||
|
||
### 3. 定时调度系统
|
||
```bash
|
||
# 本地运行
|
||
python scripts/daily_scheduler.py
|
||
|
||
# Docker运行
|
||
docker run -d --name etf-scheduler \
|
||
-v $(pwd)/hk_ecs.pem:/app/hk_ecs.pem:ro \
|
||
192.168.0.115:5000/etf-scheduler:latest
|
||
```
|
||
|
||
### 4. 自动报告通知
|
||
- 策略绩效对比表格(转置布局)
|
||
- 最新调仓信号(支持调入/调出/维持标记)
|
||
- 净值曲线、回撤分析、持仓分布
|
||
- 钉钉图文推送(OSS图床)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
.
|
||
├── config/
|
||
│ └── strategies/
|
||
│ └── rotation.yaml # 策略配置(code_list/benchmark/SSH等)
|
||
├── core/
|
||
│ ├── common/
|
||
│ │ ├── notify.py # 钉钉通知
|
||
│ │ ├── oss_utils.py # 阿里云OSS
|
||
│ │ └── utils.py # 通用工具
|
||
│ ├── data/
|
||
│ │ ├── hybrid_source.py # 混合数据源(Tushare+YFinance)
|
||
│ │ └── yfinance_source.py # YFinance数据源
|
||
│ └── factors/
|
||
│ ├── momentum.py # 动量因子计算
|
||
│ └── cci.py # CCI因子计算
|
||
├── strategies/
|
||
│ └── rotation/
|
||
│ ├── engine.py # 回测引擎
|
||
│ ├── report.py # 报告生成
|
||
│ ├── portfolio.py # 持仓跟踪
|
||
│ └── signal.py # 信号生成
|
||
├── scripts/
|
||
│ ├── run_rotation.py # 回测入口
|
||
│ └── daily_scheduler.py # 定时调度
|
||
├── Dockerfile # 应用镜像
|
||
├── Dockerfile_base # 基础镜像
|
||
├── build-and-push.sh # 构建脚本
|
||
└── docker-compose.yml # 部署配置
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境配置
|
||
```bash
|
||
# 创建 .env 文件
|
||
cp .env.example .env
|
||
|
||
# 编辑配置
|
||
vim .env
|
||
```
|
||
|
||
### 2. 本地运行
|
||
```bash
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 运行回测
|
||
python scripts/run_rotation.py
|
||
|
||
# 定时调度
|
||
python scripts/daily_scheduler.py --run-now
|
||
```
|
||
|
||
### 3. Docker部署
|
||
```bash
|
||
# 构建并推送
|
||
./build-and-push.sh etf-scheduler
|
||
|
||
# 运行容器
|
||
docker-compose up -d
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### rotation.yaml
|
||
```yaml
|
||
# 标的配置(字典格式)
|
||
code_list:
|
||
"000300.SH": "沪深300"
|
||
"HSTECH": "恒生科技"
|
||
"BTC": "比特币"
|
||
|
||
# 基准配置
|
||
benchmark:
|
||
code: "000300.SH"
|
||
name: "沪深300指数"
|
||
|
||
# SSH隧道(用于YFinance)
|
||
ssh_tunnel:
|
||
enabled: true
|
||
host: "your-ecs-ip"
|
||
key_path: "hk_ecs.pem"
|
||
|
||
# 回测参数
|
||
start_date: "2020-01-01"
|
||
factor_type: "slope_r2"
|
||
select_num: 5
|
||
rebalance_days: 1
|
||
```
|
||
|
||
## 技术栈
|
||
|
||
- **Python 3.12**: 核心语言
|
||
- **Pandas/NumPy**: 数据处理
|
||
- **Matplotlib**: 图表绘制
|
||
- **Tushare/YFinance**: 金融数据
|
||
- **Schedule**: 定时任务
|
||
- **Docker**: 容器化部署
|
||
- **OSS**: 图片存储
|
||
- **DingTalk**: 消息通知
|