扩展数据源#

GitHub上的问题实际上推动了我完成文档部分,或者帮助我理解backtrader是否具有我最初设想的易用性和灵活性以及沿途做出的决策。

在这种情况下,是 Issue #9 <https://github.com/mementum/backtrader/issues/9> _。

问题最终似乎可以概括为:

  • 用户可以轻松扩展现有机制以添加额外的信息,以行的形式传递给其他现有价格信息位置,如“open”,“high”等吗?

就我理解的问题来说,答案是: 是的

作者似乎有以下要求(来自 Issue #6 <https://github.com/mementum/backtrader/issues/6> _):

  • 将数据源解析为CSV格式

  • 使用 GenericCSVData 加载信息

    这个通用的CSV支持是针对此 Issue #6 <https://github.com/mementum/backtrader/issues/6> _ 开发的。

  • 额外的字段显然包含需要传递给解析的CSV数据的P/E信息让我们在 csv-data-feed-development ` 和 :ref: generic-csv-datafeed` 示例文章的基础上进行开发。

步骤:

  • 假设 P/E 信息在被解析的 CSV 数据中已经设置好了。

  • 使用 GenericCSVData 作为基类。

  • 扩展现有的行(open/high/low/close/volume/openinterest)以包含 pe

  • 添加一个参数,让调用者确定 P/E 信息所在的列位置。

结果如下:

```python from backtrader.feeds import GenericCSVData

class GenericCSV_PE(GenericCSVData):

# 将 ‘pe’ 行添加到从基类继承的行中 lines = (‘pe’,)

```

GenericCSVDataopeninterest 的索引位置为 7 … 需要加 1 在继承自基类的参数中添加该参数 ` params = (('pe', 8),) `

工作完成…

以后在策略中使用此数据源时:: ``` import backtrader as bt


class MyStrategy(bt.Strategy):

def next(self):

if self.data.close > 2000 and self.data.pe < 12:

# TORA TORA TORA — 离开这个市场 self.sell(stake=1000000, price=0.01, exectype=Order.Limit)

```显然,数据源中那行额外的数据没有自动化绘图支持。

最好的替代方案是对该行进行简单移动平均,并在单独的坐标轴上绘制图形:

```python import backtrader as bt import backtrader.indicators as btind


class MyStrategy(bt.Strategy):

def __init__(self):

# 该指标将自动注册并绘制,即使在类中没有明显的引用 btind.SMA(self.data.pe, period=1, subplot=False)

def next(self):

if self.data.close > 2000 and self.data.pe < 12:

# TORA TORA TORA — 离开这个市场 self.sell(stake=1000000, price=0.01, exectype=Order.Limit)

#