Backtrader量化&回测11——策略信号Indicator

2023-11-09

对于程序来讲,该有的代码一行都不会少,但是把代码分块就可以很直观的阅读或修改代码。使用Indicator可以将策略的信号从策略类Strategy中脱离出来,方便策略进行协调与控制

文章目录

策略信号

官网中对于Indicator的解释是:https://www.backtrader.com/docu/induse/

比如下面就是一个Indicator类,和策略一样:

  • def __init__:初始化的一些函数,可生成一些交易信号
  • def next(self):与Strategy类中的next用法一致,每一个模拟的交易日,都会先执行Indicator类,然后才会执行这个交易日的策略类中的next()方法
class BuySignalIndicator(bt.Indicator):
    lines = ("",)

    def __init__(self):
        self.should_buy = False

    def next(self):
        if self.datas[0].close[0] > self.datas[0].open[0]:
            self.should_buy = True
        else:
            self.should_buy = False

注意:在Indicator类中是没有self.datetime方法的,因此在信号类中其实是无法直接读取当天的日期的

示例代码

import backtrader as bt

class BuySignalIndicator(bt.Indicator):
    lines = ("",)

    def __init__(self):
        self.should_buy = False

    def next(self):
        if self.datas[0].close[0] > self.datas[0].open[0]:
            self.should_buy = True
        else:
            self.should_buy = False


class TestStrategy(bt.Strategy):  # 策略
    def __init__(self):
        self.close_price = self.datas[0].close  # 这里加一个数据引用,方便后续操作
        self.my_indicator = BuySignalIndicator()

    def next(self):
        if self.my_indicator.should_buy:
            self.buy(size=500, price=self.data.close[0])
        else:
            if self.position:
                self.sell(size=500, price=self.data.close[0])

这样,在执行策略时,执行顺序是:

  1. 在策略类Strategy中,执行初始化 def __init__()
  2. 在信号类Indicator中,执行初始化 def __init__()
  3. 在信号类Indicator中,执行next()函数
  4. 在策略类Strategy中,执行next()函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Backtrader量化&回测11——策略信号Indicator 的相关文章

  • ValueError:“连接”层需要具有匹配形状的输入(连接轴除外)

    我正在尝试为我的项目构建 Pix2Pix 并收到错误 值错误 Concatenate层需要具有匹配形状的输入 除了连接轴之外 获得输入形状 None 64 64 128 None 63 63 128 生成器是一个 U 网模型 我的输入高度
  • 如何使用 pandas 选择所有非 NaN 列和非 NaN 最后一列?

    如果标题有点令人困惑 请原谅我 假设我有test h5 下面是使用读取该文件的结果df read hdf test h5 testdata 0 1 2 3 4 5 6 0 123 444 111 321 NaN NaN NaN 1 12 2
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • 绘制“plot”而不是“scatter”时,图例选择会中断

    再会 这个问题是后续问题为什么图例选取仅适用于 ax twinx 而不适用于 ax https stackoverflow com q 60167378 9282844 下面提供的最小代码分别绘制了两条曲线ax1 and ax2 ax1 t
  • 可移植的非关系数据库

    我想尝试 尝试非关系数据库 最好的解决方案是 便携式 这意味着它不需要安装 理想情况下 只需将目录复制粘贴到某个地方即可使其工作 我不介意第一次使用时是否需要编辑一些配置文件或运行配置工具 可从 python 访问 适用于 Windows
  • 在加载“cv2”二进制扩展期间检测到递归

    我有一个小程序 在 pyinstaller 编译后返回 opencv 错误 但无需编译即可工作 我在 Windows 10 上使用 Python 3 8 10 Program 导入 pyautogui将 numpy 导入为 np导入CV2
  • 在 keras 中使用自定义张量流操作

    我在张量流中有一个脚本 其中包含自定义张量流操作 我想将代码移植到 keras 但我不确定如何在 keras 代码中调用自定义操作 我想在 keras 中使用tensorflow 所以到目前为止我发现的教程描述了与我想要的相反的内容 htt
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 如何使用python读取最后一行的特定位置

    我有一个太大的 txt 文件 并且有几行类似的行 如下所示 字1 字2 字3 字4 553 75 我对位置 4 值 感兴趣 即最后一行 553 75 我的文件文本 word1 word2 word3 word4 553 20 word1 w
  • 有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数?

    有没有任何方法可以使用 openpyxl 获取 xlsx 工作表中存在的行数和列数 在xlrd中 sheet ncols sheet nrows 将给出列数和行数 openpyxl中有这样的方法吗 给定一个变量sheet 可以通过以下方式之
  • 如何使用数据库在 Django 中的应用程序之间交换数据?

    我正在使用 Django 在网络上工作 我创建了 2 个应用程序 第一个用于客户端注册并将其数据添加到数据库 第二个应用程序供用户访问和查看交互界面 这个想法是使用第二个应用程序从数据库中的客户端获取数据 并使用它向用户显示一些信息 我的问
  • psutil:测量特定进程的CPU使用率

    我正在尝试测量进程树的 cpu 使用率 目前获取进程 没有子进程 的 cpu usage 就可以了 但我得到了奇怪的结果 import psutil p psutil Process PID p cpu percent 还给我float g
  • Jupyter Notebook 中的多处理与线程

    我试图测试这个例子here https ipywidgets readthedocs io en stable examples Widget 20Asynchronous html将其从线程更改为多处理 在 jupyter Noteboo
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表

随机推荐

  • CTF之逆向之阿里巴巴

    题目地址 http www shiyanbar com ctf 13 题目预览 解题过程 1 下载附件发现是exe文件 2 使用PEid和Detect It Easy查壳 和 开发语言 发现没有加壳 都是用C 开发的 3 C 和Java P
  • 打开方式中选择默认方式无反映_系统小技巧:找回丢失的文件“打开方式”

    无论你在使用最经典的Windows 7 还是最主流的Windows 10 当某种文档可以用多个不同程序打开时 在文件的右键菜单中会出现 打开方式 的菜单项 从中可选择打开文档的程序 但有时我们会发现 明明程序在电脑中并未被卸载 但右键菜单中
  • 腾讯云域名解析

    腾讯云域名解析 外链图片转存失败 img 7ZtbvWq2 1562133684211 http shp qpic cn txdiscuz pic 0 bbs qcloud com common cf 163844rpqz5g6g6p6qf
  • 动态代理步骤

    实现动态代理的步骤 1 创建接口 定义目标类要完成的方法 2 创建目标类实现接口 3 创建InvocationHandler接口的实现了类 在invoke方法中完成代理类的功能 1 调用目标方法 2 增强功能 4 使用Proxy类的静态方法
  • jdk动态代理与CGLib的区别

    昨天被人问及动态代理与CGlib的区别 赶紧回顾一下 什么是代理 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 代理模式是Java中常见的一种模式 英文名字叫走Proxy或者Su
  • 基于 TiDB 的 Apache APISIX 高可用配置中心的最佳实践

    项目背景 什么是 Apache APISIX API 网关作为微服务架构中的重要组件 是流量的核心出入口 用于统一处理和业务相关的请求 可有效解决海量请求 恶意访问等问题 保障业务安全性与稳定性 作为开源的云原生 API 网关 Apache
  • SQL Server Powershell 开源数据库管理工具 dbatools

    在 Windows 中开发自动化运维 除了 python 就是 powershell了 powershell 与 windows 相关产品关联紧密 Windows 环境下的自动化开发一般使用 powershell sql server 亦是
  • 高效液相色谱分析的基本原理

    一 高效液相色谱分析法 百度百科 高效液相色谱以经典的液相色谱为基础 是以高压下的液体为流动相的色谱过程 通常所说的柱层析 薄层层析或纸层析就是经典的液相色谱 所用的固定相为大于100um 的吸附剂 硅胶 氧化铝等 这种传统的液相色谱所用的
  • Dubbo 3.x源码(10)—Dubbo初始化导出/引用模块配置源码

    基于Dubbo 3 1 详细介绍了Dubbo初始化导出 引用模块配置的源码 此前我们学习了Dubbo配置的加载与覆盖的一系列源码 Dubbo 3 x源码 7 Dubbo配置的加载入口源码 Dubbo 3 x源码 8 Dubbo配置中心的加载
  • JeecgBoot Vue2前端国际化语言切换

    JeecgBoot antd Vue2前端国际化语言切换 jeecg官方文档 参考 jeecg前端的国际化解决方案 参考 一 需求场景 后台管理系统 放置一个中英文切换选择按钮 页面切换所选语言后 系统会重新加载 获取对应的语言数据 并且下
  • Git 的origin和master分析

    lt lt 关键是 中英文切换着打字太辛苦了转载请注明出处 gt gt http lishicongli blog 163 com blog static 1468259020132125247302 首先要明确一点 对git的操作是围绕3
  • ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读

    ArcGIS Maritime Server 开发教程 三 Maritime Service 功能解读 本章导读 ArcGIS Maritime Server 能够以极简的方式发布海图服务 其服务的标准与传统的 MapService 对齐
  • 小白数学建模模型入门(二)

    数学建模模型入门 二 1 图论模型 Dijkstra算法 应用于求初始点到其他所有顶点的最短路径 本质是一种标号法 给赋权图的每一个顶点记一个数 称为顶点的标号 临时标号 称T标号 固定标号 称为P标号 T标号表示从始顶点到该标点的最短路长
  • The last packet sent successfully to the server was 0 milliseconds ago

    今天在弄数据库迁移及部署到客户服务器时 发现启动成功了 但是数据请求超时 赶紧打开日志看一下 报了这样的错 The last packet sent successfully to the server was 0 milliseconds
  • &和&&的区别(单与和双与的区别)

    和 都可以用作逻辑与的运算符 为短路与 不是短路与 可以作为整数的位运算符 举两个例子 1 对于if str null str equals 这个表达式 当str null 时 后面的表达式就不会执行 也不会出现NullPointerExc
  • 跨平台编程开发工具Xojo 2023 Release mac中文版功能介绍

    Xojo mac是一款跨平台的软件开发工具 它允许开发人员使用一种编程语言来创建应用程序 然后可以在多个操作系统上运行 Xojo 2023是Xojo开发工具的最新版本 它提供了许多功能和改进 以帮助开发人员更轻松地构建高质量的应用程序 Xo
  • 转载super resolution 超分辨率 的一些论文和代码

    1 CVPR 2019 神奇的超分辨率算法DPSR 应对图像模糊降质 code 2 从SRCNN到EDSR 总结深度学习端到端超分辨率方法发展历程 3 超分辨率在人脸识别中的工业应用 商汤算法一骑绝尘 打造公安人脸识别智能核心 4 人脸超分
  • linux开放端口命令tcp,linux开放端口命令

    linux系统中控制端口的开启与关闭可以由命令来执行 下面由学习啦小编为大家整理了linux下开放端口命令的相关知识 希望对大家有所帮助 linux开放端口命令1 打开指定端口 sbin iptables I INPUT p tcp dpo
  • 数据、常量和变量 2014-3-19总结

    今天学习了数据 常量和变量 一 数据 数据分为两种 静态数据和动态数据 1 静态数据 1 概念 静态数据是指一些永久性的数据 硬盘内存比较大 所以一般的存储在硬盘中 2 存储的时长 计算机关闭之后再开启 这些数据依旧还在 只要你不主动删掉或
  • Backtrader量化&回测11——策略信号Indicator

    对于程序来讲 该有的代码一行都不会少 但是把代码分块就可以很直观的阅读或修改代码 使用Indicator可以将策略的信号从策略类Strategy中脱离出来 方便策略进行协调与控制 文章目录 策略信号 示例代码 策略信号 官网中对于Indic