迁移内容: - config/hk_ecs.pem → hk_ecs.pem(根目录) - 删除 config 目录(无其他内容) 路径更新: - datasource/flask_server.py:默认路径改为 hk_ecs.pem - strategies/rotation/config.yaml:SSH配置路径 - docker-compose.yml:挂载路径 - build-and-push.sh:示例命令 - README.md:项目结构说明 设计原则:敏感文件集中放在根目录 - .env:环境变量 - hk_ecs.pem:SSH密钥
208 lines
11 KiB
Markdown
208 lines
11 KiB
Markdown
# ETF轮动策略框架
|
||
|
||
基于抽象接口的量化交易框架,支持因子计算、信号生成、风控管理和回测执行。
|
||
|
||
## 架构设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 应用层 (Applications) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ Rotation │ │ Screener │ │ 自定义策略 │ │
|
||
│ │ Strategy │ │ Strategy │ │ (继承框架) │ │
|
||
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
|
||
└───────────┼────────────────────┼────────────────────┼─────────────────────────┘
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 定制组件层 (strategies/shared) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌──────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ factors/ │ signals/ │ risk/ │ data/│ │
|
||
│ │ ├─ MomentumFactor │ ├─ TopNSelector │ ├─ StopLossControl │ ... │ │
|
||
│ │ ├─ TrendFactor │ ├─ TrendFollower │ ├─ PremiumControl │ │ │
|
||
│ │ ├─ ReversalFactor │ ├─ ReversalTrader │ ├─ Callbacks │ │ │
|
||
│ │ └─ VolatilityFactor│ │ │ │ │
|
||
│ └──────────────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 框架抽象层 (framework) │
|
||
├─────────────────────────────────────────────────────────────────────────────┤
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ factors/ │ │ signals/ │ │ risk/ │ │ execution/ │ │
|
||
│ │ FactorBase │ │SignalGen │ │ RiskControl │ │ Executor │ │
|
||
│ │ Registry │ │ │ │ CallbackHook│ │ Portfolio │ │
|
||
│ │ Combiner │ │ │ │ Position │ │ │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ strategy/ │ │ data/ │ │ config/ │ │
|
||
│ │ StrategyBase│ │ DataSource │ │ ConfigLoader│ │
|
||
│ │ │ │ DataCache │ │ │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 核心特性
|
||
|
||
### 1. 框架抽象接口(framework)
|
||
|
||
只提供抽象基类,不含具体实现:
|
||
|
||
- **FactorBase**:因子抽象基类 + FactorRegistry注册器 + FactorCombiner组合器
|
||
- **SignalGenerator**:信号生成抽象基类
|
||
- **RiskControl**:风控抽象基类 + CallbackHook回调机制
|
||
- **StrategyBase**:策略抽象基类(含回调自动注册)
|
||
- **Executor/Portfolio**:执行器抽象 + 持仓管理
|
||
|
||
### 2. 定制组件(strategies/shared)
|
||
|
||
具体实现,可跨策略复用:
|
||
|
||
- **MomentumFactor**:加权线性回归动量 + 崩盘过滤
|
||
- **TrendFactor**:MA交叉/MACD趋势因子
|
||
- **ReversalFactor**:RSI反转信号
|
||
- **TopNSelector**:分散化选股 + 调仓周期控制
|
||
- **StopLossControl**:固定止损/跟踪止损
|
||
- **PremiumControl**:溢价过滤回调
|
||
|
||
### 3. 完整回测执行
|
||
|
||
```python
|
||
from framework.execution import BacktestExecutor
|
||
|
||
executor = BacktestExecutor(
|
||
initial_capital=100000,
|
||
trade_cost=0.001,
|
||
select_num=3
|
||
)
|
||
|
||
portfolio = executor.execute(signals, data)
|
||
# 支持日收益率计算、交易成本扣除、净值归一化、基准对比
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
.
|
||
├── framework/ # 框架抽象接口
|
||
│ ├── factors/ # FactorBase/Registry/Combiner
|
||
│ ├── signals/ # SignalGenerator抽象
|
||
│ ├── risk/ # RiskControl/Position/CallbackHook
|
||
│ ├── strategy/ # StrategyBase抽象
|
||
│ ├── execution/ # Executor/Portfolio/BacktestExecutor
|
||
│ ├── data/ # DataSource/DataCache抽象
|
||
│ ├── config/ # ConfigLoader配置加载
|
||
│ └── tests/ # 单元测试
|
||
│
|
||
├── strategies/ # 策略实现
|
||
│ ├── shared/ # 定制组件(跨策略复用)
|
||
│ │ ├── factors/ # MomentumFactor/TrendFactor等
|
||
│ │ ├── signals/ # TopNSelector/TrendFollower等
|
||
│ │ ├── risk/ # StopLossControl/PremiumControl等
|
||
│ │ └── data/ # HybridDataSourceAdapter等
|
||
│ ├── rotation/ # 轮动策略
|
||
│ │ └── strategy.py # RotationStrategy实现
|
||
│ └── screener/ # CCI选股策略
|
||
│
|
||
├── config/ # 配置文件
|
||
│ └── strategies/
|
||
│ └── rotation.yaml # 轮动策略配置
|
||
│
|
||
├── visualization/ # 可视化
|
||
│ └── report_generator/ # 报告生成
|
||
│
|
||
├── data/ # 数据目录
|
||
├── docs/ # 文档目录
|
||
├── archive/ # 归档旧代码
|
||
│
|
||
├── .env # 环境变量
|
||
├── .dockerignore # Docker忽略
|
||
├── build-and-push.sh # 构建脚本
|
||
├── docker-compose.yml # Docker部署
|
||
├── Dockerfile # 应用镜像
|
||
├── Dockerfile_base # 基础镜像
|
||
├── hk_ecs.pem # SSH密钥(港美股数据隧道)
|
||
├── README.md # 本文件
|
||
└── requirements.txt # 依赖
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 运行回测
|
||
|
||
```bash
|
||
# 使用默认配置
|
||
python run_rotation.py
|
||
|
||
# 指定配置文件
|
||
python run_rotation.py --config config/strategies/rotation.yaml
|
||
|
||
# 指定报告保存路径
|
||
python run_rotation.py --save-path results/my_rotation
|
||
```
|
||
|
||
### 2. 代码方式使用框架
|
||
|
||
```python
|
||
from framework import FactorBase, FactorRegistry, SignalGenerator, StrategyBase
|
||
from strategies.shared.factors.momentum import MomentumFactor
|
||
from strategies.shared.signals.selectors import TopNSelector
|
||
|
||
# 注册因子
|
||
FactorRegistry.register(MomentumFactor)
|
||
|
||
# 创建因子组合器
|
||
factor = FactorRegistry.get('momentum', n_days=25, crash_filter=True)
|
||
combiner = FactorCombiner([factor])
|
||
|
||
# 创建信号生成器(支持分散化选股)
|
||
selector = TopNSelector(
|
||
select_num=3,
|
||
group_mapping={'399006.SZ': 'A', 'NDX': 'US'}, # 按大类分组
|
||
min_score=0.0, # 过滤负分
|
||
rebalance_days=1, # 调仓周期
|
||
rebalance_threshold=0.05 # 调仓阈值
|
||
)
|
||
|
||
# 生成信号
|
||
signals = selector.generate(factor_data)
|
||
```
|
||
|
||
### 3. 运行测试
|
||
|
||
```bash
|
||
# 框架单元测试
|
||
python -m pytest framework/tests/ -v
|
||
|
||
# 对比测试(验证新旧实现一致性)
|
||
python tests/full_backtest_comparison.py
|
||
```
|
||
|
||
## 设计原则
|
||
|
||
| 模块 | 职责 | 位置 |
|
||
|------|------|------|
|
||
| **抽象接口** | 所有策略共用的基础设施 | framework |
|
||
| **定制组件** | 具体实现,可跨策略复用 | strategies/shared |
|
||
| **策略实现** | 业务逻辑,使用框架+组件 | strategies/{name} |
|
||
|
||
## 技术栈
|
||
|
||
- **Python 3.12**:核心语言
|
||
- **Pandas/NumPy**:数据处理
|
||
- **PyYAML**:配置加载
|
||
- **scikit-learn**:因子计算(加权回归)
|
||
- **pytest**:单元测试
|
||
|
||
## 归档说明
|
||
|
||
旧代码已移动到 `archive/` 目录,包括:
|
||
- 原 `core/` 目录(数据源、因子计算)
|
||
- 原 `strategies/rotation/engine.py`(旧引擎)
|
||
- 原 `scripts/`(旧脚本入口)
|
||
- 原 `tests/`(旧测试文件)
|
||
|
||
详见 [archive/README.md](archive/README.md) |