Installation · Python 回测库

Backtesting.py 安装:pip install backtesting 与源码方式教程

Backtesting.py 是一个 Python 回测库,官方安装方式只有一行 pip install backtesting,但真正卡住人的通常不是这一行命令,而是「装到哪个 Python 里」「依赖版本对不对」「装完怎么确认能跑」。本页把它拆成可对照执行的检查表:安装方式对照、依赖边界、装完自检清单、报错排查表,每一步都给出真实命令与预期输出,并注明哪些结论以官方 README 与 PyPI 为准。另外提醒一句:安装只是起点,真正影响回测结论的是数据口径、手续费假设与参数区间,这三件事在下单看数字之前就要先定好。

官方:pip install backtestingPython:>= 3.9版本:0.6.6(2026-07-22,以 PyPI 为准)安装后仍需自备数据与策略代码
pip install backtesting官方安装方式
虚拟环境先隔离再安装
依赖pandas + bokeh
自检命令 + 预期输出
安装路径示意(安装 → 隔离环境 → 依赖 → 自检),基于官方 README 与 PyPI;版本与依赖约束以官方为准。
测试版本backtesting 0.6.6(PyPI 发布版)Python 版本本站实测 3.11.9;官方要求以 README / PyPI 为准最后核验2026-09-29(实验数据 2026-09-24 运行)数据来源官方 README / PyPI 与本地安装输出(不涉及行情数据)适用市场不涉及(本页只验证环境)可直接复现是(pip 与自检命令可直接复现)含交易成本不涉及(本页不产出绩效数字)样本外验证不涉及
Options

Backtesting.py 的安装方式怎么选?几条路径对照

官方 README 与 PyPI 给出的安装入口是 pip;下表把常见安装路径放在一起对比,重点看「什么时候用」和「容易踩什么」。

安装方式命令适用场景注意点
pip 基础安装pip install backtesting绝大多数使用场景,官方推荐入口装到当前解释器下;多环境机器上先确认 python 与 pip 是否同源
升级到最新发布版pip install -U backtesting已装过旧版本,想跟官方发布版升级后重跑一次导入自检;依赖版本随发布变化,以 PyPI 页面标注为准
虚拟环境内安装python -m venv .venv 激活后再 pip一台机器上跑多个项目、依赖易冲突务必先激活环境再安装,否则会装到全局解释器
指定版本安装pip install backtesting==<版本号>复现某次回测结果、对照旧代码版本号只能取自 PyPI 发布列表,本页不背书任何具体号段
从 GitHub 安装开发主线pip install git+https://github.com/kernc/backtesting.py想提前用未发布改动、自己提交补丁主分支行为可能变化,回测结论要记录所用提交;生产环境请回到发布版
源码目录直接引用克隆仓库后把目录放到项目路径需要边读源码边改的实验不走 pip 时依赖要自己装齐,且容易与已安装版本互相覆盖
加装第三方指标库按需另装(如 talib)要在策略里用现成技术指标该项目与指标库解耦,是否可用取决于该库自身与你的环境
内网/镜像源安装pip 加 -i 指定镜像源公司内网或下载超时镜像源同步时间不确定,装到的版本可能与官方最新不同
先确认一件事:它是回测库,安装只解决「能 import」;行情数据与策略代码需要你自己准备(数据格式与取数方式见数据页)。
Environment

Backtesting.py 的环境与依赖边界是什么?

下表把「装得对不对」的判断依据列出来:版本边界以官方声明为准,最后一列写的是不满足时你会看到什么现象。

依赖项边界作用不满足时的现象
Python官方声明 >= 3.9运行环境安装阶段直接失败并提示版本不受支持
pip随 Python 自带,建议较新版本安装入口解析依赖失败、提示找不到匹配版本
pandas运行时依赖,随包自动安装OHLCV 数据结构与计算导入或构造数据时报缺库或版本冲突
bokeh官方声明 >= 3.0.0交互式图表渲染回测能跑完但 plot() 报错或出不了图
第三方指标库(可选)按需自装现成技术指标只影响用到该库的策略,不影响回测主体
网络安装期需要下载包与依赖下载超时、连接中断,表现为安装中途失败
磁盘与内存无官方硬性数字装包空间 + 回测时数据驻留数据量大或参数扫描时进程被系统结束
边界提醒:上表版本约束取自官方仓库与 PyPI 的公开声明,具体小版本变化请以官方 README、PyPI 页面与官方文档为准;本页不替代官方安装说明。遇到与本文不一致的地方,一律以官方说明为准。若你的机器上已装过其它数据分析库,建议先在干净虚拟环境里按上表逐项确认,再决定是否升级全局依赖——升级容易,回退往往更麻烦。
Steps

分步安装与验证怎么做?五步走完

五步走完,每步都给出命令、一句话说明和可验证的预期输出;命令里的版本号与依赖解析结果会随官方发布变化,属正常。

  1. 确认解释器与 pip 来源

    先确认你即将安装到哪个 Python 里,避免装完却在另一个环境导入。

    python -V
    python -m pip -V

    预期输出:两条命令都打印出版本号,且第二条的路径与上一条指向同一套 Python(路径前缀一致即正常)。

  2. 创建并激活虚拟环境

    用 venv 隔离依赖,避免与系统或其他项目互相影响。

    python -m venv .venv
    :: Windows 激活
    .venv\Scripts\activate

    预期输出:命令行提示符前出现 (.venv);再执行 python -V 显示的仍是同一版本。

  3. 执行官方安装命令

    安装本体,pip 会自动解析 pandas 与 bokeh 依赖。

    pip install backtesting

    预期输出:末尾出现 Successfully installed backtesting-...(版本号以 PyPI 当前发布为准)。

  4. 导入自检

    确认装好的包能被子解释器导入,这是「装成功」的判据。

    python -c "import backtesting; print(backtesting.__version__)"

    预期输出:打印出版本号;若报 ModuleNotFoundError,说明装到了别的环境,回到第 1 步核对。

  5. 跑通一次最小回测

    用官方示例数据跑一次,确认依赖链路(数据 → 回测 → 出图)完整。

    from backtesting import Backtest, Strategy
    from backtesting.test import GOOG
    bt = Backtest(GOOG, Strategy, cash=10000)
    print(bt.run().head())

    预期输出:打印出绩效摘要(含区间与收益指标);若卡在出图环节,检查 bokeh 是否为 >= 3.0.0——示例调用与字段名以官方文档为准。

不需要激活环境时:CI 或脚本里可以直接用 python -m pip install backtesting 指定解释器安装,效果等同于先激活再 pip,命令细节以官方文档为准。如果你在 CI 里跑回测,建议把安装命令与解释器版本一起写进流水线说明,这样别人复现你的结论时不会先卡在环境上。
Self-check

装完怎么自检?七项逐条确认

装完别急着写策略,先按这张表逐项确认;每项都有命令、预期输出和「不通过时先查什么」,比反复重装更快定位问题。

检查项命令预期输出不通过时先查什么
解释器可用python -V打印版本号且 >= 3.9系统 PATH 里是否还有更早的 Python 抢先被调用
pip 指向同一环境python -m pip -V路径与上一条解释器一致是否用了全局 pip;改用 python -m pip 形式执行
包已安装pip show backtesting显示名称、版本与安装位置是否在虚拟环境外执行了安装命令
可被导入python -c "import backtesting"无任何报错同名目录遮蔽(项目里有同名文件夹)
关键依赖在位python -c "import pandas, bokeh; print(pandas.__version__, bokeh.__version__)"打印两个版本号,bokeh 为 >= 3.0.0是否装到了别处;是否需要 -U bokeh 升级
回测主体可运行用示例数据执行一次 Backtest(...).run()返回含绩效指标的统计对象数据列名是否为 Open/High/Low/Close/Volume
出图链路可用对同一结果执行一次 plot()生成可交互图表或输出文件bokeh 版本、浏览器环境与输出方式
环境隔离生效对比 python -V 与全局解释器路径两者路径不同,指向虚拟环境内是否忘记激活;安装与运行是否用了同一个解释器
口径说明:上表命令与字段名以官方 README 与官方文档为准;不同小版本的提示文案可能不同,只要功能正常即可,不必逐字对照。若某一步的输出与预期不符,先在干净虚拟环境里重跑一次,确认不是历史环境残留造成的干扰,再去查其它原因。
Other routes

Backtesting.py 还有哪些安装与使用路径?

除标准 pip 安装外,还有几种常见路径;选哪条取决于你是「只想用」还是「要改」,以及网络与团队的约束。

路径怎么做适合谁代价与注意点
标准 pip 安装虚拟环境内 pip install backtesting只想尽快跑通回测的研究者升级会跟随官方发布,结论要记录版本
锁定版本复现安装时指定版本号,并记录在项目说明里要与同事或历史结论对齐版本号需查 PyPI,本页不提供号段背书记录
GitHub 开发主线用上表同一 git+ 仓库地址安装主分支想用未发布改动、要给上游提补丁行为可能随时变化,不适合作为长期生产依赖
源码目录引用克隆后放入项目路径直接 import要边读源码边调试实现细节依赖需自装,且容易与已安装版本冲突
离线/内网安装先在可联网机器下载,再拷贝安装包内网环境、公司代理限制依赖需一并带走,版本一致性要自己保证
容器化运行在镜像里安装并固定依赖团队统一环境、复现历史回测镜像需自行维护;图形化出图在无界面环境下要改用输出文件

只是想验证一个策略想法

走标准 pip 安装即可:装好、备好 OHLCV 数据、写一个 Strategy 子类就能跑。若你连环境都不想维护,可以先看「免部署一句话研究」的另一条路线,但要注意它和本项目是两条独立路线,前者不能替代后者的代码级可控回测。

要在团队里复用

优先「虚拟环境 + 锁定版本 + 记录数据区间」三件套,把安装命令与版本号写进项目说明;回测结论如果要对齐,必须同时对齐代码版本、数据区间与手续费假设,否则数字没有可比性。团队协作里更常见的坑是「各人环境不同、结论看起来一样但细节不同」,所以环境说明建议连依赖清单一起留档。

要读源码或改实现

用 GitHub 安装或源码目录引用更直接,但请把改动与官方发布版分开管理:升级官方版本时先看你改过哪些文件,避免直接覆盖导致回测结论失效。若只是临时验证一个想法,也可以先在发布版上跑通,再决定要不要切到主分支。

能力边界:本项目定位是单资产回测库(不支持多资产组合与分数股交易,以官方说明为准),安装完成后仍需自备行情数据与策略逻辑;本页与本机技能路线之间没有已证实的集成关系。
Troubleshooting

Backtesting.py 安装报错怎么排查?

下表按「现象 → 可能原因 → 处理方式 → 预防」整理安装与导入阶段最常见的七类问题;报错原文与新版行为以官方文档为准。

现象可能原因处理方式预防
ModuleNotFoundError: No module named 'backtesting'未安装,或装到了另一个 Python 环境在当前解释器下用 python -m pip install backtesting 重装并复测导入安装与运行使用同一解释器,命令统一用 python -m pip
解析依赖失败或一直卡在下载网络受限、镜像源不可用换镜像源或先下载再离线安装内网机器提前准备好安装包与依赖清单
提示 Python 版本不受支持当前解释器低于官方声明的最低版本换用更高版本的解释器,或在新虚拟环境里安装建项目时先固定 Python 版本
导入时报依赖版本冲突与环境中已有的 pandas / bokeh 版本相互不兼容新建干净虚拟环境重装,先装本体再按需装其它库一个项目一个虚拟环境,不共用全局解释器
回测能跑但 plot() 报错bokeh 未安装或低于官方声明版本按 PyPI 标注的约束升级 bokeh,或先跳过出图依赖升级后跑一次出图自检
导入成了项目里的同名模块当前目录存在同名文件/文件夹,优先级高于已安装包重命名本地文件,或在项目外目录运行脚本不要用与依赖同名的文件名
升级后原有脚本报错新版行为或依赖约束变化按官方变更说明调整,必要时回退到之前版本升级前记录当前版本与关键结论,便于回退对照
Verified env

Backtesting.py 装出来应该是哪个版本?实测环境清单

本节记录的是本次实测使用的环境快照与确认命令:安装成功不等于环境可用,解释器、依赖版本、样例数据与出图环境都可能单独出问题。下表六项各给出实测值,便于你在自己的机器上逐项对照。

记录项确认命令本次实测值异常表现处置
解释器是否一致python -c "import sys; print(sys.executable)"与本机 pip 一致的 3.11.9 解释器路径与 pip 装到的解释器不是同一个统一改用 python -m pip 安装,或建独立虚拟环境
库能否导入python -c "import backtesting; print(backtesting.__version__)"0.6.6ModuleNotFoundError确认装到了当前解释器;必要时重装同版本
依赖版本区间python -c "import pandas, numpy, bokeh; print(pandas.__version__, numpy.__version__, bokeh.__version__)"2.2.3 2.4.6 3.3.0ImportError 或依赖冲突按官方元数据核对:numpy>=1.17.0、pandas!=0.25.0,>=0.25.0、bokeh!=3.0.*,!=3.2.*,>=3.0.0
Python 版本门槛python -c "import sys; print(sys.version_info >= (3, 9))"TrueFalse官方元数据要求 Requires-Python >= 3.9,低于此版本需先升级解释器
内置样例数据python -c "from backtesting.test import GOOG, SMA; print(len(GOOG), list(GOOG.columns))"2148 与 Open/High/Low/Close/VolumeImportError 或列名缺失说明装到的不是完整发行版,按官方仓库重新安装
出图环境跑一次 bt.plot() 并打开生成的 HTML图表可在浏览器打开、买卖点有标注图打不开或空白先确认浏览器环境;批量实验阶段可只保留统计结果不出图
# 一条命令跑完前五项(本次实测环境:Windows + Python 3.11.9)
python -c "import sys, backtesting, pandas, numpy, bokeh; \
print(sys.version.split()[0], backtesting.__version__, pandas.__version__, numpy.__version__, bokeh.__version__)"
# 实测输出:3.11.9 0.6.6 2.2.3 2.4.6 3.3.0
为什么自检值得单独做一遍:Backtesting.py 的报错大多不是「装错了」而是「装到了别处」或「依赖被别的东西改过」。把上面五项的输出现场记下来,后面排查策略问题时就少一个变量;版本号与依赖区间以官方 PyPI 页面和你安装当时的实际输出为准。
Version traps

Backtesting.py 装完却跑不起来,先查哪五件事?

下面六类现象来自本次实测与官方元数据,按「出现频率从高到低」排列。每条都给出确认方式与依据来源,具体报错原文以你的终端输出与官方文档为准。

现象常见原因怎么确认处置依据
用 method='sambo' 优化时报 ImportErrorsambo 不在默认依赖里,只列在 PyPI 的 test 附加项直接调 optimize(method='sambo')pip install sambo,或改用默认 method='grid'实测报错原文:ImportError: Need package 'sambo' for method='sambo'. pip install sambo
导入时报 ModuleNotFoundError包装到了另一个解释器python -c "import sys; print(sys.executable)" 与 pip 输出对比统一解释器,或建独立虚拟环境重装本次实测环境要求:安装与运行必须同一个解释器
版本冲突 / 依赖被降级与系统里已有包混装python -m pip check换干净环境重装,再对照官方依赖区间PyPI 元数据:numpy>=1.17.0、pandas!=0.25.0,>=0.25.0、bokeh!=3.0.*,!=3.2.*,>=3.0.0
下单时报 AssertionError下单数量不是整数股(例如 size=100.5)用最小脚本跑一次固定数量下单先 int() 取整,再按 100 股整手处理库断言原文:size must be a positive fraction of equity, or a positive whole number of units
官方要求与本地 Python 不匹配解释器版本低于官方门槛python --version升级到官方要求的版本区间内再装PyPI 元数据 Requires-Python >= 3.9;更换版本后请重跑上表自检
不清楚能不能商用未确认许可条款打开仓库根目录的 LICENSE 原文阅读先做许可评估再集成,网络分发场景尤其要注意仓库许可为 AGPL-3.0(PyPI License 字段同为 AGPL-3.0),本页不构成法律意见
排查顺序:先确认「解释器与库版本」(前三条),再确认「调用方式与参数」(第四条),最后才是许可与合规(第六条)。实测中最容易浪费时间的做法是:在依赖冲突的环境里反复改策略代码——那时代码并没有错。版本号、依赖区间与报错原文一律以官方仓库、PyPI 页面和你本机终端的实际输出为准。
FAQ

Backtesting.py 安装常见问题

包名到底是 backtesting 还是 backtesting.py?

PyPI 包名是 backtesting(安装命令 pip install backtesting),GitHub 仓库名才是 backtesting.py;两者指向同一项目。包名与命名规则以官方 README 与 PyPI 页面为准;搜索教程时如果看到两种写法,指的都是同一个项目,不要以为是两个库。

Backtesting.py 需要什么 Python 版本?

官方声明 Python >= 3.9,建议直接用更高版本并配合虚拟环境;具体支持范围以 PyPI 页面标注为准,不要照抄第三方教程里的旧版本号。如果团队里有人用旧版本解释器,建议在虚拟环境里各装一份、分别验证,而不是把全局环境升到最新再回头修别人的脚本。

依赖哪些库,需要自己装指标库吗?

运行时依赖 pandas 与 bokeh(官方声明 >= 3.0.0),pip 会自动解析;技术指标库是可选的,本项目与指标库解耦,用不用 talib 取决于你的策略。依赖清单以官方 README 与 PyPI 为准。

Backtesting.py 能用在 A 股数据上吗?

只要能整理成带 Open/High/Low/Close/Volume 列的时间索引数据即可用于回测;取数方式(本地文件、公开接口等)与字段口径需自行确认,具体数据要求见数据页。A 股常见的复权与停牌处理没有统一默认值,属你自己的数据准备工作。建议先把「用哪一段区间、用哪种复权口径」写清楚,再去比较回测数字,否则换了口径结论就会变。

支持多资产组合和分数股吗?

官方说明其定位是单资产回测,不支持多资产组合与分数股交易,适合单标的方向性策略研究;如果你需要组合级回测,需要在别的工具里完成或自行扩展。能力边界以官方 README 为准,使用前建议先想清楚策略属于单标的还是组合级,避免做到一半才发现工具不匹配。

能在本机技能里一键安装 Backtesting.py 吗?

没有已证实的集成关系:它通过 pip 独立安装,本机技能提供的是另一条免部署的研究路线,两者互不替代。是否存在后续集成以双方官方说明为准,本页不做任何暗示。你现在能确定的是:安装与运行完全在本地 Python 环境里完成,回测结论与是否安装其它工具无关。

本页结论环境跑通只证明「能跑」,不构成任何绩效结论;版本与依赖口径不对,后面所有数字都不可比。
回测局限本页只做环境验证,未涉及行情数据、成本假设与样本外检验;依赖要求以官方 README 与 PyPI 为准。
风险提示回测只反映历史区间的表现,不代表未来收益,也不构成投资建议;换区间、换标的或换成本假设,结论都可能改变。

装好之后先做什么?跑一次回测

下一步用最小示例跑通数据 → 回测 → 出图链路,再决定是深入策略还是先看数据准备。