# 精简版轮动策略（日迭代）

## 概述

从 A 股交易日历出发，逐日迭代模拟实盘信号生成流程。

**与 V2 的核心差异：**

| 特性 | V2 向量化版本 | 精简版（日迭代） |
|------|--------------|------------------|
| 数据获取 | 一次性获取所有历史数据 | 预加载+CSV缓存 |
| 因子计算 | 全量 rolling 计算 | 每日单独计算 |
| 日历对齐 | 先算因子，后对齐 | 从 A 股日历出发 |
| 收益计算 | 向量化 | 逐日迭代 |

## 快速使用

```bash
cd /path/to/etf
FLASK_API_URL=https://k3s.tokenpluse.xyz python rotation/simple_rotation.py
```

或作为模块导入：

```python
from rotation.simple_rotation import SimpleRotationStrategy

strategy = SimpleRotationStrategy('rotation/config_simple.yaml')
result = strategy.run()
strategy.export_results()
```

## 策略逻辑

### 动量计算
- 加权线性回归：`score = annualized_return * R^2`
- 窗口：25 天（可配置）
- 崩盘过滤：连续 3 天跌 > 5% 则清零

### 信号生成（与 V2 完全一致）
1. 每个 group 内选 Top 1（非 BOND 组需超过短债动量）
2. 从各组 Top 1 中按动量排序选 Top 3
3. 不足用 BOND 填充

### T+1 执行收益
- **持有日**: close-to-close
- **卖出日**: close-to-open（开盘已卖出）
- **买入日**: open-to-close（日内收益）
- 调仓日扣除 0.1% 交易成本

## 输出文件

```
results/
├── simple_rotation_nav.csv       # 净值曲线
├── simple_rotation_signals.csv   # 每日信号
├── simple_rotation_detail.json   # 完整详情
└── simple_rotation_metrics.json  # 绩效指标
```

## 数据缓存

首次运行会从 Flask API 下载数据并缓存到 `data/simple_rotation_cache/`。
后续运行直接读取缓存，速度显著提升。
