完成回测脚本
This commit is contained in:
@@ -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 文件形式保存,便于分享和查看
|
||||
Reference in New Issue
Block a user