2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00
2026-07-09 21:23:10 +08:00

RaptorBT

License: MIT Python 3.10+ Rust

高性能 Rust 回测引擎 + 策略自动化框架,亚毫秒级回测,80+ 技术指标,位级确定性执行。

RaptorBT 是一个用 Rust 编写的高性能回测引擎,通过 PyO3 提供 Python 绑定。支持单标的、篮子、配对、期权、价差、多策略、Tick 级回测,在亚毫秒级时间内返回完整的 33 项绩效指标报告。项目还内置完整的策略自动化框架(参数优化 / Walk-Forward 验证 / 验收检查 / 交付包导出),支持 AI agent 自主开发与交付策略。

亚毫秒级回测 · 编译后 < 1 MB · 80+ 技术指标 · 位级确定性 · 原生并行 · 策略自动化框架


快速开始

安装

pip install raptorbt

30 秒示例

import numpy as np
import raptorbt

# 配置回测
config = raptorbt.PyBacktestConfig(initial_capital=100000, fees=0.001)

# 运行回测
result = raptorbt.run_single_backtest(
    timestamps=timestamps,
    open=open, high=high, low=low, close=close, volume=volume,
    entries=entries, exits=exits,
    direction=1, weight=1.0, symbol="AAPL",
    config=config,
)

# 查看结果
print(f"收益率: {result.metrics.total_return_pct:.2f}%")
print(f"夏普比率: {result.metrics.sharpe_ratio:.2f}")
print(f"最大回撤: {result.metrics.max_drawdown_pct:.2f}%")

目录


概述

RaptorBT 编译为单一原生扩展,完全在 Rust 中运行。在典型 K 线数量下,完整的回测加上所有 33 项绩效指标的执行时间不足 1 毫秒。在 Apple M4 上测量的基准数据(raptorbt 0.4.1):

指标 RaptorBT
编译引擎大小 < 1 MB
回测速度 (1K 根 K 线) ~0.03 ms
回测速度 (10K 根 K 线) ~0.25 ms
回测速度 (50K 根 K 线) ~1.4 ms
内存使用 低(原生内存管理)

核心特性

  • 7 种策略类型:单标的、篮子/集体、配对交易、期权、价差、多策略、Tick 级
  • 资产与券商无关:从任何数据源传入 NumPy OHLCV 或 Tick 数组——股票、期货、外汇、加密货币、期权,RaptorBT 从不假设市场或数据供应商
  • 80+ 技术指标:集成 ferro-ta 指标库,覆盖趋势、动量、波动率、强度、成交量、价格变换、统计、周期变换、市场状态检测、投资组合工具
  • Tick 级模拟:全 Tick 分辨率,支持日内期权动量、剥头皮和微观结构策略
  • 批量价差回测:通过 Rayon 并行运行多个价差回测,释放 GIL
  • 蒙特卡洛模拟:基于 GBM + Cholesky 分解的相关多资产前向投影
  • 33 项绩效指标:夏普、索提诺、卡玛、Omega、SQN、盈亏比、恢复因子等
  • 止损/止盈管理:固定、ATR 基于和追踪止损,风险回报目标
  • 位级确定性:相同输入产生 bit-for-bit 相同结果——无 JIT 编译偏差
  • 原生并行Rayon 并行处理 + SIMD 优化

策略自动化框架

RaptorBT 内置完整的策略自动化框架,覆盖从策略开发到交付的完整流程:

scaffold 生成模板 → 编写信号逻辑 → check 前视检测 → optimize 参数优化
→ walkforward 验证 → acceptance 验收 → deliver 生成交付包

数据源

框架支持两种数据源,默认用 CSV 离线数据:

  • CSV(默认):把 MT5 History Center / quant data manager 导出的 M1 CSV 放到 data/ 目录,加载器自动识别品种、时区、重采样、spread→slippage 转换。适合策略研究。
  • Mt5Bridge:用 --source mt5 切换,从远程 MT5 拉取实时数据。适合最终策略验证。

CLI 入口

所有命令通过 python -m app.main 调用:

# 列出所有已注册策略 (同时列出 data/ 下可用 CSV 品种)
python -m app.main list

# 运行单个策略回测 (默认 CSV 离线数据)
python -m app.main run --strategy sma_cross --symbol XAUUSD --bars 500

# 对比所有策略表现
python -m app.main compare --symbol XAUUSD

# 参数网格搜索优化
python -m app.main optimize --strategy sma_cross \
    --param fast=5,10,15 --param slow=20,30 --metric sharpe_ratio --export

# Walk-Forward 验证 (滚动 IS/OOS + 过拟合检测)
python -m app.main walkforward --strategy sma_cross \
    --param fast=5,10 --param slow=20,30 --bars 1000 --train-size 300 --test-size 100

# 列出所有可用策略 / 可用指标 (80 个)
python -m app.main list
python -m app.main list --indicators --json    # AI agent 开发前先查询指标目录

# 策略验收检查 (盈利优先三层标准 + 前视偏差强制检测)
python -m app.main validate --strategy sma_cross \
    --param fast=5,10 --param slow=20,30

# 前视偏差检测 (静态 AST 扫描 + 动态扰动验证)
python -m app.main check --strategy sma_cross --dynamic --bars 500
python -m app.main check --strategy all              # 扫描所有策略

# 生成策略模板文件 (自带前视警告头部)
python -m app.main scaffold --name my_rsi --template mean_reversion

# 生成完整交付包 (强制前视检测, 未通过则拒绝生成)
python -m app.main deliver --strategy sma_cross \
    --param fast=5,10 --param slow=20,30

# 所有命令支持 --json 输出 (供 AI agent 解析, 含失败诊断建议)
python -m app.main validate --strategy sma_cross \
    --param fast=5,10 --param slow=20,30 --json

9 个自动化模块

模块 作用 关键能力
app/main.py CLI 入口 9 个子命令 (list/run/compare/optimize/walkforward/validate/check/scaffold/deliver),全部支持 --json 结构化输出
app/data_loader.py CSV 数据加载 MT5 格式 M1 CSV,17 品种识别,13 周期重采样,spread→slippage
app/lookahead_check.py 前视偏差防护 静态 AST 扫描 (11 规则) + 动态扰动验证,强制集成到 validate/deliver
app/indicator_catalog.py 指标目录 80 个原生指标的可查询目录,含签名/输入/默认值/返回值,list --indicators 输出
app/optimizer.py 参数网格搜索 遍历参数组合,按指标排序,导出完整响应面
app/walk_forward.py Walk-Forward 验证 滚动 IS/OOS 窗口,衰减比,参数稳定性分析,过拟合检测
app/acceptance.py 验收检查 盈利优先三层标准 (L1 盈利性必须 / L2 风险可控 / L3 健壮性) + 失败诊断建议 (按层分级)
app/scaffold.py 策略模板生成器 5 种模板 (crossover/mean_reversion/trend_following/breakout/custom),自带前视警告
app/exporter.py 交付包打包导出 策略源码 + 8 章节 Markdown 报告 + 3 个 CSV

前视偏差防护链

防止 AI agent 自动开发策略时引入前视偏差(使用未来 bar 数据导致回测虚高)。完整防护链:

scaffold (头部警告) → check (静态+动态检测) → validate (强制前置) → deliver (强制前置, 拒绝生成)
防护点 行为
scaffold 模板 生成的策略文件头部自带 ⚠️ 前视警告,列出禁用模式
check 命令 单独运行静态 AST 扫描 + 动态扰动验证
validate 命令 前置前视检测,未通过则终止验收
deliver 命令 前置前视检测,未通过则拒绝生成交付包
引擎层 upon_bar_close=True(默认)确保信号在 bar 收盘后生成

检测的常见前视模式:.shift(-N)close[-1] 负索引、df.iloc[i+N:] 切片未来、np.roll 循环移位、future/lookahead 关键词等 11 条规则。

JSON 输出 + 失败驱动迭代 ★

所有 CLI 命令支持 --json 标志,输出结构化 JSON(自动清理 NaN/Inf,不转义中文),AI agent 可直接解析无需正则匹配表格:

python -m app.main validate --strategy sma_cross \
    --param fast=5,10 --param slow=20,30 --json

失败驱动的自动迭代:当 validate 未通过时,JSON 中 acceptance.criteria 数组的每条失败标准都带 suggestions 字段(5 条具体可执行建议,按 L1/L2/L3 分级)。AI agent 按优先级决策

  • l1_passed=false → 策略不赚钱,不要在参数优化上浪费时间,按 L1 建议换策略逻辑/品种/周期
  • l1_passed=true && (l2|l3)=false → 按 L2/L3 建议调整风控或统计性问题
  • 全过 → deliver --json 生成交付包
失败标准 建议方向
OOS 盈利因子 < 1.3 L1 重审信号逻辑、切换策略类型、切换品种/周期、检查止损、反向信号
OOS 净收益 ≤ 0 L1 检查 IS 是否也亏、评估成本侵蚀、减少频率、切换顺势品种、反向信号
OOS 每笔期望 ≤ 0 L1 检查胜率×盈亏比、放大止盈/追踪止损、加过滤提高胜率、放宽止损
OOS 最大回撤 > 20% L2 收紧止损、ATR 动态止损、追踪止损、降仓位、加趋势过滤
OOS 夏普 < 0.7 L3 放宽止损、加趋势过滤、切大周期、加成交量过滤(已降为参考)
OOS 交易数 < 30 L3 缩短指标周期、降低入场阈值、切更小周期、放宽过滤、检查 warmup
衰减比 < 0.5 L3 缩小参数空间、增加 WF 窗口数、简化策略、用中位数参数、检查前视

验收标准 (盈利优先三层)

⚠️ 设计原则:策略的最终目的是赚钱,不是为了优化指标而优化指标。盈利性(PF/收益/期望)是 L1 必须层,先确认真赚钱再看风险/健壮性。避免"Sharpe=1.06 但年化 2.5%"这种假阳性,也避免"IS/OOS 都亏但衰减比 3.0"这种误导性通过。

层级 标准 阈值 性质
L1 盈利性 OOS 盈利因子 ≥ 1.3 必须(任一失败即拒收)
OOS 净收益率 > 0% 必须
OOS 每笔期望 > 0 必须
L2 风险可控 OOS 最大回撤 ≤ 20% 应该
L3 健壮性 OOS 夏普比率 ≥ 0.7 建议(参考性,已放宽原 1.0
OOS 总交易数 ≥ 30 建议
IS/OOS 衰减比 ≥ 0.5 建议(注:IS 也亏时高衰减比无意义)

💡 详见 docs/策略自动化框架.md 的"验收检查"章节。

策略框架 (strategies/)

所有策略继承 Strategy 基类,实现 3 个方法即可自动注册:

from .base import Strategy, SignalResult
import raptorbt, numpy as np

class MyStrategy(Strategy):
    name = "my_strategy"

    def __init__(self, period: int = 14):
        self.period = period

    def warmup_bars(self) -> int:
        return self.period + 1

    def generate_signals(self, df) -> SignalResult:
        close = df["close"].values.astype(np.float64)
        rsi = raptorbt.rsi(close, period=self.period)
        entries = (rsi < 30).astype(bool)
        exits = (rsi > 70).astype(bool)
        entries, exits = self.apply_warmup(entries, exits)
        return SignalResult(entries=entries, exits=exits, direction=1)

    def build_config(self) -> raptorbt.PyBacktestConfig:
        config = raptorbt.PyBacktestConfig(initial_capital=100000.0, fees=0.001)
        config.set_fixed_stop(0.02)
        return config

    def description(self) -> str:
        return f"RSI({self.period}) 均值回归"

STRATEGY_CLASS = MyStrategy  # 暴露此常量即可自动注册

详细文档见 docs/策略自动化框架.md


项目结构

my-python-backteat/
├── app/                        # 应用层 (Python)
│   ├── __init__.py             #   包入口 + 版本号
│   ├── main.py                 #   CLI 入口 (9 个子命令)
│   ├── data_loader.py          #   CSV 数据加载器 (M1→多周期重采样)
│   ├── indicators.py           #   自定义指标库 (转发 ferro-ta 原生)
│   ├── lookahead_check.py      #   前视偏差检测器 (静态 AST + 动态扰动)
│   ├── optimizer.py            #   参数网格搜索优化器
│   ├── walk_forward.py         #   Walk-Forward 验证 + 过拟合检测
│   ├── acceptance.py           #   策略验收标准
│   ├── scaffold.py            #   策略模板生成器 (自带前视警告)
│   └── exporter.py             #   交付包打包导出
├── strategies/                # 策略框架 (用户扩展区)
│   ├── __init__.py             #   自动发现注册表
│   ├── base.py                 #   Strategy 基类 + SignalResult
│   ├── sma_cross.py            #   示例: SMA 交叉
│   ├── rsi_mean_reversion.py   #   示例: RSI 均值回归
│   ├── sar_adx_cci.py          #   示例: SAR+ADX+CCI
│   └── atr_stop_rr.py          #   示例: ATR 止损 + 风险回报
├── data/                       # CSV 数据目录 (用户放置, gitignore)
├── docs/                       # 文档
│   ├── RaptorBT使用手册.md
│   ├── Mt5Bridge使用指南.md
│   └── 策略自动化框架.md
├── src/                        # RaptorBT 引擎 (Rust)
├── python/raptorbt/           # PyO3 Python 绑定
├── benches/                   # Rust 基准测试
├── tests/                     # Rust 单元测试
├── vendor/                     # 第三方源码依赖 ★必须随项目提交 (保证可移植)
│   ├── README.md              #   依赖管理说明
│   └── ferro-ta-main/         #   ferro-ta v1.2.0 — 80+ 指标的 Rust 原生实现
├── backtest_output/            # 运行时输出 (gitignore)
├── deliverables/               # 交付包 (运行时创建, gitignore)
├── Cargo.toml                  # Rust 依赖 (通过 path 引用 vendor/ferro-ta-main/)
├── pyproject.toml              # Python 项目配置
├── requirements.txt            # Python 依赖
└── README.md

分层职责

  • 引擎层 (src/, python/raptorbt/)Rust 高性能回测核心 + Python 绑定
  • 应用层 (app/):CLI、优化器、验证器、导出器、数据加载器、前视检测器
  • 策略层 (strategies/):策略定义与自动注册
  • 文档层 (docs/):使用手册与指南
  • 依赖层 (vendor/):第三方源码依赖(ferro-ta-main),随项目提交以保证换电脑即可编译

⚠️ 可移植性vendor/ferro-ta-main/ferro_ta_core 的源码依赖(在 Cargo.toml 中通过 path = "vendor/ferro-ta-main/crates/ferro_ta_core" 引用),必须随项目提交。换电脑后无需联网拉取外部 crate,直接 clone 即可编译。详见 vendor/README.md


技术指标

RaptorBT 提供 80+ 个技术指标,其中 12 个为原版指标,其余 68 个来自 ferro-ta 指标库。所有指标均以原生 Rust 实现,接受 NumPy float64 数组并返回 NumPy 数组。预热期返回 NaN。

原版指标 (12 个)

类别 指标
趋势 SMA、EMA、Supertrend
动量 RSI、MACD、Stochastic
波动率 ATR、Bollinger Bands
强度 ADX
成交量 VWAP
滚动 Rolling Min、Rolling Max

ferro-ta 扩展指标 (68 个)

趋势类 (15 个)

函数 签名 返回 说明
wma wma(data, period) ndarray 加权移动平均
dema dema(data, period) ndarray 双重指数移动平均
tema tema(data, period) ndarray 三重指数移动平均
kama kama(data, period) ndarray Kaufman 自适应移动平均
t3 t3(data, period=5, vfactor=0.7) ndarray Tillson T3 移动平均
trima trima(data, period) ndarray 三角移动平均
midpoint midpoint(data, period) ndarray 周期内中点值
midprice midprice(high, low, period) ndarray 周期内最高/最低均价
sar sar(high, low, acceleration=0.02, maximum=0.2) ndarray 抛物线 SAR
hull_ma hull_ma(data, period) ndarray Hull 移动平均
donchian donchian(high, low, period) (upper, middle, lower) 唐奇安通道
choppiness_index choppiness_index(high, low, close, period=14) ndarray 混沌指标 (0=趋势, 100=震荡)
chandelier_exit chandelier_exit(high, low, close, period=22, multiplier=3.0) (long_exit, short_exit) 吊灯止损 (ATR 追踪)
ichimoku ichimoku(high, low, close, tenkan=9, kijun=26, senkou_b=52, displacement=26) (tenkan, kijun, senkou_a, senkou_b, chikou) 一目均衡表
pivot_points pivot_points(high, low, close, method="classic") (pivot, r1, s1, r2, s2) 枢轴点 (classic/fibonacci/camarilla)

动量类 (14 个)

函数 签名 返回 说明
cci cci(high, low, close, period) ndarray 商品通道指数
willr willr(high, low, close, period) ndarray 威廉指标 (-100~0)
roc roc(data, period) ndarray 变化率
mom mom(data, period) ndarray 动量
cmo cmo(data, period) ndarray 钱德动量振荡器
trix trix(data, period) ndarray 三重指数平滑变化率
stochrsi stochrsi(data, timeperiod=14, fastk_period=5, fastd_period=3) (fastk, fastd) 随机 RSI (0~100)
aroon aroon(high, low, period) (up, down) Aroon 上升/下降 (0~100)
aroonosc aroonosc(high, low, period) ndarray Aroon 振荡器 (-100~100)
bop bop(open, high, low, close) ndarray 力量平衡 (-1~1)
ultosc ultosc(high, low, close, period1=7, period2=14, period3=28) ndarray 终极振荡器 (0~100)
ppo ppo(data, fastperiod=12, slowperiod=26, signalperiod=9) (line, signal, hist) 百分比价格振荡器
apo apo(data, fastperiod=12, slowperiod=26) ndarray 绝对价格振荡器
adx_all adx_all(high, low, close, period) (adx, +di, -di) ADX + DI+ + DI-

波动率类 (5 个)

函数 签名 返回 说明
natr natr(high, low, close, period) ndarray 归一化 ATR (%)
trange trange(high, low, close) ndarray 真实波幅
stddev stddev(data, period, nbdev=1.0) ndarray 标准差
var var(data, period, nbdev=1.0) ndarray 方差
atr atr(high, low, close, period) ndarray 平均真实波幅 (原版)

强度类 (3 个)

函数 签名 返回 说明
adx adx(high, low, close, period) ndarray ADX (0~100) (原版)
plus_di plus_di(high, low, close, period) ndarray +DI 方向指标
minus_di minus_di(high, low, close, period) ndarray -DI 方向指标
adxr adxr(high, low, close, period) ndarray ADX 评级

成交量类 (5 个)

函数 签名 返回 说明
ad ad(high, low, close, volume) ndarray 累积/派发线
adosc adosc(high, low, close, volume, fastperiod=3, slowperiod=10) ndarray 累积/派发振荡器
obv obv(close, volume) ndarray 能量潮
mfi mfi(high, low, close, volume, period) ndarray 资金流量指数 (0~100)
vwma vwma(data, volume, period=20) ndarray 成交量加权移动平均

价格变换类 (4 个)

函数 签名 返回 说明
typprice typprice(high, low, close) ndarray 典型价格 (H+L+C)/3
medprice medprice(high, low) ndarray 中间价格 (H+L)/2
avgprice avgprice(open, high, low, close) ndarray 平均价格 (O+H+L+C)/4
wclprice wclprice(high, low, close) ndarray 加权收盘价 (H+L+C*2)/4

统计类 (7 个)

函数 签名 返回 说明
linearreg linearreg(data, period) ndarray 线性回归
linearreg_slope linearreg_slope(data, period) ndarray 线性回归斜率
linearreg_angle linearreg_angle(data, period) ndarray 线性回归角度
linearreg_intercept linearreg_intercept(data, period) ndarray 线性回归截距
tsf tsf(data, period) ndarray 时间序列预测
beta beta(data0, data1, period) ndarray Beta 系数
correl correl(data0, data1, period) ndarray 相关系数

Hilbert 变换 (6 个)

基于希尔伯特变换的周期分析工具(需要至少 32 根 K 线):

函数 签名 返回 说明
ht_trendline ht_trendline(data) ndarray 希尔伯特瞬时趋势线
ht_dcperiod ht_dcperiod(data) ndarray 主导周期周期
ht_dcphase ht_dcphase(data) ndarray 主导周期相位(度)
ht_phasor ht_phasor(data) (in_phase, quadrature) 相量分量
ht_sine ht_sine(data) (sine, lead_sine) 正弦波(含超前信号)
ht_trendmode ht_trendmode(data) ndarray[i32] 趋势/周期模式 (1=趋势, 0=周期)

市场状态检测 (4 个)

用于判断当前市场处于趋势或震荡状态,以及检测结构性突变:

函数 签名 返回 说明
regime_adx regime_adx(adx, threshold=25.0) ndarray[i8] 基于 ADX 的趋势/震荡标签 (1=趋势, 0=震荡, -1=预热)
regime_combined regime_combined(adx, atr, close, adx_threshold=25.0, atr_pct_threshold=2.0) ndarray[i8] ADX+ATR 组合判断
detect_breaks_cusum detect_breaks_cusum(data, window, threshold, slack) ndarray[i8] CUSUM 结构性突变检测 (1=突变点)
rolling_variance_break rolling_variance_break(data, short_window, long_window, threshold) ndarray[i8] 滚动方差比突变检测 (1=突变点)

投资组合工具 (6 个)

跨序列分析工具,用于配对交易、风险管理、相对强度计算:

函数 签名 返回 说明
rolling_beta rolling_beta(asset, benchmark, window) ndarray 滚动 Beta 系数
drawdown_series drawdown_series(equity) (dd_series, max_dd) 回撤序列 + 最大回撤
zscore_series zscore_series(data, window) ndarray 滚动 Z-Score
relative_strength relative_strength(asset_returns, benchmark_returns) ndarray 相对强度 (excess return 风格)
spread spread(a, b, hedge) ndarray 价差序列 (a - hedge*b)
ratio ratio(a, b) ndarray 比率序列 (a/b)

Tick 微结构函数 (8 个)

函数 签名 返回 说明
tick_spread_pct tick_spread_pct(bid, ask) ndarray 每 Tick 买卖价差百分比
buy_sell_imbalance_delta buy_sell_imbalance_delta(buy_cum, sell_cum) ndarray 每 Tick 买卖失衡
return_window return_window(timestamps_ns, ltp, window_seconds=60.0) ndarray 时间窗口回看收益率
realized_vol_rolling realized_vol_rolling(timestamps_ns, ltp, window_seconds=300.0) ndarray 滚动已实现波动率
oi_position_pct oi_position_pct(oi, oi_day_high, oi_day_low) ndarray OI 位置百分比 [0, 100]
tick_velocity tick_velocity(timestamps_ns, window_seconds=60.0) ndarray Tick 速度 (ticks/min)
compute_tick_entry_signals compute_tick_entry_signals(spread_pct, bsi_delta, return_1m, ...) ndarray[bool] Tick 入场信号
compute_tick_exit_signals compute_tick_exit_signals(timestamps_ns, eod_exit_time_ns=0) ndarray[bool] Tick 出场信号

用法示例

import raptorbt
import numpy as np

close = np.array([...], dtype=np.float64)
high = np.array([...], dtype=np.float64)
low = np.array([...], dtype=np.float64)
open_ = np.array([...], dtype=np.float64)
volume = np.array([...], dtype=np.float64)

# 趋势
sma20 = raptorbt.sma(close, 20)
hull_ma = raptorbt.hull_ma(close, 14)
donchian_upper, donchian_middle, donchian_lower = raptorbt.donchian(high, low, 20)
ichimoku = raptorbt.ichimoku(high, low, close)

# 动量
rsi14 = raptorbt.rsi(close, 14)
macd_line, macd_signal, macd_hist = raptorbt.macd(close, 12, 26, 9)
cci20 = raptorbt.cci(high, low, close, 20)
ppo_line, ppo_signal, ppo_hist = raptorbt.ppo(close)

# 波动率
atr14 = raptorbt.atr(high, low, close, 14)
natr14 = raptorbt.natr(high, low, close, 14)
bb_upper, bb_middle, bb_lower = raptorbt.bollinger_bands(close, 20, 2.0)

# 成交量
ad_line = raptorbt.ad(high, low, close, volume)
mfi14 = raptorbt.mfi(high, low, close, volume, 14)

# Hilbert
ht_trendline = raptorbt.ht_trendline(close)
sine, lead_sine = raptorbt.ht_sine(close)

# 市场状态
adx_vals = raptorbt.adx(high, low, close, 14)
regime = raptorbt.regime_adx(adx_vals, threshold=25.0)

# 投资组合
rolling_beta = raptorbt.rolling_beta(close, benchmark, 20)
dd_series, max_dd = raptorbt.drawdown_series(equity_curve)

策略类型

1. 单标的回测

config = raptorbt.PyBacktestConfig(initial_capital=100000, fees=0.001, slippage=0.0005)
config.set_fixed_stop(0.02)      # 2% 止损
config.set_fixed_target(0.04)    # 4% 止盈

result = raptorbt.run_single_backtest(
    timestamps=timestamps, open=open, high=high, low=low, close=close, volume=volume,
    entries=entries, exits=exits, direction=1, weight=1.0, symbol="AAPL", config=config,
    instrument_config=raptorbt.PyInstrumentConfig(lot_size=1.0),  # 可选
)

2. 篮子回测

多标的同步信号交易:

instruments = [
    (ts, o1, h1, l1, c1, v1, ent1, ext1, 1, 0.33, "AAPL"),
    (ts, o2, h2, l2, c2, v2, ent2, ext2, 1, 0.33, "GOOGL"),
    (ts, o3, h3, l3, c3, v3, ent3, ext3, 1, 0.34, "MSFT"),
]

result = raptorbt.run_basket_backtest(
    instruments=instruments,
    config=config,
    sync_mode="all",  # "all" | "any" | "majority" | "master"
)

3. 配对交易

做多一个标的,做空另一个:

result = raptorbt.run_pairs_backtest(
    leg1_timestamps=ts, leg1_open=o1, leg1_high=h1, leg1_low=l1, leg1_close=c1, leg1_volume=v1,
    leg2_timestamps=ts, leg2_open=o2, leg2_high=h2, leg2_low=l2, leg2_close=c2, leg2_volume=v2,
    entries=entries, exits=exits, direction=1, symbol="PAIR", config=config,
    hedge_ratio=1.5,       # 空头 1.5 倍
    dynamic_hedge=False,
)

4. 期权回测

result = raptorbt.run_options_backtest(
    timestamps=ts, open=o, high=h, low=l, close=c, volume=v,
    option_prices=option_premiums, entries=entries, exits=exits,
    direction=1, symbol="NIFTY_CE", config=config,
    option_type="call",          # "call" | "put"
    strike_selection="atm",      # "atm" | "otm1" | "otm2" | "itm1" | "itm2"
    size_type="percent",         # "percent" | "contracts" | "notional" | "risk"
    size_value=0.1,
    lot_size=50,
)

5. 多策略回测

同一标的上组合多个策略:

strategies = [
    (entries_sma, exits_sma, 1, 0.4, "SMA_Cross"),
    (entries_rsi, exits_rsi, 1, 0.35, "RSI_MeanRev"),
    (entries_bb, exits_bb, 1, 0.25, "BB_Break"),
]

result = raptorbt.run_multi_backtest(
    timestamps=ts, open=o, high=h, low=l, close=c, volume=v,
    strategies=strategies,
    config=config,
    combine_mode="any",  # "any" | "all" | "majority" | "weighted" | "independent"
)

6. 批量价差回测

Rayon 并行执行多个价差回测,GIL 释放:

items = [
    raptorbt.PyBatchSpreadItem(
        strategy_id="straddle_24000",
        legs_premiums=[call_premiums, put_premiums],
        leg_configs=[("CE", 24000.0, -1, 50), ("PE", 24000.0, -1, 50)],
        entries=entries, exits=exits,
        spread_type="straddle",
        max_loss=5000.0, target_profit=3000.0,
    ),
]

results = raptorbt.batch_spread_backtest(
    timestamps=ts, underlying_close=close,
    items=items, config=config,
)

for sid, result in results:
    print(f"{sid}: {result.metrics.total_return_pct:.2f}%")

7. Tick 级回测

全 Tick 分辨率模拟,无 K 线重采样:

result = raptorbt.run_tick_backtest(
    timestamps=timestamps_ns,     # int64 纳秒
    ltp=ltp_arr, bid=bid_arr, ask=ask_arr,
    buy_qty_delta=buy_delta, sell_qty_delta=sell_delta,
    oi=oi_arr,
    entries=entry_signals, exits=exit_signals,
    symbol="TICK",
    initial_capital=100000.0, fees=0.001, slippage=0.0005,
    stop_loss_pct=5.0, take_profit_pct=10.0,
    max_hold_seconds=1800, entry_cooldown_ticks=10, max_trades=50,
)

Zerodha 数据注意total_buy_qty / total_sell_qty 是累计值,需先转换: buy_delta = np.diff(buy_cum, prepend=0).clip(min=0)


止损与止盈

固定百分比

config = raptorbt.PyBacktestConfig(initial_capital=100000, fees=0.001)
config.set_fixed_stop(0.02)    # 2% 止损
config.set_fixed_target(0.04)  # 4% 止盈

ATR 动态止损

config.set_atr_stop(multiplier=2.0, period=14)    # 2倍 ATR 止损
config.set_atr_target(multiplier=3.0, period=14)  # 3倍 ATR 止盈

追踪止损

config.set_trailing_stop(0.02)  # 2% 追踪止损

风险回报比止盈

config.set_risk_reward_target(ratio=2.0)  # 2:1 风险回报比

出场原因

含义
Signal 策略信号出场
StopLoss 触发止损
TakeProfit 触发止盈
TrailingStop 触发追踪止损
EndOfData 数据结束
Settlement 期权结算
TimeExit 超时出场(Tick 级)

蒙特卡洛组合模拟

result = raptorbt.simulate_portfolio_mc(
    returns=[ret1, ret2],           # 各策略/资产的历史日收益率数组
    weights=np.array([0.6, 0.4]),   # 组合权重(和为 1
    correlation_matrix=[            # N×N 相关系数矩阵
        np.array([1.0, 0.3]),
        np.array([0.3, 1.0]),
    ],
    initial_value=100000.0,
    n_simulations=10000,            # 模拟路径数
    horizon_days=252,               # 前瞻天数
    seed=42,                        # 随机种子
)

print(f"预期收益: {result['expected_return']:.2f}%")
print(f"亏损概率: {result['probability_of_loss']:.2%}")
print(f"VaR (95%): {result['var_95']:.2f}%")
print(f"CVaR (95%): {result['cvar_95']:.2f}%")

回测结果与指标

PyBacktestResult

result.metrics              # PyBacktestMetrics 对象
result.equity_curve()       # 权益曲线 ndarray
result.drawdown_curve()     # 回撤曲线 ndarray
result.returns()            # 收益率序列 ndarray
result.trades()             # 交易列表 List[PyTrade]

PyBacktestMetrics33 个字段)

核心绩效total_return_pctsharpe_ratiosortino_ratiocalmar_ratioomega_ratio

回撤max_drawdown_pctmax_drawdown_duration

交易统计total_tradestotal_closed_tradestotal_open_tradeswinning_tradeslosing_tradeswin_rate_pct

交易绩效profit_factorexpectancysqnavg_trade_return_pctavg_win_pctavg_loss_pctbest_trade_pctworst_trade_pct

持仓avg_holding_periodavg_winning_durationavg_losing_duration

连战max_consecutive_winsmax_consecutive_losses

其他start_valueend_valuetotal_fees_paidopen_trade_pnlexposure_pctpayoff_ratiorecovery_factor

m = result.metrics
stats = m.to_dict()  # 24 个常用指标的字典(带中文友好标签)

PyTrade

for trade in result.trades():
    trade.id              # 交易 ID
    trade.symbol          # 标的
    trade.entry_idx       # 入场 bar 索引
    trade.exit_idx        # 出场 bar 索引
    trade.entry_price     # 入场价
    trade.exit_price      # 出场价
    trade.size            # 仓位大小
    trade.direction       # 1=多, -1=空
    trade.pnl             # 盈亏金额
    trade.return_pct      # 收益率 (%)
    trade.fees            # 手续费
    trade.exit_reason     # 出场原因

API 参考

PyBacktestConfig

config = raptorbt.PyBacktestConfig(
    initial_capital=100000.0,   # 初始资金
    fees=0.001,                 # 手续费率
    slippage=0.0,               # 滑点
    upon_bar_close=True,        # K 线收盘后执行(防止前视偏差)
)

# 止损方法
config.set_fixed_stop(percent: float)
config.set_atr_stop(multiplier: float, period: int)
config.set_trailing_stop(percent: float)

# 止盈方法
config.set_fixed_target(percent: float)
config.set_atr_target(multiplier: float, period: int)
config.set_risk_reward_target(ratio: float)

PyInstrumentConfig

每标的配置:

inst = raptorbt.PyInstrumentConfig(
    lot_size=1.0,               # 最小交易单位
    alloted_capital=50000.0,    # 分配资金(可选)
    existing_qty=None,          # 现有持仓(预留)
    avg_price=None,             # 现有均价(预留)
)

# 可选:每标的止损/止盈覆盖
inst.set_fixed_stop(0.02)
inst.set_trailing_stop(0.03)

PyBatchSpreadItem

item = raptorbt.PyBatchSpreadItem(
    strategy_id="straddle_24000",
    legs_premiums=[call_premiums, put_premiums],
    leg_configs=[("CE", 24000.0, -1, 50), ("PE", 24000.0, -1, 50)],
    entries=entries, exits=exits, spread_type="straddle",
    max_loss=5000.0, target_profit=3000.0,
)

simulate_portfolio_mc

result = raptorbt.simulate_portfolio_mc(
    returns=List[np.ndarray],               # 各资产日收益率 (N 个数组)
    weights=np.ndarray,                     # 组合权重 (长度 N, 和为 1)
    correlation_matrix=List[np.ndarray],    # N×N 相关系数矩阵
    initial_value=float,                    # 初始组合价值
    n_simulations=int=10000,               # 模拟路径数
    horizon_days=int=252,                   # 前瞻天数
    seed=int=42,                            # 随机种子
) -> dict

返回字典包含:expected_returnprobability_of_lossvar_95cvar_95percentile_pathsfinal_values


从源码构建

大多数用户应使用 pip install raptorbt。要自行构建,需要 Rust 1.70+、Python 3.10+ 和 maturin

cd raptorbt
$env:CARGO = "C:\Users\Administrator\.cargo\bin\cargo.exe"
maturin develop --release     # 开发安装到当前虚拟环境
cargo test                     # 运行 Rust 测试套件

注意:如果在 Windows 上遇到「拒绝访问 (os error 5)」错误,需要设置 CARGO 环境变量指向 cargo.exe 可执行文件(而非目录)。参见 使用手册 - 常见编译问题

前置依赖

依赖 版本 说明
Rust toolchain 1.70+ cargorustc(从 https://rustup.rs 安装)
Python 3.10+ 与编译时 Python 版本一致
maturin latest pip install maturinRust → Python 扩展构建工具
vendor/ferro-ta-main/ 已随项目提交,提供 ferro_ta_core crate(80+ 指标),无需联网拉取

💡 可移植性vendor/ferro-ta-main/Cargo.tomlferro_ta_core 的 path 源码依赖,换电脑或部署新环境时 clone 项目即可编译,无需担心外部 crate 源缺失

构建并安装到全局

# 构建 whl (会自动编译 vendor/ferro-ta-main/ 下的 ferro_ta_core)
maturin build --release
# 产物: target/wheels/raptorbt-0.4.1-cp312-cp312-win_amd64.whl

# 全局 pip 安装
pip install --force-reinstall target\wheels\raptorbt-0.4.1-cp312-cp312-win_amd64.whl

开发模式(虚拟环境)

# 在已激活的虚拟环境中编译,直接安装到 python/raptorbt/_raptorbt.*.pyd
maturin develop --release

⚠️ maturin develop 需要在已激活的虚拟环境(venv/conda)中运行,否则会报 "Couldn't find a virtualenv or conda environment"。若需全局安装,用 maturin build + pip install 方式。

验证测试

一个带种子的冒烟测试——运行两次,结果完全一致:

import numpy as np
import raptorbt

np.random.seed(42)
n = 500
close = np.cumprod(1 + np.random.randn(n) * 0.02) * 100
entries = np.zeros(n, dtype=bool); entries[::20] = True
exits = np.zeros(n, dtype=bool);  exits[10::20] = True

config = raptorbt.PyBacktestConfig(initial_capital=100000, fees=0.001)
result = raptorbt.run_single_backtest(
    timestamps=np.arange(n, dtype=np.int64),
    open=close, high=close, low=close, close=close, volume=np.ones(n),
    entries=entries, exits=exits, direction=1, weight=1.0, symbol="TEST",
    config=config,
)
print(f"总收益率: {result.metrics.total_return_pct:.4f}%")  # -30.6192%
print(f"夏普比率: {result.metrics.sharpe_ratio:.4f}")       # -0.9086

版本历史

v0.4.1

  • 新增 68 个扩展指标:集成 ferro-ta 指标库
    • P0 扩展:VWMA、Donchian、Choppiness Index、Hull MA、Chandelier Exit、Ichimoku、Pivot Points
    • Hilbert 变换:HT Trendline、DCPeriod、DCPhase、Phasor、Sine、TrendMode
    • 市场状态检测:Regime ADX、Regime Combined、CUSUM Breaks、Variance Ratio Breaks
    • 投资组合工具:Rolling Beta、Drawdown Series、Z-Score Series、Relative Strength、Spread、Ratio
  • 指标总数从 12 扩展到 80+

v0.4.0

  • Tick 级回测:全 Tick 分辨率,无需 K 线重采样
    • TickData 结构:timestampsltpbidaskbuy_qty_deltasell_qty_deltaoi
    • ExitReason::TimeExit:最大持仓时间超时退出
    • run_tick_backtestTick 原生模拟引擎
    • compute_tick_entry_signals:从特征数组计算入场信号
    • compute_tick_exit_signals:基于时间的出场信号
    • tick_spread_pctbuy_sell_imbalance_deltareturn_windowrealized_vol_rollingoi_position_pcttick_velocity
  • 公开 compute_backtest_metrics 函数

v0.3.4

  • 单腿期权价差:LongCallLongPutNakedCallNakedPut
  • ExitReason::Settlement:期权到期结算退出
  • leg_expiry_timestamps:每条腿的到期时间追踪

v0.3.3

  • batch_spread_backtest:通过 Rayon 并行运行多个价差回测
  • PyBatchSpreadItem:批量价差回测项定义
  • GIL 释放,最大 Python 并发

v0.3.2

  • payoff_ratio 指标:平均盈利交易收益 / 平均亏损交易收益(绝对值)
  • recovery_factor 指标:净利润 / 最大回撤(绝对值)

v0.3.1

  • 蒙特卡洛组合模拟(simulate_portfolio_mc
  • 几何布朗运动 + Cholesky 分解,Rayon 并行

v0.3.0

  • PyInstrumentConfig:每标的的配置(lot_size、分配资金、止损/止盈覆盖)
  • 仓位大小正确取整到 lot_size 的倍数

v0.2.2

  • 导出 run_spread_backtestrolling_minrolling_max

v0.2.1

  • 添加 rolling_minrolling_maxLLV / HHV

v0.2.0

  • 多腿价差回测(straddle、strangle、vertical、iron condor、iron butterfly、butterfly、calendar、diagonal
  • 会话跟踪器(NSE 股票、MCX 商品、CDS 货币)
  • StreamingMetrics:权益/回撤追踪、交易记录、finalize()

v0.1.0

  • 初始版本
  • 5 种策略类型、30+ 绩效指标、10 个技术指标
  • 止损管理:固定、ATR、追踪
  • 止盈管理:固定、ATR、风险回报
  • PyO3 Python 绑定

许可证

MIT License - 详见 LICENSE

S
Description
No description provided
Readme 1.4 MiB
Languages
Rust 74.6%
Python 25.4%