当前位置: 首页 > news >正文

Backtrader 文档学习-Indicators混合时间框架

Backtrader 文档学习-Indicators混合时间周期

1.不同时间周期

如果数据源在Cerebro引擎中具有不同的时间范围和不同的长度,指示器将会终止。
比如:data0是日线,data1是月线 。

pivotpoint = btind.PivotPoint(self.data1)
sellsignal = self.data0.close < pivotpoint.s1

当收盘低于s1线(第一支撑位)时为卖出信号

PivotPoint可以在更大的时间范围内工作

在以前的版本报错:

return self.array[self.idx + ago]
IndexError: array index out of range

原因是:self.data.close提供第一个bar的值,但PivotPoint(以及s1行)只有在一个完整月过去后才会有值,相当于self.data0.close的22个值。在这22个close值,s1的Line还没有值,从底层数组获取它的尝试失败,报错超出范围。

Line对象支持(ago)运算符(Python中的__call__特殊方法)来传递自身的延迟版本:

close1 = self.data.close(-1)

In this example the object close1 (when accessed via [0]) always contains the previous value (-1) delivered by close. The syntax has been reused to accomodate adapting timeframes. Let’s rewrite the above pivotpoint snippet:

对象close1(通过[0]访问时)始终包含close提供的前一个值(-1)。语法将重写以适应时间框架。重写上面的pivotpoint 片段:

pivotpoint = btind.PivotPoint(self.data1)
sellsignal = self.data0.close < pivotpoint.s1()

看看()是如何在没有参数的情况下执行的(在后台没有提供任何参数)。发生了以下情况:

  • pivotpoint.s1()返回内部LinesCoupler对象,该对象遵循较大范围周期,coupler用来自实际s1的最新值填充,从默认值NaN开始 。

在后面章节中的参数说明:

PivotPoint Formula:

  • pivot = (h + l + c) / 3 # variants duplicate close or add open
  • support1 = 2.0 * pivot - high
  • support2 = pivot - (high - low)
  • resistance1 = 2.0 * pivot - low
  • resistance2 = pivot + (high - low)
    对应计算后的Line:
  • p
  • s1
  • s2
  • r1
  • r2

运行结果:

0069,0069,0014,2005-04-11,3080.60,3043.16,0.00
0070,0070,0014,2005-04-12,3065.18,3043.16,0.00
0071,0071,0014,2005-04-13,3080.54,3043.16,0.00
0072,0072,0014,2005-04-14,3075.33,3043.16,0.00
0073,0073,0014,2005-04-15,3013.89,3043.16,1.00
0074,0074,0015,2005-04-18,2947.79,2988.96,1.00
0075,0075,0015,2005-04-19,2957.37,2988.96,1.00
0076,0076,0015,2005-04-20,2944.33,2988.96,1.00
0077,0077,0015,2005-04-21,2950.34,2988.96,1.00
0078,0078,0015,2005-04-22,2976.39,2988.96,1.00
0079,0079,0016,2005-04-25,2987.05,2935.07,0.00
0080,0080,0016,2005-04-26,2983.22,2935.07,0.00
0081,0081,0016,2005-04-27,2942.62,2935.07,0.00

在长度为74 的时候,close < s1 。出现signal 。

2.代码

from __future__ import (absolute_import, division, print_function,unicode_literals)import argparseimport backtrader as bt
import backtrader.feeds as btfeeds
import backtrader.indicators as btind
import backtrader.utils.flushfileclass St(bt.Strategy):params = dict(multi=True)def __init__(self):self.pp = pp = btind.PivotPoint(self.data1)#print(dir(pp))pp.plotinfo.plot = False  # deactivate plottingif self.p.multi:pp1 = pp()  # couple the entire indicatorsself.sellsignal = self.data0.close < pp1.s1()else:self.sellsignal = self.data0.close < pp.s1()def next(self):txt = ' , '.join(['%04d' % len(self),'%04d' % len(self.data0),'%04d' % len(self.data1),self.data.datetime.date(0).isoformat(),'%.2f' % self.data0.close[0],'%.2f' % self.pp.s1[0],'%.2f' % self.sellsignal[0]])print(txt)def runstrat():args = parse_args()cerebro = bt.Cerebro()data = btfeeds.BacktraderCSVData(dataname=args.data)cerebro.adddata(data)cerebro.resampledata(data, timeframe=bt.TimeFrame.Weeks) # 增加周线cerebro.resampledata(data, timeframe=bt.TimeFrame.Months) # 增加月线cerebro.addstrategy(St, multi=args.multi)cerebro.run(stdstats=False, runonce=False)if args.plot:cerebro.plot(style='bar')def parse_args():parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,description='Sample for pivot point and cross plotting')parser.add_argument('--data', required=False,default='./datas/2005-2006-day-001.txt',help='Data to be read in')parser.add_argument('--multi', required=False, action='store_true',help='Couple all lines of the indicator')parser.add_argument('--plot', required=False, action='store_true',help=('Plot the result'))return parser.parse_args()if __name__ == '__main__':runstrat()

允许参数说明:

python  ./mixing-timeframes.py --help
usage: mixing-timeframes.py [-h] [--data DATA] [--multi] [--plot]Sample for pivot point and cross plottingoptional arguments:-h, --help   show this help message and exit--data DATA  Data to be read in (default: ./datas/2005-2006-day-001.txt)--multi      Couple all lines of the indicator (default: False)--plot       Plot the result (default: False)

可以看到,日线、周线和月线,三个周期的数据,在cerebro 通过init中Indicator的初始化,在next中打印数据长度,数据和signal,执行结果:
在这里插入图片描述

3. 修改为不用args参数

在jupter中可以执行:

from __future__ import (absolute_import, division, print_function,unicode_literals)import backtrader as bt
import backtrader.feeds as btfeeds
import backtrader.indicators as btind
import backtrader.utils.flushfile%matplotlib inlineclass St(bt.Strategy):params = dict(multi=True)def __init__(self):self.pp = pp = btind.PivotPoint(self.data1)pp.plotinfo.plot = False  # deactivate plottingif self.p.multi:pp1 = pp()  # couple the entire indicatorsself.sellsignal = self.data0.close < pp1.s1else:self.sellsignal = self.data0.close < pp.s1()def next(self):txt = ','.join(['%04d' % len(self),'%04d' % len(self.data0),'%04d' % len(self.data1),self.data.datetime.date(0).isoformat(),'%.2f' % self.data0.close[0],'%.2f' % self.pp.s1[0],'%.2f' % self.sellsignal[0]])#print(txt)def runstrat(args_plot):#cerebro = bt.Cerebro()#data = btfeeds.BacktraderCSVData(dataname=args.data)cerebro = bt.Cerebro()stock_hfq_df = get_code('000858') start_date = datetime.datetime(2020, 1, 1)  # 回测开始时间end_date = datetime.datetime(2020, 12, 31)  # 回测结束时间data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date)  # 加载数据# Add the Data Feed to Cerebrocerebro.adddata(data)cerebro.resampledata(data, timeframe=bt.TimeFrame.Weeks)cerebro.resampledata(data, timeframe=bt.TimeFrame.Months)#cerebro.addstrategy(St, multi=args.multi)cerebro.addstrategy(St, multi=True)cerebro.run(stdstats=False, runonce=False)if args_plot:cerebro.plot(iplot=False,style='bar')if __name__ == '__main__':args_plot = Truerunstrat(args_plot)

执行效果:
在这里插入图片描述

4.Indicator Reference

Indicator 参考说明,参数方法太多了,随用随学吧。

相关文章:

Backtrader 文档学习-Indicators混合时间框架

Backtrader 文档学习-Indicators混合时间周期 1.不同时间周期 如果数据源在Cerebro引擎中具有不同的时间范围和不同的长度&#xff0c;指示器将会终止。 比如&#xff1a;data0是日线&#xff0c;data1是月线 。 pivotpoint btind.PivotPoint(self.data1) sellsignal self…...

网络攻击与检测防御:维护数字安全的关键挑战

随着数字化时代的深入&#xff0c;网络攻击已成为企业和个人面临的严峻挑战之一。本文将深入探讨不同类型的网络攻击&#xff0c;以及有效的检测和防御策略&#xff0c;以确保网络系统的安全性和稳定性。 1. 常见网络攻击类型&#xff1a; DDoS 攻击&#xff1a;分布式拒绝服…...

使用 Vector 在 Kubernetes 中收集日志

多年来&#xff0c;我们一直在使用 Vector 在我们的 Kubernetes 平台中收集日志&#xff0c;并成功地将其应用于生产中以满足各种客户的需求&#xff0c;并且非常享受这种体验。因此&#xff0c;我想与更大的社区分享它&#xff0c;以便更多的 K8s 运营商可以看到潜力并考虑他们…...

ardupilot开发 --- 固件定制(OEM) 篇

0. 前言 固件功能定制OEM Customization&#xff1a; 原厂设备制造商OEM&#xff08;Original Equipment Manufacturer&#xff09;、代工功能勾选参数预设固件名称自定义 1. 基于某个飞控硬件来定制自己的飞控产品 可以自定义的包括&#xff1a;固件名称、预设参数、lua脚本…...

爬虫代理IP在电商行业的应用

随着互联网的快速发展&#xff0c;电商行业已经成为人们购物的主要渠道之一。在电商行业中&#xff0c;数据分析和挖掘至关重要。爬虫代理IP作为一种能够提供大量模拟请求和收集数据的工具&#xff0c;被广泛应用于电商行业。下面介绍爬虫代理IP在电商行业中的应用。 1、保护隐…...

Vue配置语法检查及关闭语法检查的说明

1. 第一种方式&#xff1a;//eslint-disable-next-line 2. 第二种方式&#xff1a;/*eslint-disable*/ 3. 第三种方式&#xff1a;vue.config.js中配置 &#xff0c;具体配置如下&#xff1a; const { defineConfig } require(vue/cli-service)module.exports defineConfig…...

【Linux】yum

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 yum 1. 什么是yum&#xff1f;2. Linux系统(Centos)的生态3. yum的相关操作4. yum的本地配置5. 如何安装软件 1. 什么是yum&#xff1f; yum是一个软件下载安装的一个客户端&a…...

安装sftpgo

1.下载安装包;选择自己需要的cpu架构和操作系统的版本 https://github.com/drakkan/sftpgo/releases/tag/v2.5.6推荐使用版本下载地址 https://github.com/drakkan/sftpgo/releases/download/v2.5.6/sftpgo_v2.5.6_linux_x86_64.tar.xz2.解压文件到某个文件夹,根据需要修改配…...

JS-元素尺寸与位置

通过js的方式&#xff0c;得到元素在页面中的位置 获取宽高 元素.offsetWidth 元素.offsetHeight 1&#xff09;获取元素的自身宽高、包括元素自身设置的宽高paddingborder 2&#xff09;获取出来的是数值&#xff0c;方便计算 3&#xff09;注意&#xff1a;获取的是可视…...

2024-01-15(SpringMVCMybatis)

1.拦截器&#xff1a;如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理&#xff0c;甚至某些情况下需要拦截掉&#xff0c;不让handler方法执行&#xff0c;那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别&#xff1a;过滤…...

Node+Express编写接口---前端

前端页面 vue_node_admin: 第一个以node后端,vue为前端的后台管理项目https://gitee.com/ah-ah-bao/vue_node_admin.git...

防火墙技术

防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及…...

图灵日记之java奇妙历险记--String类

目录 String常用方法字符串构造String对象的比较字符串查找char charAt(int index)int indexOf(int ch)int indexOf(int ch, int fromIndex)int indexOf(String str)int indexOf(String str, int fromIndex)int lastIndexOf(String str)int lastIndexOf(String str, int fromIn…...

代码随想录算法训练营第六天| 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和

目录 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和 242 有效的字母异位词 排序 class Solution { public:bool isAnagram(string s, string t) {sort(s.begin(),s.end());sort(t.begin(),t.end());return t s;} }; 时间复杂度O(nlogn) 空间复杂度O(l…...

数学建模--比赛

内容来自数学建模BOOM&#xff1a;【快速入门】北海&#xff1a;数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 1.学习内容 2.参赛须知 1&#xff09;参赛作品的组成 2)参赛作品的提交 3.软件安装 4.注意…...

JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、Java虚拟机栈 1.栈帧的组成 2.局部变量表 3.操作数栈 4.帧数据 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#xff0c;管理…...

DC-4靶机刷题记录

靶机下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1YbPuSw_xLdkta10O9e2zGw?pwdn6nx 提取码&#xff1a;n6nx 参考&#xff1a; 【【基础向】超详解vulnhub靶场DC-4-爆破反弹shell信息收集】 https://www.bilibili.com/video/BV1Le4y1o7Sx/?share_sourc…...

【前端学习笔记1】css基础

css可以使页面更漂亮&#xff0c;即美化网页 css&#xff1a;层叠样式表 标签选择器&#xff1a; 类选择器&#xff1a; id只能单次调用&#xff0c;类似人的身份证 css里只要是word里面有的功能&#xff0c;他们都有对应的&#xff0c;不会的时候查一下就行 实现垂直居中:h…...

CVE-2023-46226 Apache iotdb远程代码执行漏洞

项目介绍 Apache IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点&#xff0c;完美对接 Hadoop 与 Spark 生态&#xff0c;适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。 项目地址 https://io…...

Redis实战之-分布式锁

一、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让程序串行…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...