710f3d9d6883560871904a2586097773fc19ba03
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. 完整回测执行
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. 运行回测
# 使用默认配置
python run_rotation.py
# 指定配置文件
python run_rotation.py --config config/strategies/rotation.yaml
# 指定报告保存路径
python run_rotation.py --save-path results/my_rotation
2. 代码方式使用框架
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. 运行测试
# 框架单元测试
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/(旧测试文件)
Description
Languages
Python
97.5%
HTML
1.9%
Shell
0.6%