1
0

完成回测脚本

This commit is contained in:
2026-01-27 18:30:41 +08:00
parent 53e72e2f84
commit 5c4a70d7f0
14 changed files with 2739 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
# Proposal: Refactor Backtest Script
## Why
当前回测系统使用 Jupyter Notebook (`backtest.ipynb`) 手动执行,存在以下问题:
- 不支持自动化批量回测,无法通过命令行调用
- 策略逻辑与数据获取混在一起,难以复用和切换
- 缺乏参数化配置,每次回测需要手动修改代码
- 无法方便地对比不同策略在同一股票、不同时间段的表现
通过将回测流程重构为命令行工具,可以实现:
- 支持命令行参数化调用,便于批量执行
- 策略模块化,支持动态加载不同的策略文件
- 简化数据加载逻辑,专注于回测核心流程
- 提高代码可维护性和可扩展性
## What Changes
### 新增文件
1. **backtest.py** - 主流程脚本
- 命令行参数解析 (`--code`, `--start-date`, `--end-date`, `--strategy-file`, `--cash`, `--commission`, `--output`)
- 数据库连接与数据加载(查询复权后的价格数据)
- 动态加载策略文件(通过 `importlib`
- 执行回测(使用 `backtesting` 库)
- 结果输出:
- 控制台中文格式化统计信息
- HTML 图表文件(可选,通过 `--output` 参数控制)
2. **strategy.py** - 策略模板文件
- `calculate_indicators(data)` 函数:计算策略所需的技术指标(如 SMA、MACD
- `get_strategy()` 函数:返回策略类
- `SmaCross` 类:继承 `backtesting.Strategy`,实现交易逻辑(金叉买入、死叉卖出)
### 主要功能特性
- **动态策略加载**:通过 `--strategy-file` 参数指定任意策略文件
- **简化的数据库访问**:直接 SQL 查询获取数据,不引入额外抽象
- **指标计算策略化**:每个策略文件自己定义需要计算的指标
- **结果输出控制**:默认控制台输出,通过 `--output` 参数生成 HTML 图表
### 现有文件变更
- 无(新增文件,不修改现有 Notebook
## Capabilities
### New Capabilities
- **backtest-cli**: 命令行回测工具,支持通过参数化方式执行量化回测
- **strategy-loading**: 动态加载策略模块,支持从指定路径导入策略类和指标计算函数
- **data-fetching**: 从 PostgreSQL 数据库获取股票历史价格数据,自动处理复权
### Modified Capabilities
- 无(不涉及现有规范级别的需求变更)
## Impact
### 代码影响
- 新增 `backtest.py` 作为主入口文件
- 新增 `strategy.py` 作为策略模板
- 可选新增 `strategies/` 目录存放其他策略文件
### 依赖影响
**新增依赖**
- `sqlalchemy` - 数据库连接
- `backtesting` - 回测引擎
- `pandas`, `numpy` - 数据处理(已存在于 Notebook 中)
### API/系统影响
- 无外部 API 变更
- 数据库查询逻辑从 Notebook 迁移到 Python 脚本
- 输出从 Notebook 交互式展示改为命令行 + HTML 文件
### 用户影响
- 用户可以通过命令行执行回测,无需打开 Jupyter Notebook
- 策略开发者可以独立开发策略文件,通过约定接口集成到主流程
- 回测结果以 HTML 文件形式保存,便于分享和查看