8b2c2be6f36193f4ff9bd84a7e4e658c74b661df
- 新增 Flask 服务提供统一 HTTP 接口 - 支持 6 个 API 端点:health、asset-type、ohlcv、batch、supported-codes - 集成 SSH 隧道自动管理(环境变量配置) - 提供一键启动脚本 start_flask_server.sh - 支持 CORS 跨域访问 - 完善的错误处理和响应格式化
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. 混合数据源架构
# 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. 定时调度系统
# 本地运行
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. 环境配置
# 创建 .env 文件
cp .env.example .env
# 编辑配置
vim .env
2. 本地运行
# 安装依赖
pip install -r requirements.txt
# 运行回测
python scripts/run_rotation.py
# 定时调度
python scripts/daily_scheduler.py --run-now
3. Docker部署
# 构建并推送
./build-and-push.sh etf-scheduler
# 运行容器
docker-compose up -d
配置说明
rotation.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: 消息通知
Description
Languages
Python
97.5%
HTML
1.9%
Shell
0.6%