Backtrader 文档学习- Plotting -Plotting on the same axis

2024-02-08 19:52

本文主要是介绍Backtrader 文档学习- Plotting -Plotting on the same axis,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Backtrader 文档学习- Plotting -Plotting on the same axis

1.概述

在同一轴上绘图,绘图是在同一空间上绘制原始数据和稍微(随机)修改的数据,但不是在同一轴上。

核心代码,data数据正负50点。

# The filter which changes the close price
def close_changer(data, *args, **kwargs):data.close[0] += 50.0 * random.randint(-1, 1)return False  # length of stream is unchanged

图示 :
在这里插入图片描述

可以看到:

  • 图表的左右两侧有不同的刻度
  • 当看到摆动的红线(随机数据)时,这一点最为明显,它在原始数据周围振荡±50个点。
    在图上,视觉印象是这些随机数据大多时候都在原始数据上方,这只是由于左右不同的刻度造成的视觉差异。

尽管1.9.32.116 版本已经有了基础的支持,可以完全在同一轴上绘制,但图例标签会重复(只有标签,没有数据),容易令人困惑。
1.9.33.116 版本解决了这个问题,并允许在同一轴上完全绘制。使用模式与决定与哪些其他数据一起绘制的模式相同。看之前的代码 。

import backtrader as btcerebro = bt.Cerebro()data0 = bt.feeds.MyFavouriteDataFeed(dataname='futurename')
cerebro.adddata(data0)data1 = bt.feeds.MyFavouriteDataFeed(dataname='spotname')
data1.compensate(data0)  # let the system know ops on data1 affect data0
data1.plotinfo.plotmaster = data0
data1.plotinfo.sameaxis = True
cerebro.adddata(data1)
...cerebro.run()

data1 获得了一些plotinfo 值:

  • 在与数据0相同的空间上绘制
  • 获得使用相同轴sameaxis的设置

这种指示的原因是平台无法提前知道每个数据的比例是否兼容,这就是为什么它将在独立的尺度上绘制它们。
示例增加了一个选项,可以在同一轴上绘制。执行:

python ./future-spot.py --sameaxis

在这里插入图片描述
注意:

  • 右侧只有一个刻度
  • 现在随机数据似乎明显在原始数据周围振荡,预期的视觉效果。对比上图更准确。

2.Help

python  ./future-spot.py --help
usage: future-spot.py [-h] [--no-comp] [--sameaxis]Compensation exampleoptional arguments:-h, --help  show this help message and exit--no-comp--sameaxis

3.代码

#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
#
# Copyright (C) 2015-2023 Daniel Rodriguez
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from __future__ import (absolute_import, division, print_function,unicode_literals)import argparse
import random
import backtrader as bt# The filter which changes the close price
def close_changer(data, *args, **kwargs):data.close[0] += 50.0 * random.randint(-1, 1)return False  # length of stream is unchanged# override the standard markers
class BuySellArrows(bt.observers.BuySell):plotlines = dict(buy=dict(marker='$\u21E7$', markersize=12.0),sell=dict(marker='$\u21E9$', markersize=12.0))class St(bt.Strategy):def __init__(self):bt.obs.BuySell(self.data0, barplot=True)  # done here forBuySellArrows(self.data1, barplot=True)  # different markers per datadef next(self):if not self.position:if random.randint(0, 1):self.buy(data=self.data0)self.entered = len(self)else:  # in the marketif (len(self) - self.entered) >= 10:self.sell(data=self.data1)def runstrat(args=None):args = parse_args(args)cerebro = bt.Cerebro()dataname = './datas/2006-day-001.txt'  # data feeddata0 = bt.feeds.BacktraderCSVData(dataname=dataname, name='data0')cerebro.adddata(data0)data1 = bt.feeds.BacktraderCSVData(dataname=dataname, name='data1')data1.addfilter(close_changer)if not args.no_comp:data1.compensate(data0)data1.plotinfo.plotmaster = data0if args.sameaxis:data1.plotinfo.sameaxis = Truecerebro.adddata(data1)cerebro.addstrategy(St)  # sample strategycerebro.addobserver(bt.obs.Broker)  # removed below with stdstats=Falsecerebro.addobserver(bt.obs.Trades)  # removed below with stdstats=Falsecerebro.broker.set_coc(True)cerebro.run(stdstats=False)  # executecerebro.plot(volume=False)  # and plotdef parse_args(pargs=None):parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,description=('Compensation example'))parser.add_argument('--no-comp', required=False, action='store_true')parser.add_argument('--sameaxis', required=False, action='store_true')return parser.parse_args(pargs)if __name__ == '__main__':runstrat()
  • Commissions: Stocks vs Futures 佣金:股票与期货 ,对于策略并非BT核心 。
  • Live Data Feeds and Live Trading 实时数据加载和实时交易,用不上。

偷个懒,不写了 。

算是在春节前完毕。

旧岁千般皆如意,新年万事定称心

新年快乐!

这篇关于Backtrader 文档学习- Plotting -Plotting on the same axis的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/692045

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程