您的位置:  首页 » 量化交易与机器学习 » backtrader » CSV数据饲料开发 – backtrader中文教程

CSV数据馈送Development

backtrader已经提供了一个通用CSV数据饲料和一些具体的CSV数据供稿。总结:

  • GenericCSVData
  • VisualChartCSVData
  • YahooFinanceData(网上下载)
  • YahooFinanceCSVData(对于已经下载的数据)
  • BacktraderCSVData(以-house …测试意,但也可以使用)

但即便如此,最终用户可能希望开发一个特定的CSV支持数据Feed.

The平常的座右铭是:“这是谈何容易”。其实结构是为了使其easy.

Steps:

  • 继承backtrader.CSVDataBase
  • 定义任何params如果needed
  • Do任何初始化startmethod
  • Do任何清理的stopmethod
  • 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),
    )

发表评论

电子邮件地址不会被公开。 必填项已用*标注