Files
etf/README.md
aszerW 5c98b1cb6a refactor: SSH密钥移到根目录,删除config目录
迁移内容:
- 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密钥
2026-05-12 22:31:43 +08:00

208 lines
11 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轮动策略框架
基于抽象接口的量化交易框架,支持因子计算、信号生成、风控管理和回测执行。
## 架构设计
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 应用层 (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)