主页
欢迎来到 backtrader!
一个功能丰富的 Python 框架,用于回测和交易
backtrader允许您专注于编写可重复使用的交易策略、指标和分析器,而不必花时间构建基础设施。
使用、修改、审计和分享它。秘诀在于调味料,而你就是厨师。这只是工具。
查看快速入门、详尽的文档、博客中的深入主题和想法。
社区(已禁用)
它被滥用了。可能会在未来回来。与此同时,可以尝试例如:stackoverflow “backtrader”。
你好,算法交易!
查看一个简单移动平均线交叉策略的快速示例(仅限多头)
特性
查看backtrader提供的所有好东西的快速概述。
特性
实时交易
与 Interactive Brokers、Oanda v1、VisualChart 以及外部第三方经纪人(alpaca、Oanda v2、ccxt,…)一起使用
基于0
的索引
- 在数组中使用
0
表示当前时刻,以解决访问数组值时的前瞻性偏差 - 使用
-1
,-2
(即:负值)表示最后时刻,以与 Python 的定义保持同步 - 任何正索引表示未来(在
event-only
模式下测试代码,会出错)
事件和矢量化
- 交易逻辑和经纪人始终基于事件运行
- 如果可能,指标的计算是矢量化的(源数据可以预加载)
一切都可以在仅事件模式下运行,无需预加载数据,就像实时运行一样
数据源(包括实时数据)
- 内置支持多种数据源:CSV、数据库数据源、YahooFinance、交互经纪人、Oanda v1,…
- 可以同时运行任意数量的数据源(受内存限制,显然)
警告
注意幸存者偏差! - 可以混合和运行多个时间框架
- 集成重采样和重播功能
内置电池的经纪人
- 订单类型:
Market
、Limit
、Stop
、StopLimit
、StopTrail
、StopTrailLimit
、OCO
、Bracket
、MarketOnClose
- 多空卖出
- 未来类工具的持续现金调整
- 用户定义的佣金方案和信用利息
- 基金模式
- 成交量填充策略
- 自定义滑点
策略 - 交易逻辑
- 在操作之前自动计算热身期
- 多个策略(针对同一经纪人)可以并行运行
- 多种订单生成方法(
buy/sell
、order_target_xxx
、自动信号) - 事件通知:传入数据、数据源提供者、订单、交易、定时器
指标
超过 122 种指标,常见的指标都在其中
- 许多移动平均线(
SMA
、EMA
,…)、经典指标(MACD
、Stochastic
、RSI
,…)和其他指标 ta-lib
集成
性能分析器
几个内置的性能分析器(TimeReturns
、TradeAnalyzer
、SharpeRatio
、VWR
、SQN
,…)
绘图(额外)
使用单个命令进行自动化(可定制)绘图
注意
为了使其工作,必须安装matplotlib
大小调整器
定义并插入智能自动化的押注策略
观察者
代理可以被绘制,并且可以观察系统中的一切(通常用于绘制统计数据)
杂项
- 定时器用于随时间重复的操作
- 交易日历
- 时区支持
纯 Python
使用最强大且易于使用的编程语言之一。无需外部库。
- 使用面向对象的方法轻松地将拼图的各个部分拼合在一起
- 操作符在可能的情况下进行重载,以提供自然语言构造,例如:
av_diff = bt.ind.SMA(period=30) - bt.ind.SMA(period=15)`
- 其中
av_diff
将包含30
和15
周期的简单移动平均线的差值 - 对于语言结构,不能被覆盖,比如
and
,or
,if
,提供了等效的函数以确保没有功能丢失,例如
av_and = bt.And(av_diff > 0, self.data.close < bt.ind.SMA(period=30))`
你好,算法交易!
一个经典的简单移动平均线交叉策略,可以轻松地以不同方式实现。下面呈现的三个片段的结果和图表是相同的。
from datetime import datetime import backtrader as bt # Create a subclass of Strategy to define the indicators and logic class SmaCross(bt.Strategy): # list of parameters which are configurable for the strategy params = dict( pfast=10, # period for the fast moving average pslow=30 # period for the slow moving average ) def __init__(self): sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal def next(self): if not self.position: # not in the market if self.crossover > 0: # if fast crosses slow to the upside self.buy() # enter long elif self.crossover < 0: # in the market & cross to the downside self.close() # close long position cerebro = bt.Cerebro() # create a "Cerebro" engine instance # Create a data feed data = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) cerebro.adddata(data) # Add the data feed cerebro.addstrategy(SmaCross) # Add the trading strategy cerebro.run() # run it all cerebro.plot() # and plot it with a single command
from datetime import datetime import backtrader as bt # Create a subclass of Strategy to define the indicators and logic class SmaCross(bt.Strategy): # list of parameters which are configurable for the strategy params = dict( pfast=10, # period for the fast moving average pslow=30 # period for the slow moving average ) def __init__(self): sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal def next(self): if not self.position: # not in the market if self.crossover > 0: # if fast crosses slow to the upside self.order_target_size(target=1) # enter long elif self.crossover < 0: # in the market & cross to the downside self.order_target_size(target=0) # close long position cerebro = bt.Cerebro() # create a "Cerebro" engine instance # Create a data feed data = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) cerebro.adddata(data) # Add the data feed cerebro.addstrategy(SmaCross) # Add the trading strategy cerebro.run() # run it all cerebro.plot() # and plot it with a single command
from datetime import datetime import backtrader as bt # Create a subclass of SignaStrategy to define the indicators and signals class SmaCross(bt.SignalStrategy): # list of parameters which are configurable for the strategy params = dict( pfast=10, # period for the fast moving average pslow=30 # period for the slow moving average ) def __init__(self): sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal self.signal_add(bt.SIGNAL_LONG, crossover) # use it as LONG signal cerebro = bt.Cerebro() # create a "Cerebro" engine instance # Create a data feed data = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) cerebro.adddata(data) # Add the data feed cerebro.addstrategy(SmaCross) # Add the trading strategy cerebro.run() # run it all cerebro.plot() # and plot it with a single command
参考资料
谁在使用它
请参阅后面的章节了解使用情况的参考资料。
旧网站参考资料
原始网站说明backtrader至少被以下机构使用:
- 2 家 Eurostoxx50 银行
- 6 家量化交易公司
那是很久以前的事了,作者已经知道更多了,包括其他类型的交易公司,如“能源交易”等行业。
为什么没有提供名称?
- 我从未问过
- 他们从未问过
那你能支撑这些说法吗?
在Reddit - [Question] How popular is Backtrader on this sub?中已经问过(并得到了回答)。
让我们引用那个帖子的回答。
引用
不,没有清单。这实际上已经过时了:银行的数量仍然是2
(可能还有更多,但我不知道),但有超过 6 家公司在内部使用它,包括在能源市场工作的公司,因为compensation
功能允许购买和销售不同的资产来相互补偿(这可能在zipline
中不可用),从而允许使用现货和期货价格进行建模(这是能源市场的一个特点,以避免将实际商品交付给您)
这里的关键是必须定义使用情况。例如,我可以引用一位来自其中一家银行的人告诉我的话:“我们使用 backtrader 快速原型设计我们的想法并对其进行回测。如果它们被证明符合我们的预期,并经过进一步完善,它们将被重写为 Java 并放入我们的生产系统中”。
实际上,这是一个量化公司(我亲自访问过的)使用的相同方案:在backtrader中进行原型设计,然后在Java中进行生产。
正如您可以想象的那样,我不追踪那些使用backtrader的人的生活,所以也许一些银行和公司决定不再使用backtrader。
我也猜测一些银行和量化公司使用zipline
遵循相同的方案。
领英 - 文章/帖子
Sourabh Sisodiya - Q’s on how do we backtest
领英 - 档案
一份将backtrader列入其个人资料的人员名单。
Ahmed Kamel Taha
Alain Glücksmann
Alex Mouturat
Alexandre GAZAGNES
Álvaro Martínez Pérez
Andrey Muzykin
Bingchen Liu
Carlos Chan
Chen Bo Calvin Zhang
David McCarty
Drew Wei
Frederick (Shu) Bei
Gabriel Ghellere
Harold Liu
Isabel María Villalba Jiménez
Ilya Rozhechenko
Jason L.
Joshua Wyatt Smith, Ph.D.
Justin Wagner
Karl Vernet
Ken Huang
King Hang Terence Siu
Marcelino Franco
Max Paton
Mike S.
Neil Murphy
Piotr Yordanov
Raul Martin
Ruochen (Larry) Pan
Robert Ungvari
Serhii Ovsiienko
Shaozhen Huang
Simon Garland
Sina Pournia
Siyi Li
Tianshu Zhang
蒂姆·莱利
维亚切斯拉夫·佐托夫
温忠
邓兴建
李杨琦
伊宁·成
教育 - 论文
aCubeIT - 人工智能学院
出售一门课程,其中包括使用 backtrader 制作预测算法。
Arxiv.org - Kartikay Gupta(通讯作者),Niladri Chatterjee
布罗克大学
哥伦比亚大学
- 金融数学硕士项目
哥伦比亚大学“金融数学硕士项目”中的一些学生在简历中列出了 backtrader
伊尔汉姆学院
苏黎世联邦理工学院 - Alain Glücksmann - 硕士论文
信息技术学院计算机图形与多媒体系
布尔诺 - 捷克共和国
硕士论文
语言:捷克语
香港科技大学
泰国国家发展管理学院
NTU - 计算机科学与信息工程
国立台湾大学
大数据和深度学习的最新进展…
在第 182 页被提及为用于回测的“具体工具”
科学直达
VTAD(德国技术分析协会)
翻译:德国技术分析协会(注册)
语言:德语
伍斯特理工学院 - 数字 WPI
世界金融会议 - 2019 年第 25 届:投资
博客 - 文章
原文:博客列表
展示 backtrader 的博客列表。
Aadhunik
这是我如何在 Backtrader 中实现超级趋势指标的方法
精算数据科学
Alpha Over Beta
Analyzing Alpha
Andreas Clenow - 《追随趋势》
Angel List - Justin Wagner
Backtest Rookies(多篇文章)
CSDN - 千塘夏家子
DevTo - dennislwm
如何用 4 个 GIF 步骤 Dockerize Backtrader
EtherSchtroumpf
Finanzas.com
- 加密货币交易算法:设计一个系统
语言:西班牙语
Intrinio 博客
LinkedIn - Majid AliAkbar
领英 - Ali Kokaz
Medium - Chul Lim
语言:韩语
Medium - Dim Norin
Medium - Etienne Brunet
Medium - Sumit Ojha
Medium - Towards Data Science
Medium - ttamg
Medium - Ugur Akyol
Medium - Wen Chang
- 手写一个 AI 交易机器人
语言:中文
Medium - You Xie
我的金融市场
NTGuardian
利润加
Pythonic Finance
QuantInsti
Rankia.com
- 使用技术分析交易加密货币
语言: 西班牙语 - 使用技术分析交易加密货币
语言: 葡萄牙语
Renbuar 博客
ScienceWal
- 使用 backtrader 进行交易策略回测
语言: 印尼语
SeanGTKelly 博客
SmudlaTrader
Teddy Koker
The Startup - Roman Paolucci
The Lab - swapniljariwala
视频
使用 Python 和 GUI 项目概述 backtrader
使用 Backtrader 框架在 Python 中进行策略回测
Python Backtrader 入门指南
使用 Python3 和 GUI 项目概述 backtrader
教程:Python 中的深度强化学习算法交易
教程:如何在 Python 中对比特币交易策略进行回测
使用 Backtrader 框架进行策略回测
Python 中最佳的算法交易回测框架
Python 和 BAcktrader 的算法交易
金叉算法交易策略与 Python 和 Backtrader
评论 / 提及
4-chan
Bitcointalk
Bogleheads.org
EliteTrader
GAIN Capital
Hacker News
Ian Mobbs
Medium - Hackernoon
Medium - Sten Alferd
NetGuru
PyConUK 2017
randomactsofcartography.wordpress.com/2017/11/01/what-i-learned-at-pyconuk-2017/
www.slideshare.net/BrianTsang11/pycon-2017-preevent
Qiita
QuantLabs
Quantopian 论坛
- 比较各种 Python 实时交易平台
- 忘掉其他工具,使用backtrader!
QuantStart
Quora
- 量化交易是如何工作的?个人如何设置?以及背后的技术和逻辑是什么?
- 用 Python 学习和测试算法交易模型的最佳方式是什么?
- 作为个人进入算法交易(而不是对冲基金的雇员)的好处和坏处是什么?
- 我需要学习怎样的数学才能进行算法交易?
- 金融领域中 R/Python 的常见实际用途是什么?
- 随着算法交易的兴起,手动交易会发生什么变化?
www.quora.com/Which-is-the-best-service-provider-for-algo-trading
- 用 Python 回测交易策略的最佳库是什么?
- 数据科学/分析对量化/算法交易有用吗?
- 哪种算法交易软件最好?
Statsmage
开发者大会
(葡萄牙语)
TODOTrader
TopQuant
- “中国的 Python 量化启示者和开拓者”
- 类别:backtrader
Traders-Mag
X-trader 论坛
工作机会
Alpaca
CodeMentor
自由职业者
- Python(backtrader/zipline)和 Interactive Brokers
- 编译 Python 程序(BackTrader 和 Interactive Brokers API)并构建用户界面的网站
- Python 回测平台
- James A.的项目–2
- 金融市场交易框架
- Saira I.的项目
- Tensorflow
- 算法交易 Python 平台
- 私人项目或比赛#15215084
- 需要具有 backtrader(算法交易)知识的自由职业者
FL.ru
Guru.com
语言:俄语
浩来网络技术(上海)有限公司
语言:中文
MindPool
MQL5
PeoplerPerHour
QuantInsti
- LinkedIn 示例 ){target=_blank}
- AngelCo - 量化学习的 Python 开发者
- 智慧招聘 - Python 开发者
- 时代招聘 - Python 开发者
Shixian
- 量化回测系统
注意:中文。
Upwork
- 自由职业者列表 “backtrader”
- 加密货币交易机器人 UI
- 加密货币交易机器人 UI
- ZuluQuant
(同时也在这里:社区 - ZuluQuant - 合同职位) - BackTrader 助手。简单快速赚钱的工作
- 在 backtrader 和 python 中开发交易算法
智慧招聘
Companies
列出了列出(或已列出)backtrader 或公开使用参考存在的公司清单(专业资料、博客文章、文章等等)
注意
这并不是任何形式的认可、工作证明、官方认可(和任何其他免责声明)
注意
在“公司”下面,您将找到选择将其提供的类 Unix 发行版
Companies
Agora EAFI
来自 LinkedIn 档案和 Rankia/Finanzas.com 文章
Alpaca
Alpha Over Beta
总计
卡尔·维尔内特(Karl Vernet)的工作的一部分。
数据交易
提供算法交易服务的小商店。
Intrinio
NORGATE DATA
Quantify Capital
QuantInsti
来自博客文章、招聘启事…
StormDealers Ltd.
列在网站上
TradeFab
引言:“Backtrader Development Development of Python Backtrader scripts, including backtesting/optimization support.”
ZuluQuant
将 backtrader 列为使用的技术之一,并在社区发布了一份工作启事
发行
FreeBSD Ports
NetBSD
文档
介绍
欢迎来到backtrader文档!
该平台有两个主要目标:
- 易用性
- 回到 1
注意
基于*《功夫小子》*的规则(Mr. Miyagi制定的)而松散地制定。
运行该平台的基础知识:
- 创建一个策略
- 决定潜在的可调参数
- 实例化策略中需要的指标
- 写下进入/退出市场的逻辑
提示
或者:
- 准备一些指标作为多头/空头信号
然后
- 创建一个Cerebro引擎
- 首先:注入策略(或基于信号的策略)
- 然后:
- 加载并注入数据源(一旦创建,请使用
cerebro.adddata
) - 然后执行
cerebro.run()
- 若要视觉反馈,请使用:
cerebro.plot()
该平台高度可配置
希望您作为用户能够发现该平台既实用又有趣。
安装
要求和版本
backtrader
是自包含的,没有外部依赖项(除非你想要绘图)
基本要求是:
- Python 2.7
- Python 3.2 / 3.3 / 3.4 / 3.5
- pypy/pypy3
若需要绘图功能,还需要额外的要求:
- Matplotlib >= 1.4.1
其他版本可能也可以,但这是用于开发的版本
注意:在撰写本文时,Matplotlib 不支持 pypy/pypy3
BackTrader 中文文档(一)(2)https://developer.aliyun.com/article/1489209