title: 贡献指南 description: Backtrader 贡献指南


贡献指南

感谢您对 Backtrader 的贡献兴趣!本文档提供了参与项目开发的指南和工作流程。

目录

快速开始

前置要求

  • Python 3.8 或更高版本

  • Git

  • Python 编程基础知识

  • 了解量化交易概念(有帮助但非必需)

首次设置

# 1. 在 GitHub 上 Fork 仓库

# 访问 <https://github.com/cloudQuant/backtrader> 并点击 "Fork" 按钮

# 2. 克隆你的 Fork

git clone <https://github.com/你的用户名/backtrader.git>
cd backtrader

# 3. 添加上游远程仓库

git remote add upstream <https://github.com/cloudQuant/backtrader.git>

# 4. 安装依赖

pip install -r requirements.txt

# 5. 以开发模式安装

pip install -e .

# 6. 编译 Cython 扩展(推荐,以获得更好性能)

cd backtrader && python -W ignore compile_cython_numba_files.py && cd ..

```bash

### 分支命名约定

使用描述性的分支名来指示变更类型:

| 前缀 | 用途 | 示例 |

|------|------|------|

| `feat/` | 新功能 | `feat/websocket-reconnect` |

| `fix/` | Bug 修复 | `fix/indicator-calculation` |

| `refactor/` | 代码重构 | `refactor/broker-optimization` |

| `docs/` | 文档 | `docs/api-reference` |

| `test/` | 测试改进 | `test/coverage-increase` |

| `perf/` | 性能优化 | `perf/line-buffer-cache` |

## Pull Request 流程

### 步骤 1: 创建功能分支

```bash

# 与上游同步

git fetch upstream
git checkout dev
git merge upstream/dev

# 创建你的功能分支

git checkout -b feat/your-feature-name

```bash

### 步骤 2: 进行更改

- 编写清晰、可读的代码
- 遵循[代码风格](style_zh.md)指南
- 为新功能添加测试
- 更新相关文档

### 步骤 3: 提交更改

遵循 [Conventional Commits](<https://www.conventionalcommits.org/)> 格式:

```bash
<type>: <description>

[可选的正文]

```bash

- *有效类型:**
- `feat`: 新功能
- `fix`: Bug 修复
- `refactor`: 代码重构
- `docs`: 文档更改
- `test`: 测试添加或修改
- `chore`: 维护任务
- `perf`: 性能改进

- *示例:**

```bash
git commit -m "feat: 为 CCXTFeed 添加 WebSocket 健康检查"
git commit -m "fix: 处理 CCXTBroker.cancel() 中的 order-not-found"
git commit -m "perf: 在 total_value.next() 中缓存 broker 引用"
git commit -m "docs: 更新 CCXT 实盘交易指南"

```bash

### 步骤 4: 运行测试

```bash

# 运行预提交测试 (P0 + P1)

pytest tests/ -v -m "priority_p0 or priority_p1"

# 运行完整测试套件

pytest tests/ -v -n 4

# 检查代码格式

make format-check

# 运行代码检查

make lint

```bash

### 步骤 5: 推送并创建 Pull Request

```bash

# 推送到你的 Fork

git push origin feat/your-feature-name

# 在 GitHub 上创建 Pull Request

# 目标分支: dev

```bash

### Pull Request 描述模板

```markdown

## 概述

简要描述此 PR 的作用和原因。

## 变更内容

- 主要变更列表

## 变更类型

- [ ] Bug 修复
- [ ] 新功能
- [ ] 性能改进
- [ ] 文档更新
- [ ] 代码重构
- [ ] 破坏性变更

## 测试

- 描述测试方法
- 包含测试命令

```bash
pytest tests/path/to/test.py -v

```bash

## 检查清单

- [ ] 代码符合风格指南
- [ ] 本地测试通过
- [ ] 为新功能添加测试
- [ ] 更新文档
- [ ] 更新 CHANGELOG.md(面向用户的变更)
- [ ] 与目标分支无合并冲突

## 相关 Issues

Fixes #123
Related to #456

```bash

## 代码审查标准

### 审查流程

1. **自动检查**:所有 PR 必须通过 CI/CD 检查
2. **同行评审**:至少需要一位维护者批准
3. **测试覆盖**:新代码需要相应的测试
4. **文档更新**:API 变更需要更新文档

### 审查标准

维护者从以下方面审查 Pull Request:

| 方面 | 标准 |

|------|------|

| **功能正确性**| 按预期工作,无回归 |

|**代码质量**| 可读、可维护、符合约定 |

|**测试**| 覆盖充分,处理边界情况 |

|**文档**| 清晰的文档字符串,面向用户的变更已记录 |

|**性能**| 无显著退化,优化已记录 |

### 处理审查反馈

- 回应所有审查意见
- 进行请求的更改或提供理由
- 解决后标记对话为已解决
- 重大更改后请求重新审查

### 批准要求

- 小更改:一位维护者批准
- 中等更改:两位维护者批准
- 大型/复杂更改:核心团队共识

## Issue 报告指南

### Bug 报告

包含以下信息:

```markdown

## 环境

- Python 版本:3.11.0
- 操作系统:Ubuntu 22.04
- Backtrader 版本:1.0.0 (dev 分支)
- 安装方式:pip install -e .

## 问题描述

清晰描述 Bug。

## 复现步骤

1. 创建 Cerebro 实例
2. 添加数据源...
3. 运行策略
4. 观察错误

## 预期行为

应该发生什么。

## 实际行为

实际发生了什么(包含错误信息)。

## 代码示例

```python
import backtrader as bt

# 最小可复现代码

```bash

## 附加信息

日志、截图或其他相关信息。

```bash

### 功能请求

提供以下信息:

```markdown

## 问题陈述

这解决了什么问题?用例是什么?

## 建议的解决方案

所需功能的详细描述。

## 考虑的替代方案

您还考虑了哪些其他方法?

## 附加信息

示例、参考或实现想法。

```bash

## 社区准则

### 行为准则

- 尊重和包容
- 欢迎新手并帮助他们学习
- 专注于建设性反馈
- 假设良好意图

### 沟通渠道

- **Issues**:Bug 报告和功能请求
- **Discussions**:问题和想法
- **Pull Requests**:代码贡献

### 获取帮助

- 首先搜索现有的 issues  discussions
- 提供最小可复现示例
- 分享相关环境详情
- 对志愿者维护者保持耐心

## 许可证和贡献者协议

### 许可证

Backtrader 采用 GNU General Public License v3.0 (GPLv3) 许可。

通过向 Backtrader 贡献,您同意您的贡献将在 GPLv3 下许可。

### 版权

版权由原始贡献者保留。项目在以下位置包含致谢:

- LICENSE 文件
- CONTRIBUTORS 文件
- 发布说明

## 开发者来源证书 (DCO)

### 什么是 DCO?

DCO 是一个简单的声明,证明您有权提交您的贡献。

### DCO 签署

要认证您的贡献,请在提交消息中添加 `Signed-off-by` 行:

```bash
git commit -m "feat: 添加新指标

Signed-off-by: 你的名字 <your.email@example.com>"

```bash

### 自动签署

配置 Git 自动添加签署:

```bash
git config --global commit.signoff true

```bash
然后使用 `-s` 标志:

```bash
git commit -s -m "feat: 添加新指标"

```bash

### DCO 认证

通过签署,您证明:

> 开发者来源证书
> 版本 1.1
>
> 版权所有 (C) 2004, 2006 The Linux Foundation 及其贡献者。
> 1 Letterman Drive
> Suite D4700
> San Francisco, CA, 94129
>
> 任何人都可以复制和分发本许可文档的逐字副本,
> 但不允许更改。
>
>
> 开发者来源证书 1.1
>
> 通过向本项目做出贡献,我证明:
>
> (a) 该贡献全部或部分由我创建,我有权根据文件中
>     指明的开源许可证提交它;或
>
> (b) 该贡献基于以前的工作,据我所知,这些工作受
>     适当的开源许可证保护,我有权根据该许可证
>     提交修改后的作品(无论全部或部分由我创建),
>     使用相同的开源许可证(除非我被允许根据不同
>     许可证提交),如文件中所指明;或
>
> (c) 该贡献由认证了 (a)(b)  (c) 的其他人直接
>     提供给我,且我未对其进行修改。
>
> (d) 我理解并同意该项目和贡献是公开的,贡献记录
>     (包括我提交的所有个人信息,包括我的签署)将
>     无限期保存,并可根据本项目或所涉及的开源许可
>     证重新分发。

## 认可

贡献者在以下位置获得认可:

- `CONTRIBUTORS` 文件
- 发布说明
- 项目文档(重大贡献)

感谢您为 Backtrader 做出贡献!

## 另请参阅

- [开发环境设置](setup_zh.md)
- [代码风格](style_zh.md)
- [测试指南](testing_zh.md)
- [项目上下文](../project-context.md)