迭代 113 - backtrader 敏捷开发综合方案¶
Sprint 目标: 基于迭代 44-112 的建议,制定 backtrader 系统化改进方案,实现首批高优先级功能
迭代周期: 2 周 (Sprint 113)
文档版本: v2.0
最后更新: 2026-01-08
一、Sprint 概述¶
1.1 背景¶
基于对 backtrader 项目本身以及迭代 44 到迭代 112 的 69 份优化建议文档的全面分析,本 Sprint 文档提出一份系统性的改进方案,并定义首批可交付的功能模块。
1.2 Sprint 目标¶
完成: 迭代 44-112 建议的系统性梳理和优先级排序
交付: 3 个高优先级功能模块的设计文档
实现: 可视化增强模块(Plotly 后端)的核心功能
实现: ML 策略基类框架
文档: 完善 API 文档和使用示例
1.3 Definition of Done (DoD)¶
代码通过所有现有测试用例
新功能有对应的单元测试(覆盖率>80%)
API 文档完整
代码经过 Review
向后兼容性验证通过
二、迭代 44-112 综合分析总结¶
2.1 迭代文档统计¶
| 类别 | 迭代数量 | 涉及项目 | 核心建议 |
|——|———|———-|———-|
| UI/可视化| 6 个 | btreport, backtrader_ui, backtrader_bokeh, backtrader_plotly, backtrader_pyqt_ui, BackTraderUI | 交互式图表、Web 界面、实时日志 |
|框架对比研究| 20 个 | zipline, zvt, vnpy, hikyuu, rqalpha, pysystemtrade, qstrader 等 | 事件驱动、风险管理、组合管理 |
|机器学习/AI| 8 个 | btgym, FinGPT, gradient-boosting-with-backtrader, AI-Strategies 等 | ML 策略集成、特征工程、强化学习 |
|实时交易/接口| 12 个 | ctpbee, ccxt-store, bt-futu-store, xtp-backtrader-api 等 | 统一接口层、WebSocket、重连机制 |
|策略库| 5 个 | backtrader-strategies-compendium, quant-strategies 等 | 策略模板、配对交易、多因子 |
|性能优化| 4 个 | NumCpp, backtradercpp, BackTest-Cpp, barter-rs | Cython 扩展、向量化计算 |
|高级功能| 8 个 | Statistical-Arbitrage, pair-trading-envs, prophet, signal_trading 等 | 信号系统、时序预测、异常检测 |
2.2 核心功能需求汇总(按优先级排序)¶
| 优先级 | 需求 | 迭代提及次数 | 本 Sprint | 状态 |
|——–|——|————-|———-|——|
|P0| 统一可视化框架 | 6 个 | ✓ | 开发中 |
|P0| 机器学习策略集成 | 8 个 | ✓ | 开发中 |
|P0| 实时交易接口 | 12 个 | 设计 | 规划中 |
|P1| 信号系统增强 | 3 个 | 设计 | 规划中 |
|P1| 高性能计算 | 4 个 | - | 后续 |
|P1| 参数优化增强 | 3 个 | - | 后续 |
|P2| 策略库丰富 | 5 个 | - | 后续 |
|P2| 高级交易功能 | 8 个 | - | 后续 |
|P2| 数据源扩展 | 6 个 | - | 后续 |
|P3| 开发者工具 | 4 个 | - | 后续 |
三、backtrader 现状分析¶
3.1 项目优势¶
| 优势 | 描述 | 评分 |
|——|——|——|
|易用性| API 设计简洁直观,学习曲线平缓 | ⭐⭐⭐⭐⭐ |
|灵活性| 高度模块化,Strategy/Indicator/Analyzer 可自由扩展 | ⭐⭐⭐⭐⭐ |
|完整性| 涵盖回测所需的所有组件(数据/策略/经纪人/分析) | ⭐⭐⭐⭐ |
|社区支持| 活跃社区、丰富第三方扩展 | ⭐⭐⭐⭐ |
3.2 存在的问题与解决方案¶
| 问题 | 影响 | 解决方案 | Sprint 计划 |
|——|——|———-|———–|
|可视化落后| matplotlib 缺乏交互性 | 增加 Plotly/Bokeh 后端 | Sprint 113 ✓ |
|ML 支持缺失| 无内置机器学习功能 | 新增 ml 模块 | Sprint 113 ✓ |
|实盘支持弱| 实盘交易接口分散 | 统一 live 模块 | Sprint 114 |
|性能瓶颈| 计算密集型任务效率低 | Cython 扩展 | Sprint 115 |
|文档不足 | 缺乏系统性文档 | 完善文档体系 | 持续 |
3.3 代码架构分析¶
backtrader/
├── cerebro.py # 主引擎 (85KB, 2112 行) - 核心调度
├── strategy.py # 策略基类 (99KB, 2476 行) - 用户继承
├── linebuffer.py # 行缓冲 (104KB, 3200+行) - 数据结构核心
├── lineiterator.py # 行迭代器 (95KB) - 迭代逻辑
├── lineseries.py # 行序列 (76KB) - 数据容器
├── metabase.py # 元类基础 (81KB) - 元编程
├── parameters.py # 参数系统 (76KB) - 新参数管理(已重构)
├── feed.py # 数据源 (52KB) - 数据加载
├── order.py # 订单系统 (37KB) - 订单管理
├── indicator.py # 指标基类 (15KB) - 技术指标
├── indicators/ # 52 个内置指标
├── analyzers/ # 18 个内置分析器
└── plot/ # 绘图模块 (待增强)
```bash
### 3.4 技术债务清单
| 债务 | 风险等级 | 解决建议 | 优先级 |
|------|---------|----------|--------|
| 元类复杂性 | 中 | 文档化,逐步简化 | P2 |
| 测试覆盖不足 | 高 | 增加测试用例 | P1 |
| 类型注解缺失 | 低 | 逐步添加 | P3 |
| 异步支持缺失 | 中 | 添加 async 适配器 | P2 |
- --
## 四、Sprint 113 用户故事
### 4.1 US-001: Plotly 可视化后端
- *作为** 量化策略开发者
- *我希望** 使用 Plotly 生成交互式回测图表
- *以便** 可以缩放、悬停查看详细数据,进行更深入的分析
- *验收标准**:
- [ ] AC1: 支持`cerebro.plot(backend='plotly')`调用方式
- [ ] AC2: 生成权益曲线、回撤图、月度收益热力图
- [ ] AC3: 支持 K 线图与买卖信号叠加显示
- [ ] AC4: 图表支持缩放、平移、悬停提示
- [ ] AC5: 支持导出为 HTML/PNG 格式
- [ ] AC6: 向后兼容现有 matplotlib 调用
- *技术任务**:
| 任务 ID | 描述 | 估时 | 负责人 |
|--------|------|------|--------|
| T-001-1 | 创建`visualization/`模块结构 | 2h | - |
| T-001-2 | 实现`BasePlotter`抽象基类 | 4h | - |
| T-001-3 | 实现`PlotlyPlotter`核心类 | 8h | - |
| T-001-4 | 实现权益曲线和回撤图 | 4h | - |
| T-001-5 | 实现 K 线图与信号叠加 | 6h | - |
| T-001-6 | 实现月度收益热力图 | 4h | - |
| T-001-7 | 集成到 Cerebro.plot() | 4h | - |
| T-001-8 | 编写单元测试 | 4h | - |
| T-001-9 | 编写使用文档 | 2h | - |
- *Story Points**: 8
- --
### 4.2 US-002: ML 策略基类框架
- *作为** 机器学习量化研究员
- *我希望** 有一个标准化的 ML 策略基类
- *以便** 快速将训练好的模型集成到回测框架中
- *验收标准**:
- [ ] AC1: 提供`MLStrategy`基类,继承自`bt.Strategy`
- [ ] AC2: 支持接收预计算的预测序列
- [ ] AC3: 支持置信度阈值过滤信号
- [ ] AC4: 内置基于置信度的仓位管理
- [ ] AC5: 提供特征工程辅助类`FeatureEngineer`
- [ ] AC6: 包含至少 2 个示例策略(梯度提升、时序预测)
- *技术任务**:
| 任务 ID | 描述 | 估时 | 负责人 |
|--------|------|------|--------|
| T-002-1 | 创建`ml/`模块结构 | 2h | - |
| T-002-2 | 实现`MLStrategy`基类 | 8h | - |
| T-002-3 | 实现`FeatureEngineer`类 | 6h | - |
| T-002-4 | 实现置信度信号过滤 | 4h | - |
| T-002-5 | 实现基于置信度的仓位管理 | 4h | - |
| T-002-6 | 实现梯度提升示例策略 | 6h | - |
| T-002-7 | 实现时序预测示例策略 | 6h | - |
| T-002-8 | 编写单元测试 | 4h | - |
| T-002-9 | 编写使用文档和示例 | 4h | - |
- *Story Points**: 13
- --
### 4.3 US-003: 信号系统增强
- *作为** 策略开发者
- *我希望** 有一个标准化的信号管理系统
- *以便** 更好地管理交易信号的生成、确认和执行
- *验收标准**:
- [ ] AC1: 定义`Signal`数据类,包含类型、状态、优先级等属性
- [ ] AC2: 实现`SignalManager`管理信号生命周期
- [ ] AC3: 支持信号状态机(PENDING→CONFIRMED→SUBMITTED→FILLED)
- [ ] AC4: 支持多指标信号确认机制
- [ ] AC5: 提供信号统计和评估功能
- *技术任务**:
| 任务 ID | 描述 | 估时 | 负责人 |
|--------|------|------|--------|
| T-003-1 | 创建`signals/`模块结构 | 2h | - |
| T-003-2 | 定义`Signal`数据类和枚举 | 4h | - |
| T-003-3 | 实现`SignalManager`类 | 8h | - |
| T-003-4 | 实现信号状态机转换逻辑 | 4h | - |
| T-003-5 | 实现`SignalConfirmator`确认器 | 6h | - |
| T-003-6 | 实现信号统计功能 | 4h | - |
| T-003-7 | 编写单元测试 | 4h | - |
| T-003-8 | 编写使用文档 | 2h | - |
- *Story Points**: 8
- --
### 4.4 US-004: 实时交易接口设计
- *作为** 实盘交易者
- *我希望** 有统一的交易所接口抽象
- *以便** 可以用相同的代码对接不同的交易所
- *验收标准**:
- [ ] AC1: 定义`ExchangeAPI`抽象基类
- [ ] AC2: 统一的方法命名(fetch_/create_/cancel_)
- [ ] AC3: 标准化的订单类型映射
- [ ] AC4: 设计 WebSocket 连接管理器
- [ ] AC5: 设计断线重连机制
- *技术任务**:
| 任务 ID | 描述 | 估时 | 负责人 |
|--------|------|------|--------|
| T-004-1 | 创建`live/`模块结构 | 2h | - |
| T-004-2 | 定义`ExchangeAPI`抽象基类 | 6h | - |
| T-004-3 | 定义订单类型和状态枚举 | 2h | - |
| T-004-4 | 设计`WebSocketManager`类 | 6h | - |
| T-004-5 | 设计重连策略和熔断机制 | 4h | - |
| T-004-6 | 编写设计文档 | 4h | - |
- *Story Points**: 5 (仅设计,不含实现)
- --
## 五、Sprint 113 技术任务分解
### 5.1 Sprint Backlog
| 优先级 | 用户故事 | Story Points | 状态 |
|--------|---------|--------------|------|
| P0 | US-001: Plotly 可视化后端 | 8 | TODO |
| P0 | US-002: ML 策略基类框架 | 13 | TODO |
| P1 | US-003: 信号系统增强 | 8 | TODO |
| P1 | US-004: 实时交易接口设计 | 5 | TODO |
| **合计**| |**34**| |
### 5.2 Sprint 容量规划
- **Sprint 周期**: 2 周 (10 个工作日)
- **团队容量**: 34 Story Points
- **每日 Velocity**: 3.4 SP/day
- **风险 Buffer**: 20%
- --
## 六、详细设计方案
### 6.1 Plotly 可视化后端设计
- *模块结构**:
```bash
backtrader/visualization/
├── __init__.py # 模块入口,后端注册
├── base.py # BasePlotter 抽象基类
├── matplotlib.py # 现有 matplotlib 实现适配
├── plotly.py # Plotly 后端实现
└── utils.py # 通用工具函数
```bash
- *核心类设计**:
```python
# backtrader/visualization/base.py
from abc import ABC, abstractmethod
from typing import Optional, Dict, Any
class BasePlotter(ABC):
"""可视化后端抽象基类"""
@abstractmethod
def plot_equity(self, equity_data: pd.Series, **kwargs) -> Any:
"""绘制权益曲线"""
pass
@abstractmethod
def plot_drawdown(self, drawdown_data: pd.Series, **kwargs) -> Any:
"""绘制回撤图"""
pass
@abstractmethod
def plot_candlestick(self, ohlc_data: pd.DataFrame,
signals: Optional[pd.DataFrame] = None, **kwargs) -> Any:
"""绘制 K 线图(可带信号)"""
pass
@abstractmethod
def plot_monthly_returns(self, returns: pd.Series, **kwargs) -> Any:
"""绘制月度收益热力图"""
pass
@abstractmethod
def show(self) -> None:
"""显示图表"""
pass
@abstractmethod
def save(self, filename: str, **kwargs) -> None:
"""保存图表"""
pass
```bash
```python
# backtrader/visualization/plotly.py
import plotly.graph_objects as go
from plotly.subplots import make_subplots
class PlotlyPlotter(BasePlotter):
"""Plotly 可视化后端"""
def __init__(self, theme: str = 'plotly_white'):
self.theme = theme
self.figures = []
def plot_equity(self, equity_data: pd.Series, **kwargs) -> go.Figure:
fig = go.Figure()
fig.add_trace(go.Scatter(
x=equity_data.index, y=equity_data.values,
mode='lines', name='Equity',
line=dict(color='#2E86AB', width=2)
))
fig.update_layout(
title='Portfolio Equity Curve',
xaxis_title='Date', yaxis_title='Value',
template=self.theme
)
self.figures.append(fig)
return fig
def plot_drawdown(self, drawdown_data: pd.Series, **kwargs) -> go.Figure:
fig = go.Figure()
fig.add_trace(go.Scatter(
x=drawdown_data.index, y=drawdown_data.values *100,
fill='tozeroy', mode='lines', name='Drawdown',
line=dict(color='#E94F37'), fillcolor='rgba(233, 79, 55, 0.3)'
))
fig.update_layout(
title='Drawdown', yaxis_title='Drawdown %',
template=self.theme
)
self.figures.append(fig)
return fig
# ... 其他方法实现
```bash
### 6.2 ML 策略框架设计
- *模块结构**:
```bash
backtrader/ml/
├── __init__.py # 模块入口
├── strategies/
│ ├── __init__.py
│ ├── base.py # MLStrategy 基类
│ ├── gradient_boost.py # 梯度提升策略示例
│ └── prophet.py # 时序预测策略示例
├── features/
│ ├── __init__.py
│ ├── engineer.py # FeatureEngineer 特征工程
│ └── selector.py # 特征选择器
└── utils/
├── data_split.py # 时序数据分割
└── validators.py # 模型验证工具
```bash
- *核心类设计**:
```python
# backtrader/ml/strategies/base.py
import backtrader as bt
from typing import Optional, Sequence
import numpy as np
class MLStrategy(bt.Strategy):
"""机器学习策略基类"""
params = (
('predictions', None), # 预测序列
('probabilities', None), # 概率/置信度序列
('threshold', 0.5), # 信号阈值
('confidence_min', 0.6), # 最小置信度
('position_size', 0.95), # 基础仓位
('scale_by_confidence', True), # 是否按置信度调整仓位
)
def __init__(self):
self.order = None
self._pred_idx = 0
def next(self):
if self.order: # 有未完成订单
return
# 获取当前预测
pred = self._get_prediction()
conf = self._get_confidence()
if pred is None:
return
# 置信度过滤
if conf is not None and conf < self.p.confidence_min:
return
# 计算仓位
size = self._calculate_position_size(conf)
# 生成信号
if pred > self.p.threshold and not self.position:
self.order = self.buy(size=size)
elif pred < (1 - self.p.threshold) and self.position:
self.order = self.close()
def _get_prediction(self) -> Optional[float]:
"""获取当前预测值"""
if self.p.predictions is None:
return None
if self._pred_idx >= len(self.p.predictions):
return None
pred = self.p.predictions[self._pred_idx]
self._pred_idx += 1
return pred
def _get_confidence(self) -> Optional[float]:
"""获取当前置信度"""
if self.p.probabilities is None:
return None
idx = self._pred_idx - 1
if idx < 0 or idx >= len(self.p.probabilities):
return None
return self.p.probabilities[idx]
def _calculate_position_size(self, confidence: Optional[float]) -> float:
"""计算仓位大小"""
base_size = self.p.position_size
if self.p.scale_by_confidence and confidence is not None:
return base_size *confidence
return base_size
```bash
```python
# backtrader/ml/features/engineer.py
import pandas as pd
import numpy as np
from typing import List, Dict, Callable
class FeatureEngineer:
"""特征工程类"""
def __init__(self):
self.features: List[Dict] = []
self._data = None
def fit(self, data: pd.DataFrame) -> 'FeatureEngineer':
"""绑定数据"""
self._data = data
return self
def add_sma(self, period: int, column: str = 'close') -> 'FeatureEngineer':
"""添加简单移动平均特征"""
self.features.append({
'name': f'sma_{period}',
'func': lambda df, p=period, c=column: df[c].rolling(p).mean()
})
return self
def add_rsi(self, period: int = 14, column: str = 'close') -> 'FeatureEngineer':
"""添加 RSI 特征"""
def calc_rsi(df, p=period, c=column):
delta = df[c].diff()
gain = (delta.where(delta > 0, 0)).rolling(p).mean()
loss = (-delta.where(delta < 0, 0)).rolling(p).mean()
rs = gain / loss
return 100 - (100 / (1 + rs))
self.features.append({'name': f'rsi_{period}', 'func': calc_rsi})
return self
def add_returns(self, period: int = 1, column: str = 'close') -> 'FeatureEngineer':
"""添加收益率特征"""
self.features.append({
'name': f'returns_{period}',
'func': lambda df, p=period, c=column: df[c].pct_change(p)
})
return self
def transform(self, data: pd.DataFrame = None) -> pd.DataFrame:
"""生成特征矩阵"""
df = data if data is not None else self._data
result = df.copy()
for feat in self.features:
result[feat['name']] = feat['func'](df)
return result
```bash
### 6.3 信号系统设计
- *核心数据类**:
```python
# backtrader/signals/base.py
from dataclasses import dataclass
from enum import Enum, auto
from typing import Optional, Dict, Any
from datetime import datetime
import uuid
class SignalType(Enum):
BUY = auto()
SELL = auto()
HOLD = auto()
class SignalStatus(Enum):
PENDING = auto()
CONFIRMED = auto()
SUBMITTED = auto()
FILLED = auto()
CANCELLED = auto()
REJECTED = auto()
@dataclass
class Signal:
"""交易信号数据类"""
signal_id: str
signal_type: SignalType
status: SignalStatus
data_name: str
price: Optional[float] = None
size: Optional[float] = None
confidence: float = 1.0
created_at: datetime = None
context: Dict[str, Any] = None
def __post_init__(self):
if self.signal_id is None:
self.signal_id = str(uuid.uuid4())[:8]
if self.created_at is None:
self.created_at = datetime.now()
if self.context is None:
self.context = {}
```bash
- --
## 七、测试计划
### 7.1 单元测试
| 模块 | 测试文件 | 测试用例数 | 覆盖目标 |
|------|---------|-----------|----------|
| visualization | test_plotly.py | 15+ | 85% |
| ml/strategies | test_ml_strategy.py | 20+ | 80% |
| ml/features | test_feature_engineer.py | 25+ | 90% |
| signals | test_signal_manager.py | 20+ | 85% |
### 7.2 集成测试
| 场景 | 描述 | 验证点 |
|------|------|--------|
| IT-001 | Plotly 绑定 Cerebro | plot()调用正常,图表生成正确 |
| IT-002 | ML 策略回测 | 预测信号触发交易,仓位计算正确 |
| IT-003 | 信号系统集成 | 信号状态转换正确,与 Strategy 兼容 |
### 7.3 回归测试
- 确保现有`cerebro.plot()`功能不受影响
- 确保现有 Strategy 子类正常工作
- 确保所有现有测试用例通过
- --
## 八、资源需求
### 8.1 Sprint 113 人力资源
| 角色 | 人数 | 职责 |
|------|------|------|
| 核心开发 | 1 人 | Plotly 可视化、ML 策略框架 |
| 测试 | 1 人 | 单元测试、集成测试 |
| **合计**|**2 人**| |
### 8.2 长期人力规划
| 角色 | 第一阶段 | 第二阶段 | 第三阶段 |
|------|---------|---------|---------|
| 核心开发 | 2 人 | 2 人 | 2 人 |
| ML 工程师 | 1 人 | 2 人 | 1 人 |
| 前端开发 | 1 人 | 0 人 | 1 人 |
| 测试工程师 | 1 人 | 1 人 | 1 人 |
| 技术文档 | 1 人 | 1 人 | 1 人 |
|**合计**|**6 人**|**6 人**|**6 人** |
### 8.3 技术资源
- *Sprint 113 必需**:
- Python 3.8+
- NumPy, Pandas
- Plotly (新增)
- pytest
- *长期推荐**:
- Cython
- Bokeh/Plotly
- scikit-learn
- XGBoost/LightGBM
- Prophet
- *可选**:
- PyQt5
- CCXT
- Futu API
- XTP API
### 8.4 基础设施
- CI/CD: GitHub Actions
- 代码托管: GitHub
- 文档托管: ReadTheDocs
- 包发布: PyPI
- --
## 九、风险管理
### 9.1 Sprint 113 风险
| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|----------|
| Plotly 依赖问题 | 中 | 低 | 作为可选依赖,不影响核心功能 |
| ML 模型兼容性 | 中 | 中 | 提供降级到纯规则策略的方案 |
| 向后兼容性破坏 | 高 | 低 | 严格回归测试 |
### 9.2 长期项目风险
| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|----------|
| 开发周期延长 | 中 | 中 | 分阶段交付,MVP 优先 |
| 人力资源不足 | 高 | 中 | 外包部分工作,社区协作 |
| 需求变更 | 中 | 高 | 模块化设计,灵活架构 |
| 实盘接口不稳定 | 高 | 高 | 充分测试,模拟环境验证 |
- --
## 十、成功指标
### 10.1 Sprint 113 成功指标
| 指标 | 目标 | 度量方法 |
|------|------|----------|
| 用户故事完成率 | 100% | 所有 AC 通过 |
| 测试覆盖率 | ≥80% | pytest-cov |
| 代码 Review | 100% | PR 审查 |
| 文档覆盖率 | 100% | 新功能都有文档 |
### 10.2 长期成功指标
- *性能指标**:
- 指标计算速度提升: ≥3 倍
- 内存占用减少: ≥20%
- 支持的数据量: ≥100 万条 K 线
- *功能指标**:
- 新增 ML 策略: ≥10 种
- 新增可视化后端: ≥2 种
- 支持的交易接口: ≥3 种
- 内置策略示例: ≥50 个
- *质量指标**:
- 测试覆盖率: ≥80%
- 文档覆盖率: ≥80%
- API 兼容性: 100%
- 用户满意度: ≥4.0/5.0
- --
## 十一、总结
本综合方案基于对迭代 44-112 共 69 份优化建议文档的全面分析,结合 backtrader 项目现状,提出了系统性的后续改进方案。
### 核心建议
1. **分阶段实施**: 分三个阶段,每个阶段 6 个月,共 18 个月完成
2. **优先级驱动**: 优先实施高影响力、易实现的功能
3. **向后兼容**: 所有新增功能保持 API 兼容
4. **社区参与**: 充分利用社区力量,部分功能可由社区贡献
5. **模块化设计**: 每个功能模块独立,可选安装和使用
### 预期成果
通过实施本方案,backtrader 将:
- 保持易用性优势的同时,性能提升 3-5 倍
- 获得现代化的交互式可视化能力
- 支持机器学习和强化学习策略
- 提供统一的实盘交易接口
- 成为更完整、更专业的量化交易框架
- --
## 附录: 迭代文档清单
### UI/可视化相关
- 迭代 44: 基于 btreport 进行改进
- 迭代 45: 基于 backtrader_ui 优化 backtrader
- 迭代 46: 基于 backtrader_bokeh 优化 backtrader
- 迭代 47: 基于 backtrader_plotly 优化 backtrader
- 迭代 48: 基于 backtrader_pyqt_ui 优化 backtrader
- 迭代 99: 基于 BackTraderUI 优化 backtrader
### 框架对比研究
- 迭代 50: 基于 zipline 优化
- 迭代 51: 基于 xquant 优化
- 迭代 52: 基于 vnpy 优化
- 迭代 54: 基于 rqalpha 优化
- 迭代 55: 基于 hikyuu 优化
- 迭代 56: 基于 pyalgotrade 优化
- 迭代 57: 基于 qstrader 优化
- 迭代 58: 基于 pysystemtrade 优化
- 迭代 59: 基于 Lean 优化
- 迭代 60: 基于 abu 优化
### 机器学习/AI 相关
- 迭代 63: 基于 btgym 优化
- 迭代 66: 基于 FinGPT 优化
- 迭代 86: 基于 AI-Strategies-StockMarket 优化
- 迭代 101: 基于 backtrader_hydra_bayesian_op 优化
- 迭代 102: 基于 gradient-boosting-with-backtrader 优化
- 迭代 110: 基于 prophet 优化
### 实时交易/接口相关
- 迭代 61: 基于 ctpbee 优化
- 迭代 69: 基于 easytrader 优化
- 迭代 71: 基于 barter-rs 优化
- 迭代 83: 基于 alpaca-backtrader-api 优化
- 迭代 84: 基于 backtrader_binance 优化
- 迭代 93: 基于 backtraderalerts 优化
- 迭代 94: 基于 ccxt-store 优化
- 迭代 95: 基于 bt-futu-store 优化
- 迭代 96: 基于 xtp-backtrader-api 优化
- 迭代 97: 基于 mql5_zmq_backtrader 优化
### 策略库相关
- 迭代 89: 基于 multi-factor-stock-selection 优化
- 迭代 91: 基于 backtrader-strategies-compendium 优化
- 迭代 98: 基于 quant-strategies 优化
### 性能优化相关
- 迭代 70: 基于 Backtesting 优化
- 迭代 72: 基于 backtradercpp 优化
- 迭代 80: 基于 BackTest-Cpp 优化
- 迭代 81: 基于 NumCpp 优化
### 高级功能相关
- 迭代 62: 基于 aat 优化
- 迭代 64: 基于 DevilYuan 优化
- 迭代 82: 基于 flow 优化
- 迭代 88: 基于 Statistical-Arbitrage 优化
- 迭代 100: 基于 stock-backtrader-web-app 优化
- 迭代 105: 基于 pair-trading-envs 优化
- --
- 文档版本: v2.0 (敏捷开发 Sprint 文档)*
- 创建日期: 2026-01-08*
- 最后更新: 2026-01-08*
- Sprint 周期: 2 周*