CSV数据饲料开发 – backtrader中文教程
CSV数据馈送Development
backtrader
已经提供了一个通用CSV数据饲料和一些具体的CSV数据供稿。总结:
- GenericCSVData
- VisualChartCSVData
- YahooFinanceData(网上下载)
- YahooFinanceCSVData(对于已经下载的数据)
- BacktraderCSVData(以-house …测试意,但也可以使用)
但即便如此,最终用户可能希望开发一个特定的CSV支持数据Feed.
The平常的座右铭是:“这是谈何容易”。其实结构是为了使其easy.
Steps:
- 继承
backtrader.CSVDataBase
- 定义任何
params
如果needed - Do任何初始化
start
method - Do任何清理的
stop
method - Define了
_loadline
方法的实际工作happens这个方法接收一个参数:linetokens.
As顾名思义此包含令牌当前行具有后根据
separator
参数被splitten(从继承基类)如果这样做的工作后,有新的数据…填写相应的线和返回
True
如果没有可供使用的,因此分析已经走到了尽头:回报
False
返回
False
甚至可能不被需要,如果幕后码该读取文件线发现没有更多行parse.
Things其已经考虑到:
- 打开文件(或接收一个类文件对象)
- 跳过如果指示为present
- Reading的lines
- Tokenizing的lines
- Preloading支持(在存储器中一次加载整个数据馈送)的标题行
通常一个例子胜过千言万语需求描述。让我们用一个在内部定义的CSV解析代码的简化版本从BacktraderCSVData
。这一次不需要初始化或清理(这可能是打开套接字和后来关闭它,例如).
Note
backtrader
数据馈送含有常用的工业标准饲料,其要填补的。即:
- datetime
- open
- high
- low
- close
- volume
- open interest
如果你的策略/算法或简单的数据过目只需要,例如收盘价你可以离开其他不变(每个迭代填充它们自动地与浮子(“的NaN”)值之前,终端用户码有机会做anything.
在这个例子中只有每日格式支持:
import itertools ... import backtrader as bt class MyCSVData(bt.CSVDataBase): def start(self): # Nothing to do for this data feed type pass def stop(self): # Nothing to do for this data feed type pass def _loadline(self, linetokens): i = itertools.count(0) dttxt = linetokens[next(i)] # Format is YYYY-MM-DD y = int(dttxt[0:4]) m = int(dttxt[5:7]) d = int(dttxt[8:10]) dt = datetime.datetime(y, m, d) dtnum = date2num(dt) self.lines.datetime[0] = dtnum self.lines.open[0] = float(linetokens[next(i)]) self.lines.high[0] = float(linetokens[next(i)]) self.lines.low[0] = float(linetokens[next(i)]) self.lines.close[0] = float(linetokens[next(i)]) self.lines.volume[0] = float(linetokens[next(i)]) self.lines.openinterest[0] = float(linetokens[next(i)]) return True
代码期望所有字段到位,并转换为浮动,除了对于具有固定YYYY-MM-DD格式并且可以在不被解析的日期时间使用datetime.datetime.strptime
.
<>46<>GenericCSVData
确实that.
买者Emptor
使用GenericCSVData
现有的饲料和继承了很多可实现以支持formats.
Let对塞拉图的日常格式添加支持(总是存储在CSV格式).
定义(通过查看“.dly’数据文件中的一个:
- Fields日期,开盘价,最高价,最低价,收盘价卷,OpenInterest
The行业标准的人以及那些已经被支持
GenericCSVData
以相同的顺序(这也是工业标准) - Separator:
- 日期Format:YYYY / MM/ DD
A解析器,用于这些文件:
class SierraChartCSVData(backtrader.feeds.GenericCSVData): params = (("dtformat", "%Y/%m/%d"),)
的params
定义简单地重新定义在现有参数之一基类。在这种情况下,只是日期格式化字符串需要change.
Et瞧…解析器的塞拉利昂Chart低于finished.
Here的参数定义GenericCSVData
作为提醒:
class GenericCSVData(feed.CSVDataBase): params = ( ("nullvalue", float("NaN")), ("dtformat", "%Y-%m-%d %H:%M:%S"), ("tmformat", "%H:%M:%S"), ("datetime", 0), ("time", -1), ("open", 1), ("high", 2), ("low", 3), ("close", 4), ("volume", 5), ("openinterest", 6), )