3.0 KiB
3.0 KiB
Proposal: Refactor Backtest Script
Why
当前回测系统使用 Jupyter Notebook (backtest.ipynb) 手动执行,存在以下问题:
- 不支持自动化批量回测,无法通过命令行调用
- 策略逻辑与数据获取混在一起,难以复用和切换
- 缺乏参数化配置,每次回测需要手动修改代码
- 无法方便地对比不同策略在同一股票、不同时间段的表现
通过将回测流程重构为命令行工具,可以实现:
- 支持命令行参数化调用,便于批量执行
- 策略模块化,支持动态加载不同的策略文件
- 简化数据加载逻辑,专注于回测核心流程
- 提高代码可维护性和可扩展性
What Changes
新增文件
-
backtest.py - 主流程脚本
- 命令行参数解析 (
--code,--start-date,--end-date,--strategy-file,--cash,--commission,--output) - 数据库连接与数据加载(查询复权后的价格数据)
- 动态加载策略文件(通过
importlib) - 执行回测(使用
backtesting库) - 结果输出:
- 控制台中文格式化统计信息
- HTML 图表文件(可选,通过
--output参数控制)
- 命令行参数解析 (
-
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 文件形式保存,便于分享和查看