Backtrader Python 量化回测框架的 C++ 重构版本。
阶段 1: 基础设施 ✅ 完成
- CMake 构建系统
- LineBuffer 核心数据结构
- LineSeries 多线容器
- 参数系统 (params)
- 指标基类
- SMA/EMA/MACD/RSI/BollingerBands 指标
- pybind11 Python 绑定(基础)
- Google Test 单元测试
阶段 2: 核心引擎 ✅ 完成
- Cerebro 回测引擎
- 数据管理 (addData)
- 策略管理 (addStrategy)
- 分析器管理 (addAnalyzer)
- 观察器管理 (addObserver)
- 运行控制 (run/runOnce)
- Strategy 策略框架
- 生命周期方法 (init/start/prenext/nextstart/next/stop)
- 交易方法 (buy/sell/close/cancel)
- 持仓查询 (position/getPosition)
- 订单/交易通知 (notifyOrder/notifyTrade)
- Broker 经纪商
- 账户管理 (cash/value)
- 订单处理 (buy/sell/cancel)
- 持仓跟踪
- 佣金计算
- DataFeed 数据源
- 内存数据源 (MemoryDataFeed)
- CSV数据源 (CSVDataFeed)
- OHLCV数据结构
- Order/Trade 订单系统
- 多种订单类型 (Market/Limit/Stop/StopLimit)
- 订单状态跟踪
- 交易记录
- Analyzers 分析器
- TradeAnalyzer
- ReturnsAnalyzer
- SharpeRatio
- DrawDown
- AnnualReturn
- SQN
- Observers 观察器
- CashObserver
- ValueObserver
- DrawDownObserver
- BuySellObserver
- TradesObserver
阶段 3: 高级特性 ✅ 完成
- 多时间周期支持
- TimeFrame 枚举 (Ticks, Seconds, Minutes, Days, Weeks, Months, Years)
- Resampler 数据重采样
- ResampledDataFeed
- 完整订单系统
- OrderExecutionBit 执行位
- OrderData 执行数据
- OCO (One-Cancels-Other) 订单
- Bracket 订单 (主订单+止损+止盈)
- StopTrail/StopTrailLimit 跟踪止损
- ValidUntil 订单有效期
- 信号系统
- 14种信号类型 (SIGNAL_LONG, SIGNAL_SHORT, SIGNAL_LONGEXIT, etc.)
- Signal 指标类
- SignalGroup 信号分组
- SignalStrategy 信号策略
- CrossoverSignalStrategy SMA交叉信号策略
阶段 4: 性能优化 ✅ 完成
- SIMD 向量化计算
- 自动检测 SIMD 级别 (AVX512/AVX2/AVX/SSE2/Scalar)
- simd::sum, simd::mean, simd::dot 等基础运算
- simd::slidingMean, simd::ema 等滑动窗口运算
- simd::rsi, simd::macd, simd::bollinger 指标计算
- 多线程优化
- ThreadPool 线程池
- parallelFor/parallelForEach 并行算法
- ParameterGrid 参数网格生成
- 策略优化系统
- Optimizer 策略优化器
- OptResult 优化结果
- OptResultAnalyzer 结果分析 (参数敏感性, 统计摘要)
- Cerebro.optStrategy 优化策略配置
- Cerebro.runOptimize 并行优化执行
- 向量化指标计算
- IVectorized 接口
- VectorMath 向量数学运算
- Indicator.once() 批量计算
- SMA/EMA/RSI/MACD SIMD 优化
阶段 5: Python 功能对齐 ✅ 完成
- Sizer 系统
- FixedSizer/FixedReverser 固定手数
- PercentSizer/PercentSizerInt 资金百分比
- AllInSizer/AllInSizerInt 全仓
- PercentReverser 百分比反转
- RiskSizer 风险百分比
- KellySizer 凯利公式
- CommInfo 佣金系统
- CommInfoStock/Futures/Forex/Options 各类型佣金
- margin/automargin 保证金计算
- interest/leverage 利息/杠杆
- profitAndLoss 盈亏计算
- Filter 数据过滤器
- SessionFilter/SessionFiller 会话过滤
- RenkoFilter/HeikinAshiFilter 技术过滤
- CalendarDaysFilter/DayStepsFilter 日历过滤
- VolumeFilter/PriceFilter 量价过滤
- FilterChain 过滤器链
- Timer 定时器系统
- Timer/TimerManager 定时器管理
- schedule:: 辅助函数
- weekdays/monthdays 时间过滤
- Writer 写入器系统
- WriterFile/CSVWriter 文件写入
- TradeWriter/EquityWriter/OrderWriter 专用写入器
- SummaryWriter/MultiWriter 摘要/多重写入
- Strategy 增强
- orderTargetSize/Value/Percent 目标持仓
- prenextOpen/nextstartOpen/nextOpen Cheat-on-open
- notifyFund/notifyStore/notifyTimer 通知
- addTimer 定时器
- Broker 增强
- SlippageConfig 滑点配置
- VolumeFiller 成交量填充
- COC/COO Cheat 模式
- FundMode 基金模式
- Cerebro 增强
- addSizer/addSizerByIdx 头寸管理
- addWriter 写入器
- addFilter 过滤器
- addTimer 定时器
- CMake 3.16+
- C++17 兼容编译器
- MSVC 2019+ (Windows)
- GCC 8+ (Linux)
- Clang 8+ (macOS)
- Python 3.8+ (可选,用于 Python 绑定)
cd cpp
.\build.ps1cd cpp
chmod +x build.sh
./build.shmkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel
ctest --output-on-failurecpp/
├── include/bt/ # 头文件
│ ├── common.hpp # 通用定义
│ ├── linebuffer.hpp # 时间序列缓冲区
│ ├── lineseries.hpp # 多线容器
│ ├── params.hpp # 参数系统
│ ├── indicator.hpp # 指标基类
│ ├── strategy.hpp # 策略框架
│ ├── broker.hpp # 经纪商系统
│ ├── cerebro.hpp # 回测引擎
│ ├── datafeed.hpp # 数据源
│ ├── order.hpp # 订单系统
│ ├── analyzer.hpp # 分析器
│ ├── observer.hpp # 观察器
│ ├── signal.hpp # 信号系统
│ ├── sizer.hpp # 头寸管理 (Phase 5)
│ ├── comminfo.hpp # 佣金系统 (Phase 5)
│ ├── filter.hpp # 数据过滤 (Phase 5)
│ ├── timer.hpp # 定时器 (Phase 5)
│ ├── writer.hpp # 写入器 (Phase 5)
│ ├── optimizer.hpp # 策略优化
│ ├── threadpool.hpp # 线程池
│ ├── simd.hpp # SIMD 计算
│ ├── vectorized.hpp # 向量化计算
│ ├── backtrader.hpp # 主头文件
│ └── indicators/ # 指标实现
│ ├── sma.hpp
│ ├── ema.hpp
│ ├── macd.hpp
│ ├── rsi.hpp
│ └── bollinger.hpp
├── src/ # 源文件
├── tests/ # 单元测试
├── examples/ # 示例代码
├── python/ # Python 绑定
└── CMakeLists.txt # 构建配置
#include "bt/backtrader.hpp"
int main() {
// 创建价格数据
bt::LineBuffer prices;
prices.extend({100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110});
// 创建 SMA 指标
bt::SMA sma(&prices, 5);
sma.init();
sma.precompute();
// 获取结果
std::cout << "SMA value: " << sma.value(0) << std::endl;
return 0;
}from backtrader_cpp import LineBuffer, SMA
# 创建数据
prices = LineBuffer()
for p in [100, 101, 102, 103, 104, 105]:
prices.push(p)
# 创建指标
sma = SMA(prices, 3)
sma.init()
sma.precompute()
print(f"SMA value: {sma.value(0)}")| Python (原版) | C++ (新版) |
|---|---|
self.data.close[0] |
data.close()[0] |
bt.indicators.SMA(period=20) |
bt::SMA(&data, 20) |
params = (('period', 14),) |
BT_PARAM(period, 14) |
初步基准测试显示,C++ 版本在指标计算上比 Python 版本快 5-10 倍:
| 数据量 | SMA(20) | EMA(20) | RSI(14) |
|---|---|---|---|
| 10K | 0.1 ms | 0.1 ms | 0.2 ms |
| 100K | 0.8 ms | 0.9 ms | 1.5 ms |
| 1M | 8 ms | 9 ms | 15 ms |
- 阶段 1: 基础设施 (LineBuffer, LineSeries, Params, 指标) ✅
- 阶段 2: 核心引擎 (Cerebro, Strategy, DataFeed, Broker) ✅
- 阶段 3: 高级特性 (多时间周期, 完整订单系统, 信号系统) ✅
- 阶段 4: 性能优化 (SIMD, 多线程, 向量化计算) ✅
- 阶段 5: Python功能对齐 (Sizer, CommInfo, Filter, Timer, Writer) ✅
本项目遵循与 Python backtrader 相同的 GPLv3+ 许可证。