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