迭代 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 目标

  1. 完成: 迭代 44-112 建议的系统性梳理和优先级排序

  2. 交付: 3 个高优先级功能模块的设计文档

  3. 实现: 可视化增强模块(Plotly 后端)的核心功能

  4. 实现: ML 策略基类框架

  5. 文档: 完善 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 周*