Backtrader 文档学习-Data Feeds(下)

Backtrader 文档学习-Data Feeds(下)

1. Data Resampling

当数据仅在单个时间范围内可用,需要在不同的时间范围内进行分析时,就需要进行一些重采样。
“重采样”实际上应该称为“上采样”,因为它是从一个源时间区间到一个更大的时间区间(例如:几天到几周)
语法:

cerebro.resampledata(data, timeframe=bt.TimeFrame.Minutes, compression=1)

两个目的:

  • 改变时间区间
  • 压缩数据 bar数量
    注意:
    如果采用了resmaple方法,则数据不会预加载preload。

参数:

  • data: bt数据源
  • timeframe:用于指定合成结果(Ticks, MicroSeconds, Seconds, Minutes, Days, Weeks, Months, Years, NoTimeFrame)
  • compression:设置bar的条数进一步压缩合并,如resmaple初次合成为周数据后,每根bar是周线。如设置compression=2,则进一步将两条周数据bar压缩成 一根bar为两周数据。

前置条件:

  • 最小粒度的数据必须被第一个加入到Cerebro实例中
  • 数据必须按照日期时间升序排列
  • 大粒度数据的使用有可能使得策略的最小周期变大
  • 若使用不同时间粒度的指标进行运算,则要采用cerebro.run(runonce=False) 若策略中使用了不同时间粒度的指标进行运算,不能用cerebro.run()

程序:

from __future__ import (absolute_import, division, print_function,unicode_literals)import argparseimport backtrader as bt
import backtrader.feeds as btfeedsdef runstrat():args = parse_args()# Create a cerebro entitycerebro = bt.Cerebro(stdstats=False)# Add a strategycerebro.addstrategy(bt.Strategy)# Load the Datadatapath = args.dataname or './datas/2006-day-001.txt'data = btfeeds.BacktraderCSVData(dataname=datapath)# Handy dictionary for the argument timeframe conversiontframes = dict(daily=bt.TimeFrame.Days,weekly=bt.TimeFrame.Weeks,monthly=bt.TimeFrame.Months)# Add the resample data instead of the originalcerebro.resampledata(data,timeframe=tframes[args.timeframe],compression=args.compression)# Run over everythingcerebro.run()# Plot the resultcerebro.plot(style='bar')def parse_args():parser = argparse.ArgumentParser(description='Pandas test script')parser.add_argument('--dataname', default='', required=False,help='File Data to Load')parser.add_argument('--timeframe', default='weekly', required=False,choices=['daily', 'weekly', 'monthly'],help='Timeframe to resample to')parser.add_argument('--compression', default=1, required=False, type=int,help='Compress n bars into 1')return parser.parse_args()if __name__ == '__main__':runstrat()

执行效果:

(1)日线

python ./resampling-example.py
在这里插入图片描述

(2)周线

python ./resampling-example.py --timeframe weekly --compression 1

在这里插入图片描述

(3)月线

python ./resampling-example.py --timeframe monthly --compression 1

在这里插入图片描述

2. Data - Replay

  • 策略使用数据区间X ,假设是日线
  • 数据需要更小的时间区间Y,比如分钟线可用
    replay 实现:
  • 用分钟线重演替代日线

用分钟线模拟日线当然不是市场精确的走势,但比孤立地等待每天完全形成的日线好得多。
如果策略定义在日线中实时运行处理,日线形成的近似值就可能在真实条件下重演策略的实际操作。
语法:

cerebro.replaydata(data,timeframe,compression)

参数与resample一样。

程序:

from __future__ import (absolute_import, division, print_function,unicode_literals)import argparseimport backtrader as bt
import backtrader.feeds as btfeeds
import backtrader.indicators as btindclass SMAStrategy(bt.Strategy):params = (('period', 10),('onlydaily', False),)def __init__(self):self.sma = btind.SMA(self.data, period=self.p.period)def start(self):self.counter = 0def prenext(self):self.counter += 1print('prenext len %d - counter %d' % (len(self), self.counter))def next(self):self.counter += 1print('---next len %d - counter %d' % (len(self), self.counter))def runstrat():args = parse_args()# Create a cerebro entitycerebro = bt.Cerebro(stdstats=False)cerebro.addstrategy(SMAStrategy,# args for the strategyperiod=args.period,)# Load the Datadatapath = args.dataname or './datas/2006-day-001.txt'data = btfeeds.BacktraderCSVData(dataname=datapath)# Handy dictionary for the argument timeframe conversiontframes = dict(daily=bt.TimeFrame.Days,weekly=bt.TimeFrame.Weeks,monthly=bt.TimeFrame.Months)# First add the original data - smaller timeframecerebro.replaydata(data,timeframe=tframes[args.timeframe],compression=args.compression)# Run over everythingcerebro.run()# Plot the resultcerebro.plot(style='bar')def parse_args():parser = argparse.ArgumentParser(description='Pandas test script')parser.add_argument('--dataname', default='', required=False,help='File Data to Load')parser.add_argument('--timeframe', default='weekly', required=False,choices=['daily', 'weekly', 'monthly'],help='Timeframe to resample to')parser.add_argument('--compression', default=1, required=False, type=int,help='Compress n bars into 1')parser.add_argument('--period', default=10, required=False, type=int,help='Period to apply to indicator')return parser.parse_args()if __name__ == '__main__':runstrat()
(1)日线replay

python replaying_example.py --timeframe daily --compression 2

prenext len 1 - counter 1
prenext len 1 - counter 2
prenext len 2 - counter 3
prenext len 2 - counter 4
prenext len 3 - counter 5
prenext len 3 - counter 6
prenext len 4 - counter 7
prenext len 4 - counter 8
prenext len 5 - counter 9
prenext len 5 - counter 10
prenext len 6 - counter 11
prenext len 6 - counter 12
prenext len 7 - counter 13
prenext len 7 - counter 14
prenext len 8 - counter 15
prenext len 8 - counter 16
prenext len 9 - counter 17
prenext len 9 - counter 18
---next len 10 - counter 19
---next len 10 - counter 20
---next len 11 - counter 21
---next len 11 - counter 22
---next len 12 - counter 23
---next len 12 - counter 24
---next len 13 - counter 25
---next len 13 - counter 26
---next len 14 - counter 27
---next len 14 - counter 28
---next len 15 - counter 29
---next len 15 - counter 30
---next len 16 - counter 31
---next len 16 - counter 32
---next len 17 - counter 33
---next len 17 - counter 34
---next len 18 - counter 35
---next len 18 - counter 36
---next len 19 - counter 37
---next len 19 - counter 38
---next len 20 - counter 39
---next len 20 - counter 40
---next len 21 - counter 41
---next len 21 - counter 42
---next len 22 - counter 43
---next len 22 - counter 44
---next len 23 - counter 45
---next len 23 - counter 46
---next len 24 - counter 47
---next len 24 - counter 48
---next len 25 - counter 49
---next len 25 - counter 50
---next len 26 - counter 51
---next len 26 - counter 52
---next len 27 - counter 53
---next len 27 - counter 54
---next len 28 - counter 55
---next len 28 - counter 56
---next len 29 - counter 57
---next len 29 - counter 58
---next len 30 - counter 59
---next len 30 - counter 60
---next len 31 - counter 61
---next len 31 - counter 62
---next len 32 - counter 63
---next len 32 - counter 64
---next len 33 - counter 65
---next len 33 - counter 66
---next len 34 - counter 67
---next len 34 - counter 68
---next len 35 - counter 69
---next len 35 - counter 70
---next len 36 - counter 71
---next len 36 - counter 72
---next len 37 - counter 73
---next len 37 - counter 74
---next len 38 - counter 75
---next len 38 - counter 76
---next len 39 - counter 77
---next len 39 - counter 78
---next len 40 - counter 79
---next len 40 - counter 80
---next len 41 - counter 81
---next len 41 - counter 82
---next len 42 - counter 83
---next len 42 - counter 84
---next len 43 - counter 85
---next len 43 - counter 86
---next len 44 - counter 87
---next len 44 - counter 88
---next len 45 - counter 89
---next len 45 - counter 90
---next len 46 - counter 91
---next len 46 - counter 92
---next len 47 - counter 93
---next len 47 - counter 94
---next len 48 - counter 95
---next len 48 - counter 96
---next len 49 - counter 97
---next len 49 - counter 98
---next len 50 - counter 99
---next len 50 - counter 100
---next len 51 - counter 101
---next len 51 - counter 102
---next len 52 - counter 103
---next len 52 - counter 104
---next len 53 - counter 105
---next len 53 - counter 106
---next len 54 - counter 107
---next len 54 - counter 108
---next len 55 - counter 109
---next len 55 - counter 110
---next len 56 - counter 111
---next len 56 - counter 112
---next len 57 - counter 113
---next len 57 - counter 114
---next len 58 - counter 115
---next len 58 - counter 116
---next len 59 - counter 117
---next len 59 - counter 118
---next len 60 - counter 119
---next len 60 - counter 120
---next len 61 - counter 121
---next len 61 - counter 122
---next len 62 - counter 123
---next len 62 - counter 124
---next len 63 - counter 125
---next len 63 - counter 126
---next len 64 - counter 127
---next len 64 - counter 128
---next len 65 - counter 129
---next len 65 - counter 130
---next len 66 - counter 131
---next len 66 - counter 132
---next len 67 - counter 133
---next len 67 - counter 134
---next len 68 - counter 135
---next len 68 - counter 136
---next len 69 - counter 137
---next len 69 - counter 138
---next len 70 - counter 139
---next len 70 - counter 140
---next len 71 - counter 141
---next len 71 - counter 142
---next len 72 - counter 143
---next len 72 - counter 144
---next len 73 - counter 145
---next len 73 - counter 146
---next len 74 - counter 147
---next len 74 - counter 148
---next len 75 - counter 149
---next len 75 - counter 150
---next len 76 - counter 151
---next len 76 - counter 152
---next len 77 - counter 153
---next len 77 - counter 154
---next len 78 - counter 155
---next len 78 - counter 156
---next len 79 - counter 157
---next len 79 - counter 158
---next len 80 - counter 159
---next len 80 - counter 160
---next len 81 - counter 161
---next len 81 - counter 162
---next len 82 - counter 163
---next len 82 - counter 164
---next len 83 - counter 165
---next len 83 - counter 166
---next len 84 - counter 167
---next len 84 - counter 168
---next len 85 - counter 169
---next len 85 - counter 170
---next len 86 - counter 171
---next len 86 - counter 172
---next len 87 - counter 173
---next len 87 - counter 174
---next len 88 - counter 175
---next len 88 - counter 176
---next len 89 - counter 177
---next len 89 - counter 178
---next len 90 - counter 179
---next len 90 - counter 180
---next len 91 - counter 181
---next len 91 - counter 182
---next len 92 - counter 183
---next len 92 - counter 184
---next len 93 - counter 185
---next len 93 - counter 186
---next len 94 - counter 187
---next len 94 - counter 188
---next len 95 - counter 189
---next len 95 - counter 190
---next len 96 - counter 191
---next len 96 - counter 192
---next len 97 - counter 193
---next len 97 - counter 194
---next len 98 - counter 195
---next len 98 - counter 196
---next len 99 - counter 197
---next len 99 - counter 198
---next len 100 - counter 199
---next len 100 - counter 200
---next len 101 - counter 201
---next len 101 - counter 202
---next len 102 - counter 203
---next len 102 - counter 204
---next len 103 - counter 205
---next len 103 - counter 206
---next len 104 - counter 207
---next len 104 - counter 208
---next len 105 - counter 209
---next len 105 - counter 210
---next len 106 - counter 211
---next len 106 - counter 212
---next len 107 - counter 213
---next len 107 - counter 214
---next len 108 - counter 215
---next len 108 - counter 216
---next len 109 - counter 217
---next len 109 - counter 218
---next len 110 - counter 219
---next len 110 - counter 220
---next len 111 - counter 221
---next len 111 - counter 222
---next len 112 - counter 223
---next len 112 - counter 224
---next len 113 - counter 225
---next len 113 - counter 226
---next len 114 - counter 227
---next len 114 - counter 228
---next len 115 - counter 229
---next len 115 - counter 230
---next len 116 - counter 231
---next len 116 - counter 232
---next len 117 - counter 233
---next len 117 - counter 234
---next len 118 - counter 235
---next len 118 - counter 236
---next len 119 - counter 237
---next len 119 - counter 238
---next len 120 - counter 239
---next len 120 - counter 240
---next len 121 - counter 241
---next len 121 - counter 242
---next len 122 - counter 243
---next len 122 - counter 244
---next len 123 - counter 245
---next len 123 - counter 246
---next len 124 - counter 247
---next len 124 - counter 248
---next len 125 - counter 249
---next len 125 - counter 250
---next len 126 - counter 251
---next len 126 - counter 252
---next len 127 - counter 253
---next len 127 - counter 254
---next len 128 - counter 255

在这里插入图片描述

(2)周线replay

python ./resampling-example.py --timeframe weekly --compression 1
在这里插入图片描述

(3)月线replay

python ./resampling-example.py --timeframe monthly --compression 1
在这里插入图片描述

3. Replay和Resample 应用说明

Replay和Resample 应用场景:

(1)Replay

在 BackTrader 框架中主要用于回放历史数据,以在策略中进行回测和验证。以下是其应用场景的一些示例:

  • 策略回测:开发了一个新的交易策略后,可以使用 cerebro.replaydata() 方法将历史数据输入到该策略中,以评估其性能。通过回放历史数据,可以了解策略在实际市场环境中的表现,并对其参数进行优化。
  • 系统验证:已经开发了一个交易系统,希望对其性能进行测试和验证。可以使用 cerebro.replaydata() 方法将历史数据输入到该系统中,以检查其是否能够有效地跟随市场趋势,并对其性能进行评估。
  • 风险管理:在开发交易策略时,了解风险管理是很重要的。通过使用 cerebro.replaydata() 方法回放历史数据,可以模拟策略在各种市场条件下的风险状况,并制定相应的风险管理措施。
  • 算法交易:对于开发基于算法的交易策略,使用 cerebro.replaydata() 方法回放历史数据可以帮助测试和验证算法的正确性。通过将算法应用于历史数据,可以了解其在不同市场条件下的表现,并对算法进行调整和优化。
(2)Resample

在 BackTrader 框架中主要用于对数据进行重采样,以适应不同的时间间隔或频率。以下是其应用场景的一些示例:

  • 时间间隔转换:有时,原始数据的时间间隔可能不适合策略或分析需求。例如,原始数据可能是每分钟获取的,但策略需要更长的时间间隔,如每小时或每天。在这种情况下,可以使用 cerebro.resampledata() 方法将数据重采样到所需的时间间隔。
  • 数据平滑:重采样数据还可以用于数据平滑。通过将数据重采样到更大的时间间隔,可以减少数据的波动性,从而更好地观察市场趋势和模式。这对于策略开发和验证非常有用,因为它可以帮助消除短期噪音并突出长期趋势。
  • 跨市场对齐:如果策略需要在多个市场进行交易,而这些市场的数据时间间隔不同,那么可以使用 cerebro.resampledata() 方法将不同市场的数据进行对齐。这样可以确保所有数据都以相同的频率进行分析和处理,以实现一致性和可比性。
  • 预测模型:对于基于预测的策略,使用重采样数据可能更为关键。一些预测模型可能需要特定频率的数据输入,如每日收盘价而不是更高频率的数据。通过使用 cerebro.resampledata() 方法,可以将数据调整为预测模型的输入要求。

4.Data Rollover

貌似处理期货交割的时间连续性。

import backtrader as btcerebro = bt.Cerebro()
data0 = bt.feeds.MyFeed(dataname='Expiry0')
data1 = bt.feeds.MyFeed(dataname='Expiry1')
...
dataN = bt.feeds.MyFeed(dataname='ExpiryN')drollover = bt.feeds.RollOver(data0, data1, ..., dataN, dataname='MyRoll', **kwargs)
cerebro.adddata(drollover)cerebro.run()

没有数据,无法测试理解。

5. Filters

应用场景没有明白,暂时放一下。

其他的除了Panda ,用Panda 加载数据前面应用多次了,其他也没有应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的泛型编程—模板

目录 一.什么是泛型编程? ​编辑 ​编辑 二.函数模板 函数模板的实例化 当不同类型形参传参时的处理 使用多个模板参数 三.模板参数的匹配原则 四.类模板 1.定义对象时要显式实例化 2.类模板不支持声明与定义分离 3.非类型模板参数 4.模板的特化 函数模板…

MySQL的安装及如何连接到Navicat和IntelliJ IDEA

MySQL的安装及如何连接到Navicat和IntelliJ IDEA 文章目录 MySQL的安装及如何连接到Navicat和IntelliJ IDEA1 MySQL安装1.1 下载1.2 安装(解压)1.3 配置1.3.1 添加环境变量1.3.2 新建配置文件1.3.3 初始化MySQL1.3.4 注册MySQL服务1.3.5 启动MySQL服务1.3.6 修改默认账户密码 1…

Windows中安装nvm进行Node版本控制

1.nvm介绍 nvm英文全程也叫node.js version management,是一个node.js的版本管理工具。nvm和npm都是node.js版本管理工具,但是为了解决node各种不同之间版本存在不兼容的问题,因此可以通过nvm安装和切换不同版本的node。 2.nvm下载 可在点…

6个免费设计资源站,设计师们赶紧收藏!

本期给大家分享5个免费的设计资源站,设计师必备的设计设计神奇,绝对能帮助你在工作中事半功倍,赶紧收藏吧~ 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 菜鸟图库是我推荐过很多次的网站,主要是站内素材多,像…

PHPStorm一站式配置

phpstorm安装好之后,先别急着编码。工欲善其事,必先利其器,配置好下面这些之后让编码事半功倍。 主题 Appearance & Behavior -> Appearance -> Theme 选中 [Light with Light Header] 亮色较为护眼 关闭更新 Appearance & …

C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# 方法

C# 入门基础知识 - 方法 第8节 方法8.1 C# 函数/方法简介8.2 方法的声明及调用8.2.1 参数列表方法的声明及调用8.2.2 参数数组方法的声明及调用8.2.3、引用参数与值参数 8.3 静态方法和实例方法8.3.1 静态、实例方法的区别8.2.3 静态、实例方法的声明及其调用 8.4 虚方法8.4.1 …

Linux学习(3)——基本命令-文件

1、cat:查看文件内容--上下合并文件 注意:cat只能查看普通的文本文件 如果文件内容过多会显示不全 选项效果-n显示行号包括空行-b跳过空白行编号;注意,在一行打了空格不算空白行,enter键直接跳过这一行才算-s将所有连续…

【JAVA】CyclicBarrier源码解析以及示例

文章目录 前言CyclicBarrier源码解析以及示例主要成员变量核心方法 应用场景任务分解与合并应用示例 并行计算应用示例 游戏开发应用示例输出结果 数据加载应用示例 并发工具的协同应用示例 CyclicBarrier和CountDownLatch的区别循环性:计数器的变化:用途…

[c]用指针进行四个数排序

#include<stdio.h> void swap(int*p1,int*p2)//定义函数&#xff0c;实现两个数值交换 {int temp;temp*p1;*p1*p2;*p2temp; } void psort( int *pa, int *pb,int *pc,int *pd) {int i1;for(i1;i<3;i)//对四个数排序&#xff0c;至少3次循环&#xff0c;交换过后是升序…

DDPM推导笔记

各位佬看文章之前&#xff0c;可以先去看看这个视频&#xff0c;并给这位up主点赞投币&#xff0c;这位佬讲解的太好了&#xff1a;大白话AI 1.前置知识的学习 1.1 正态分布特性 ​ &#xff08;1&#xff09;正态分布的概率密度函数 f ( x ) 1 2 π σ e − ( x − μ ) …

Android13音频录制适配

Android13音频录制适配 前言&#xff1a; 之前写过一篇音频录制的文章&#xff0c;当时是在Android10以下的手机可以成功录制和播放&#xff0c;但是Android10及以上手机提示创建文件失败&#xff0c;最近做过Android13的适配&#xff0c;索性一起把之前的录音也适配了&#…

Python 时间日期处理库函数

标准库 datetime >>> import datetime >>> date datetime.date(2023, 12, 20) >>> print(date) 2023-12-20 >>> date datetime.datetime(2023, 12, 20) >>> print(date) 2023-12-20 00:00:00 >>> print(date.strfti…

gem5 RubyPort: mem_request_port作用与连接 simple-MI_example.py

简介 回答这个问题&#xff1a;RubyPort的口下&#xff0c;一共定义了六个口&#xff0c;分别是mem_request_port&#xff0c;mem_response_port&#xff0c;pio_request_port&#xff0c;pio_response_port&#xff0c;in_ports, interrupt_out_ports&#xff0c;他们分别有什…

【异常】jdk21升级,asm报错Unsupported class file major version 65 springboot2 升级JDK21

【异常】jdk21升级&#xff0c;asm报错Unsupported class file major version 65 错误信息 Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isnt supported yet…

Java对接腾讯多人音视频房间示例

最近在对接腾讯的多人音视频房间&#xff0c;做一个类似于腾讯会议的工具&#xff0c;至于为什么不直接用腾讯会议&#xff0c;这个我也不知道&#xff0c;当然我也不敢问 首先是腾讯官方的文档地址&#xff1a;https://cloud.tencent.com/document/product/1690 我是后端所以…

CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem:大屏高宽自适应问题

前言 继上篇《CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem》。 发现一个有趣的问题&#xff0c;文件 rem.js 中按照宽度设置自适应&#xff0c;适用于大多数页面&#xff0c;但当遇到大屏就不那么合适了。 问题 使用宽度&#xff0c;注意代码第2 和 4 行&#xff1a;…

JAVA面试题分享一百九十九:RabbitMQ 发布确认高级

目录 一、前言 二、发布确认SpringBoot版本 介绍 实战 添加配置类 消息生产者 消息消费者 消息生产者发布消息后的回调接口 三、回退消息 介绍 四、实战 修改配置文件 修改回调接口 五、备份交换机 介绍 实战 修改高级确认发布 配置类 报警消费者 一、前言 …

基于单片机智能自动浇花系统设计

**单片机设计介绍&#xff0c;基于单片机智能自动浇花系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能自动浇花系统是一种可以自动感知周围环境&#xff0c;并执行相应动作的系统。通过使用传感器检测土…

【Netty】NIO与Netty核心概念

目录 NIO编程NIO介绍NIO和BIO的比较缓冲区(Buffer)基本介绍常用API缓冲区对象创建添加数据读取数据 通道(Channel)基本介绍Channel常用类ServerSocketChannelSocketChannel Selector (选择器)基本介绍常用API介绍示例代码 NIO 三大核心原理 Netty核心概念Netty 介绍原生 NIO 存…

【QT表格-6】QTableWidget的currentCellChanged实现中途撤销

背景&#xff1a; 【QT表格-1】QStandardItem的堆内存释放需要单独delete&#xff0c;还是随QStandardItemModel的remove或clear自动销毁&#xff1f;-CSDN博客 【QT表格-2】QTableWidget单元格结束编辑操作endEditting_qtablewidget 单元格编辑事件-CSDN博客 【QT表格-3】Q…