Backtrader 文档学习-Data Feeds(下)

2023-12-21 09:36

本文主要是介绍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 加载数据前面应用多次了,其他也没有应用场景。

这篇关于Backtrader 文档学习-Data Feeds(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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 编辑器项目模式分类工程

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装