feat(visualization): 添加策略报告生成器
- 创建 visualization/report_generator 模块 - 支持生成精美的 HTML 策略报告 - 包含8个 KPI 指标卡片(收益、胜率、夏普比等) - 集成 ECharts 交互式图表(净值曲线、月度收益、盈亏分布) - 支持按日期和品种筛选调仓记录 - 使用 Jinja2 模板引擎 + Bootstrap 5 样式 - 支持打印为 PDF - 提供 CLI 和 Python API 两种使用方式
This commit is contained in:
144
visualization/report_generator/README.md
Normal file
144
visualization/report_generator/README.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# ETF轮动策略报告生成器
|
||||
|
||||
生成精美的 HTML 策略报告,展示回测结果和关键指标。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- ✅ **策略 KPI** - 累计收益、年化收益、胜率、夏普比率等
|
||||
- ✅ **净值曲线** - 交互式折线图,支持缩放和悬停
|
||||
- ✅ **月度收益** - 柱状图展示每月收益分布
|
||||
- ✅ **盈亏分布** - 饼图展示盈利/亏损比例
|
||||
- ✅ **品种排行** - 横向条形图展示各品种表现
|
||||
- ✅ **调仓记录** - 可按日期和品种筛选的交易明细表格
|
||||
- ✅ **现代化 UI** - 渐变色头部、卡片布局、响应式设计
|
||||
- ✅ **打印友好** - 支持直接打印为 PDF
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 基础用法
|
||||
|
||||
```bash
|
||||
# 生成完整报告
|
||||
python visualization/report_generator/generate_report.py
|
||||
|
||||
# 指定时间区间
|
||||
python visualization/report_generator/generate_report.py --start 2024-01-01 --end 2024-12-31
|
||||
|
||||
# 指定输出目录
|
||||
python visualization/report_generator/generate_report.py --output my_reports
|
||||
```
|
||||
|
||||
### Python API 调用
|
||||
|
||||
```python
|
||||
from visualization.report_generator.generate_report import ReportGenerator
|
||||
|
||||
# 创建生成器
|
||||
generator = ReportGenerator(results_dir='results')
|
||||
|
||||
# 生成报告
|
||||
output_file = generator.generate(
|
||||
start_date='2024-01-01',
|
||||
end_date='2024-12-31',
|
||||
output_dir='reports'
|
||||
)
|
||||
|
||||
print(f"报告已生成: {output_file}")
|
||||
```
|
||||
|
||||
### 定时生成(可选)
|
||||
|
||||
```bash
|
||||
# 添加到 crontab,每天生成一次
|
||||
0 9 * * * cd /path/to/etf && python visualization/report_generator/generate_report.py
|
||||
```
|
||||
|
||||
## 依赖
|
||||
|
||||
```bash
|
||||
pip install pandas numpy jinja2
|
||||
```
|
||||
|
||||
## 文件结构
|
||||
|
||||
```
|
||||
visualization/report_generator/
|
||||
├── template.html # HTML 模板
|
||||
├── generate_report.py # 报告生成脚本
|
||||
└── README.md # 说明文档
|
||||
```
|
||||
|
||||
## 输出示例
|
||||
|
||||
生成的报告包含:
|
||||
|
||||
1. **头部区域** - 报告标题和数据区间
|
||||
2. **KPI 卡片** - 8 个关键指标(收益、胜率、夏普比等)
|
||||
3. **净值曲线** - 带渐变填充的折线图
|
||||
4. **月度收益** - 红绿柱状图
|
||||
5. **盈亏分布** - 环形饼图
|
||||
6. **品种排行** - 横向条形图
|
||||
7. **调仓表格** - 支持筛选和打印
|
||||
|
||||
## 自定义
|
||||
|
||||
### 修改配色方案
|
||||
|
||||
编辑 `template.html` 中的 CSS 变量:
|
||||
|
||||
```css
|
||||
:root {
|
||||
--primary-color: #1890ff;
|
||||
--success-color: #52c41a;
|
||||
--danger-color: #ff4d4f;
|
||||
}
|
||||
```
|
||||
|
||||
### 添加新指标
|
||||
|
||||
在 `generate_report.py` 的 `calculate_kpis()` 方法中添加:
|
||||
|
||||
```python
|
||||
def calculate_kpis(self, trades_filtered):
|
||||
# ... 现有代码 ...
|
||||
|
||||
# 添加新指标
|
||||
new_metric = ...
|
||||
|
||||
return {
|
||||
'total_return': ...,
|
||||
'new_metric': new_metric, # 新增
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
然后在模板中使用:
|
||||
|
||||
```html
|
||||
<div class="kpi-value">{{ new_metric }}</div>
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **模板引擎**: Jinja2
|
||||
- **图表库**: ECharts 5.4
|
||||
- **样式框架**: Bootstrap 5.3
|
||||
- **图标**: Bootstrap Icons
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 确保 `results/report_summary.csv` 和 `results/report_trades.csv` 存在
|
||||
2. 数据格式需符合预期(参考现有 CSV 文件)
|
||||
3. 生成的 HTML 文件可离线查看(ECharts 使用 CDN)
|
||||
4. 打印时筛选栏会自动隐藏
|
||||
|
||||
## 示例输出
|
||||
|
||||
```
|
||||
🚀 开始生成策略报告...
|
||||
✅ 数据加载成功: 1233 条交易记录
|
||||
📊 筛选后数据: 1233 条记录
|
||||
✅ 报告已生成: reports/strategy_report_20260508_210000.html
|
||||
📁 文件大小: 125.3 KB
|
||||
🌐 在浏览器中打开: file:///Users/aszer/Documents/vscode/etf/reports/strategy_report_20260508_210000.html
|
||||
```
|
||||
Reference in New Issue
Block a user