Files
etf/README.md
aszerW ac00d29b69 docs(readme): 添加ETF轮动策略系统详细说明文档
- 增加系统整体架构设计图示,涵盖应用层、策略层、核心层及基础设施层
- 详细描述多市场数据支持,涵盖A股、港股、美股及加密货币数据源
- 介绍混合数据源配置示例,支持SSH隧道代理功能
- 说明定时调度系统的本地及Docker运行方法
- 详细描述自动报告通知功能,包括图表、信号及钉钉推送支持
- 列出项目结构目录及核心文件说明
- 提供快速开始指南,包括环境配置、本地运行及Docker部署步骤
- 附加策略配置rotation.yaml示例及技术栈说明
2026-03-19 23:13:38 +08:00

203 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**: 消息通知