Backtrader篇-制作自定义的实时DataFeed

目录

    • 自定义DataFeed开发篇
      • 预定义
      • 定义一个DataFeed类
      • 添加初始化过程
      • 设定开始
      • 做一些清理
      • 数据加载流程

自定义DataFeed开发篇

Todo List:

  • 继承backtrader.feed.DataBase
  • 添加自定义参数
  • 可能需要重写__init__(self)start(self)方法
  • 可能需要重写stop(self)方法
  • 必须重写_load(self)方法

预定义

我们尝试构建一个虚拟的实时系统,我们将通过一个预定以的生成器来不断生成数据。

定义一个DataFeed类

  • 继承backtrader.feed.DataBase
class MyFeed(bt.feed.DataBase):
    ...

添加初始化过程

- [x] 重写`__init__(self)`
class MyFeed(bt.feed.DataBase):

    def __init__(self):
        ...

设定开始

  • 重写start(self)方法
class MyFeed(bt.feed.DataBase):

    data_origin = None

    def data_generator(self):
        while True:
            ... # 定义一些随机假数据
            yield data # 返回数据
            time.sleep(5) # 实时系统 定义为每5秒生成一条假数据

    def start(self):
        self.data_origin = self.data_genrator()

做一些清理

  • 重写stop(self)方法
class MyFeed(bt.feed.DataBase):
    def stop(self):
        ...

数据加载流程

  • 重写_load(self)方法
class MyFeed(bt.feed.DataBase):

    ...

    def _load(self):
        try:
        	data = next(self.data_origin)
        except StopIteration:
            # 停止迭代 证明数据已经停止生成
            return False
        
        dt, o, h, l, c, v, oi = data

        self.lines.datetime[0] = dt
        self.lines.open[0] = o # 设定该时间的开盘价
        self.lines.high[0] = h # 设定该时段的最高价位
        self.lines.low[0] = l # 设定该时段的最低价位
        self.lines.close[0] = c # 设定该时段的收盘价
        self.lines.volume[0] = v # 设定该时段成交量
        self.lines.openinterest[0] = oi # 该时段的持仓量

        return True

你可能感兴趣的:(个人探究,python)