1.Backtrader来啦:可视化篇(重构)
2.量化投资2:基于backtrader实现完整海龟法则量化回测
3.技术分析,指标指标指标为王:详解backtrader的源码源码指标体系与扩展
4.Backtrader 简概
5.量化回测框架BackTrader11-观察器(Observers)
6.Backtrader-系列教程-01-介绍
Backtrader来啦:可视化篇(重构)
量化投资与机器学习公众号为全网读者带来的Backtrader系列,深受欢迎,指标指标我们致力于提供免费、源码源码最清晰的指标指标Bt教程。QIML官方Github已上线,源码源码chrome 视频播放源码相关数据、指标指标代码一并同步,源码源码欢迎大家关注和星标。指标指标公众号希望为国内量化投资圈贡献一份力量,源码源码影响更多人了解和学习量化投资,指标指标找到适合自己的源码源码道路。如需分享内容,指标指标欢迎在评论区留言。源码源码
今天的指标指标《可视化篇》将介绍Backtrader观测器模块observers与自带的绘图函数plot()。我们将通过修改图形样式,基于回测返回的收益序列TimeReturn,结合pyfolio和matplotlib工具,自定义可视化图形。获取完整代码+数据,见文末链接。
observers模块用于统计回测信息,并在plot()的帮助下实现可视化展示。最常用的观测器包括:
- Broker观测器:记录经纪商中各时间点的可用资金和总资产。可视化时,会同时展示cash和values曲线,若需单独展示,可分别使用Cash和Value观测器。
- BuySell观测器:记录回测过程中的买入和卖出信号。可视化时,会在价格曲线上标注买卖点。
- Trades观测器:记录回测过程中每次交易的盈亏。可视化时,会绘制盈亏点。
- TimeReturn观测器:记录回测过程中的收益序列。可视化时,会绘制收益曲线。
- DrawDown观测器:记录回测过程的回撤序列。可视化时,绘制回撤曲线。
- Benchmark观测器:记录业绩基准的收益序列,必须事先通过数据添加函数添加至大脑cerebro中。可视化时,同时绘制策略本身的收益序列和业绩基准的收益曲线。
如何添加观测器?observers通过addobserver()添加给大脑cerebro,参数obscls对应观测器类,怎么改jar源码args和kwargs对应观测器支持的设置参数。
如何读取观测器数据?观测器属于lines对象,可以通过self.stats对象在Strategy中读取数据。观测器的数据在所有指标计算完后、执行Strategy的next方法后运行并统计数据,因此读取的最新数据[0]相对与next的当前时刻晚一天。
如何自定义观测器?自定义观测器遵循继承bt.observer.Observer类,指定要统计的数据为相应的line,随着回测进行依次存入数据。作为Lines对象的Observers和Indicator类,内部都有plotinfo和plotlines属性,用于回测结束后通过cerebro.plot()方法进行可视化展示。
plot()图形绘制支持回测的三大内容:Data Feeds、Indicators和Observers。Data Feeds在回测开始前导入大脑,Indicators有的与Data Feeds一起绘制在主图上,有的以子图形式绘制,Observers通常绘制在子图上。
plot()中的参数用于系统性配置图形,如修改图形样式、主题颜色等。若需系统性修改图形样式,可以重新定义PlotScheme类,或直接在plot()中修改参数。关于主题颜色,Backtrader提供多种主题色,可通过复制源码中定义的颜色并结合tab_index进行修改。
局部绘图参数设置通过类内部的plotinfo和plotlines属性控制,plotinfo主要对图形整体布局进行设置,plotlines主要对具体line的样式进行设置。
基于收益序列进行可视化,Backtrader自带的绘图工具方便实用。此外,结合pyfolio和matplotlib,根据回测返回的分析器TimeReturn、pyfolio、matplotlib可以得到可视化图形。不同主题下绘制效果也有所不同。
关于回测结果的可视化,需求不同对应不同的可视化内容。Backtrader回测框架提供了友好的绘图接口,对于额外数据,可结合Backtrader分析器Analyzers返回的指标,选用Python绘图工具如Matplotlib、Seaborn、有机大米官网源码Plotly等进行可视化展示。
量化投资与机器学习微信公众号专注于量化投资、对冲基金、Fintech、人工智能、大数据等领域,是业内主流自媒体,拥有来自公募、私募、券商、期货、银行、保险、高校等行业W+关注者,曾荣获AMMA优秀品牌力、优秀洞察力大奖,连续4年被腾讯云+社区评选为“年度最佳作者”。公众号致力于提供专业、全面的内容,帮助读者深入学习量化投资知识和技能。
量化投资2:基于backtrader实现完整海龟法则量化回测
海龟交易法是量化交易策略的一种,其核心是跟随模型,借助唐奇安通道的突破确定交易时机。要实现完整的海龟交易,需设置四个关键要素:
1. **唐奇安上阻力线**:追踪过去N天的最高价,形成波动上限。
2. **唐奇安下支撑线**:依据过去M天的最低价计算波动下限。
3. **中心线**:计算上、下线的平均值。
4. **真实波幅**:综合每日最高价、最低价及前一日收盘价的波动范围,形成最宽幅值。
5. **计算ATR(真实波幅的移动平均)**:对真实波幅进行移动平均处理,反映短期内的市场波动性。
构建交易单位时,设定每N个波动值,相当于用户总资金的1%,以此控制每笔交易的风险与资金分配。
以下是基于backtrader库实现的海龟交易策略的回测代码概览,用于验证策略的有效性。
通过回测,可以获取策略表现的具体曲线和最终结果,包括盈利、亏损、回撤等因素的横向导航菜单源码量化分析。
回测结果显示,策略的收益虽不算显著,但强调实际意义时,需将注意力集中在策略的适用范围和效果上,而非单纯依赖收益数据。仅仅使用一只股票构建策略,并且在较小的股票池中进行测试,所得收益有限是意料之中。未来的优化方向包括:
- **扩大股票池**:至少只股票全面测试,以观察策略在更多元化市场中的表现。
- **策略评估指标**:除了收益,还需考虑其他关键指标,如风险控制、夏普比率、最大回撤等,以全面评估策略的效能与可行性。
回测结果的分析应深入考量策略的通用性、适用性,以及对市场变化的响应能力,确保策略在不同市场环境下的稳健表现。
技术分析,指标为王:详解backtrader的指标体系与扩展
原创文章第篇,专注于“个人成长与财富自由、世界运作的逻辑,AI量化投资”。
李笑来竟然撰写了一本关于微信视频号的书。书中探讨了长期价值的理念,确实,许多事情难以在短期内显现出成果,需要长时间积累,越往后复利效应越显著,而在初期甚至可能感觉不到进展。这也是许多人终身无为的根本原因。
今天继续探讨backtrader,在传统的量化投资中,需要用指标来构建量化规则,因此指标计算至关重要。
backtrader的指标
指标是基于基础数据进行“衍生”计算。基础数据包括宏观数据、基本面财务数据、基于交易时间序列的OHLCV数据以及另类数据,如港口的船只数量、商超的人数等。
这些指标可以是“已经计算”好的,比如PE/PB,反演成图 .net 源码可以直接通过PandasData引入。而像布林带、唐奇安通道这种则需要通过Indicators来“临时计算”。
指标在__init__中计算,在next中使用。Sma1、ema1、sma_ema_diff、buy_sig都是line对象,类似pandas里的series。另外,指标全称通常比较长,可以简化写为alias。
ind.SimpleMovingAverage=ind.SMA
计算指标或编写策略逻辑时,离不开算术运算、关系运算、逻辑运算、条件运算等。Bt封装的运算符针对line对象进行,返回的结果也是line。bt.And、bt.Or、bt.If、bt.All、bt.Any、bt.Max、bt.Min、bt.Sum计算返回的结果与在next()中对当前时点通过常规python运算语法返回的结果一致。
关于不同周期的指标
都是“日频”,但有些数据,如财务指标是“季度”频度。比如self.data1是月度数据,那么self.month也是月度数据。这时可以有两种做法:使用self.month[0](),或者对齐整个指标对象:self.month_ = self.month(),然后使用就一样的。推荐第二种。
在bt框架中使用talib,整合得很好,bt里叫period,而talib里通常叫timeperiod。
自定义自己的指标
内置多个指标及运算符,外加talib的扩展,仍然不够,比如RSRS指标。继承自bt.Indicator,lines中定义我们这个指标有几个line,params是参数,在init中做一次性的“向量”运算,在next中按元素计算。
小结
Backtrader的指标模块Indicator侧重于技术分析,提供了各式各样的技术指标计算函数,考虑到大家的技术指标计算习惯,还内接了TA-Lib指标库。bt的line可以自动匹配时间,对齐周期,这非常方便。
指标都是标准的bt的lines对象。
尽管这里我们说的是“技术指标”,但针对机器学习的因子计算,这里的公式依然有效。
明天可以正式进行“交易”环节了。
Backtrader 简概
Backtrader,这个年开源的Python量化回测框架,因其功能全面、灵活性高而备受青睐。它以Python为开发基础,利用pandas的高效矢量运算,提供了快速处理金融数据的能力。内置的Ta-lib金融指标库,使得策略分析更为精确。此外,Backtrader还支持可视化展示,拥有活跃的社区支持和详尽的文档资源,显著节省策略开发时间。
官方文档深入介绍了各个模块,便于用户理解和使用,可以从[1]链接获取详细信息。源码开源,开发者可以根据需求自由修改,地址在[2]。通过这个强大的工具,你可以逐步探索和掌握回测的奥秘,Backtrader堪称回测领域的神器。
如果你对Backtrader感兴趣,可以按照文档的模块划分进行学习,逐步掌握其使用方法。如果你正在寻找一个既强大又灵活的量化工具,Backtrader无疑是一个值得考虑的选择。
发布于年9月日::
mdnice发布
量化回测框架BackTrader-观察器(Observers)
什么是 Observers
Observers 是一种用于在回测过程中记录和统计数据的工具,便于进行深入的历史分析。作为一个独立的类,它位于backtrader.observers。默认情况下,Cerebro 在创建时会自动生成 3 个 Observers。这些 Observers 可以通过 Cerebro 的参数进行启用或禁用,其中 stdstats 的默认值是 True。
observers 会自动在图表上绘制,在前几讲的输出图表示例中,其实都绘制了这 3 个默认 Observers。
下面是一个与第一讲示例相同的例子,唯一的不同之处在于禁用了默认的 3 个 Observers,可以比较一下两者的输出图像。
原图:
访问 Observers
当 observer 被加载到 cerebro 后,在策略的 next 调用中可以访问到 observer 的值,例如:
上面是加载 observer,下面是访问。observers 被保存在 stats 对象下。observer 的数据类型也是 line,因此访问方式与其他 lines 相同。
开发 Observers
observer 的开发方式与指标类似。
创建步骤:
Observer 运行时序:
以下是一个官方的例子,它会记录创建的买单和过期的买单以及它们的价格。
保存统计信息
为了保存索引 0 的值,可以将写入文件的 observer 添加为最后一个 observer。一旦处理完所有观察者,就可以将值保存到文件中。
Backtrader-系列教程--介绍
Backtrader是一个由Daniel Rodriguez在年1月日在GitHub上开源的Python框架,主要支持股票、期货、期权和加密货币等资产的量化回测与实盘交易,主要用于国外市场,国内用户可能需要定制化支持。Backtrader的第一个正式版本1.0.0.于年6月3日发布,至今已更新至1.9..版本,指标数量从最初的个增长到个,结合TA-Lib等第三方库,其指标计算能力非常强大。
Backtrader的成功源于作者的项目设计和持久努力,以及详实的文档支持和活跃的社区。官网backtrader.com提供了详细的文档和讨论区community.backtrader.com,供用户交流使用经验和量化策略。选择量化框架时,开源性、文档、社区活跃度和适应个人水平是关键,通过学习框架可以提升交易和编程理解。
对于量化投资爱好者,Backtrader是入门工具,从数据获取、清洗到策略编写和模拟交易,都能体验量化投资流程。但其源码复杂,涉及到元类和Python 2/3兼容性,以及代码风格问题。此外,由于开发者主要在国外,其一些功能设计可能与国内用户习惯不符,比如K线颜色的设置。对于新手,中文资源可能不够完整,笔者将通过AKShare和公众号数据科学实战提供Backtrader使用教程,结合AKShare数据接口实现策略,还会在知识星球数据科学家进行视频直播,欢迎关注和参与。
下面是一个利用AKShare数据和Backtrader进行回测的示例代码,更多内容将在后续文章中逐步介绍,包括面向对象编程、多股票回测、多时间粒度分析等内容,以及自定义指标和订单编写等深度讲解。
手把手教你入门量化回测最强神器backtrader(一)
目前,Python量化回测框架种类丰富,如zipline、vnpy、pyalgotrader和backtrader等。backtrader以其功能完善、文档详尽、安装简便(pip安装)等优点,受到许多量化投资者的喜爱。尽管学习过程中可能需要处理大量元编程(类class),但对于有一定Python基础的用户来说,它仍然是一个强大的工具。
backtrader的核心组件包括数据加载(Data Feed)、交易策略(Strategy)、回测框架设置(Cerebro)、运行回测和评估性能(Analyzers)。其中,数据加载用于将交易策略所需的数据加载到回测框架中;交易策略负责设计交易决策;回测框架设置则包括资金、佣金、数据馈送、策略和交易头寸大小等参数的设置;运行回测后,可以通过Analyzers对策略的回测结果进行图形和风险收益等指标的评价。
以日单均线策略为例,该策略的核心是判断收盘价是否突破或跌破日均线。在backtrader中,首先需要构建策略,包括参数设置、日志记录、初始化、订单和交易状态通知等。接下来是数据加载,backtrader支持多种数据接口,包括quandl、yahoo和pandas格式数据等。然后进行回测设置,包括初始化、数据加载、策略添加、经纪商设置和头寸规模设置等。执行回测后,可以输出回测结果,并进行可视化分析。
backtrader作为一款功能强大的量化回测框架,在实盘交易中得到了广泛应用。本文以日单均线策略为例,介绍了backtrader的基本使用方法和运行过程。接下来,公众号将全面介绍backtrader的应用。学习backtrader需要耐心和细心,研读官方文档是最佳途径。
BackTrader 中文文档(二十八·二)
调用 1:
在BackTrader中,仅针对较小时间框架(如日线)使用简单移动平均值。
调用 2:
同时针对多个时间框架(日线和周线)使用简单移动平均值。
结论:
在BackTrader中,多时间框架数据无需特殊处理即可使用。仅需先添加较小的时间框架,然后应用所需时间线的分析。
数据重新取样:
BackTrader通过DataResampler过滤器对象支持数据重新取样。此功能允许从一个时间跨度(如日线)转换到另一个(如周线)。
重新取样示例:
为从日线更改为周线并应用压缩,可以编写自动化脚本。结果示例展示了转换过程,从原始数据减少到所需的时间跨度。
Pandas DataFeed支持:
BackTrader已集成Pandas Dataframe支持,通过增强和调整以更好地适应Python 2.6。这允许直接从Pandas Dataframe加载数据进行分析。
自动化回测:
Backtrader的bt-run.py脚本自动化了大部分任务,简化了使用回测平台进行算法交易的流程。用户可通过此脚本自动运行策略、添加分析器等。
策略执行:
示例策略简单介绍了如何执行策略回测,包括策略代码、参数设置和输出展示。回测结果通过图表和控制台输出展示。
观察者与统计:
Backtrader内部默认包含观察者用于收集统计信息。这些观察者在策略执行期间自动运行,无需用户额外声明,用于评估策略性能。
自定义观察者实现:
观察者实现遵循指标实现模式,从收集信息到添加自定义功能。示例展示了如何创建自定义观察者,如OrderObserver,以监控订单状态。
统计信息保存:
虽然Backtrader目前没有内置机制保存统计信息,但可以使用第三方库如pandas将观察者值保存至文件,用于进一步分析。
数据源开发:
Backtrader提供CSV数据源开发框架,通过CSVDataBase基类简化了自定义数据源的创建过程。此框架同样适用于其他非CSV格式数据源的开发。
二进制数据源:
Backtrader支持从二进制文件加载数据,如用于VisualChart的二进制文件。开发自定义二进制数据源遵循类似模式,可灵活加载不同格式的数据。
完整代码:
完整的数据源代码在底部提供,包括初始化、开始、停止和数据加载等关键步骤,以及实现二进制数据源的具体示例。