title: Cerebro API 参考 description: 核心回测引擎 API


Cerebro API 参考

Cerebro 是核心回测引擎,用于协调策略、数据源、经纪人和分析器。

基本用法

import backtrader as bt

# 创建 cerebro 实例

cerebro = bt.Cerebro()

# 添加组件

cerebro.adddata(data)
cerebro.addstrategy(MyStrategy, param1=value1)
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')

# 运行回测

results = cerebro.run()

# 绘图结果

cerebro.plot()

```bash

## 构造函数

```python
bt.Cerebro()

```bash
创建一个新的 Cerebro 实例

## 数据管理

### adddata

```python
cerebro.adddata(data, name=None)

```bash
向系统添加数据源

- **data**: 数据源实例
- **name**: 数据源的可选名称

```python
data = bt.feeds.YahooFinanceData(dataname='AAPL')
cerebro.adddata(data, name='AAPL')

```bash

### resampledata

```python
cerebro.resampledata(data, timeframe=bt.TimeFrame.Days, compression=1)

```bash
添加数据并将其重采样到不同的时间周期

### replaydata

```python
cerebro.replaydata(data, timeframe=bt.TimeFrame.Weeks)

```bash
添加数据并在不同的时间周期上重放

## 策略管理

### addstrategy

```python
cerebro.addstrategy(strategy_class, *args, **kwargs)

```bash
向系统添加策略

```python
cerebro.addstrategy(MyStrategy,
                   period=20,
                   threshold=1.5)

```bash

### optstrategy

```python
cerebro.optstrategy(strategy_class, *args, **kwargs)

```bash
添加策略用于优化为要优化的参数传递可迭代对象

```python
cerebro.optstrategy(MyStrategy,
                   period=[10, 20, 30],
                   threshold=[1.0, 1.5, 2.0])

```bash

### runstrategies

```python
cerebro.runstrategies()

```bash
运行回测 `run()` 相同)。

## 经纪人管理

### getbroker

```python
broker = cerebro.getbroker()

```bash
获取经纪人实例

### setbroker

```python
cerebro.setbroker(broker_instance)

```bash
设置自定义经纪人实例

### broker_setcash

```python
cerebro.broker_setcash(100000)

```bash
设置初始资金

### broker_setcommission

```python
cerebro.broker_setcommission(commission=0.001)
cerebro.broker_setcommission(commission=0.001, leverage=10.0)

```bash
设置佣金结构

## 分析器管理

### addanalyzer

```python
cerebro.addanalyzer(analyzer_class, *args, **kwargs)

```bash
向系统添加分析器

```python
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')

```bash

## 观察器管理

### addobserver

```python
cerebro.addobserver(observer_class, *args, **kwargs)

```bash
向系统添加观察器

```python
cerebro.addobserver(bt.observers.DrawDown)

```bash

## 写入器管理

### addwriter

```python
cerebro.addwriter(writer_class, *args, **kwargs)

```bash
添加输出写入器

```python
cerebro.addwriter(bt.WriterFile, csv=True, out='results.csv')

```bash

## 执行

### run

```python
results = cerebro.run()

```bash
执行回测

返回策略实例列表

```python
strats = cerebro.run()
strat = strats[0]

# 访问分析器

sharpe = strat.analyzers.sharpe.get_analysis()
drawdown = strat.analyzers.drawdown.get_analysis()

```bash

### runstop

```python
cerebro.runstop = False  # 设置为 True 以停止执行

```bash
提前终止的停止标志

## 绘图

### plot

```python
cerebro.plot(plotter=None, figsize=None, style='plotly', **kwargs)

```bash
绘制结果

```python

# Plotly (交互式,推荐)

cerebro.plot(style='plotly')

# Matplotlib (静态)

cerebro.plot(style='matplotlib')

# Bokeh (交互式)

cerebro.plot(style='bokeh')

```bash

## 配置

### stdstats

```python
cerebro.stdstats = True  # 启用标准观察器

```bash
启用/禁用标准观察器资金价值交易)。

### maxcpus

```python
cerebro.maxcpus = None  # 使用所有 CPU

cerebro.maxcpus = 4     # 使用 4 个 CPU

```bash
设置优化的 CPU 限制

## 性能选项

### runonce

```python
cerebro.runonce = True  # 使用向量化模式 (更快)

cerebro.runonce = False  # 使用事件驱动模式

```bash
执行模式

- `True`: 向量化 (runonce) - 简单策略更快
- `False`: 事件驱动 (runnext) - 更多控制

### preload

```python
cerebro.preload = True  # 将所有数据加载到内存

```bash
将数据预加载到内存以加快访问

### exactbars

```python
cerebro.exactbars = 1  # 在内存中保留最少的 K 线

```bash
长回测的内存优化

## 完整示例

```python
import backtrader as bt
from datetime import datetime

class SmaCross(bt.Strategy):
    params = (('fast', 10), ('slow', 30))

    def __init__(self):
        super().__init__()
        fast_ma = bt.indicators.SMA(period=self.params.fast)
        slow_ma = bt.indicators.SMA(period=self.params.slow)
        self.crossover = bt.indicators.CrossOver(fast_ma, slow_ma)

    def next(self):
        if not self.position and self.crossover > 0:
            self.buy(size=100)
        elif self.position and self.crossover < 0:
            self.close()

# 创建 cerebro

cerebro = bt.Cerebro()

# 添加数据

data = bt.feeds.YahooFinanceData(
    dataname='AAPL',
    fromdate=datetime(2020, 1, 1),
    todate=datetime(2023, 12, 31)
)
cerebro.adddata(data)

# 添加策略

cerebro.addstrategy(SmaCross, fast=10, slow=30)

# 设置经纪人参数

cerebro.broker_setcash(100000)
cerebro.broker_setcommission(commission=0.001)

# 添加分析器

cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe', riskfreerate=0.0)
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name='trades')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')

# 运行

results = cerebro.run()
strat = results[0]

# 打印结果

print(f"最终组合价值: {cerebro.broker.getvalue():.2f}")
print(f"夏普比率: {strat.analyzers.sharpe.get_analysis()['sharperatio']:.2f}")
print(f"最大回撤: {strat.analyzers.drawdown.get_analysis()['max']['drawdown']:.2f}%")

# 绘图

cerebro.plot(style='plotly', volume=False)

```bash

## 属性

| 属性 | 类型 | 默认值 | 描述 |

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

| `runonce` | bool | True | 向量化执行 |

| `preload` | bool | True | 预加载数据 |

| `maxcpus` | int | None | 优化的 CPU 限制 |

| `stdstats` | bool | True | 标准观察器 |

| `exactbars` | int | 0 | 内存优化级别 |

## 方法参考

| 方法 | 描述 |

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

| `adddata()` | 添加数据源 |

| `resampledata()` | 添加并重采样数据 |

| `replaydata()` | 添加并重放数据 |

| `addstrategy()` | 添加策略 |

| `optstrategy()` | 添加策略用于优化 |

| `addanalyzer()` | 添加分析器 |

| `addobserver()` | 添加观察器 |

| `addwriter()` | 添加写入器 |

| `setbroker()` | 设置自定义经纪人 |

| `getbroker()` | 获取经纪人实例 |

| `broker_setcash()` | 设置初始资金 |

| `broker_setcommission()` | 设置佣金 |

| `run()` | 运行回测 |

| `plot()` | 绘制结果 |