扩展数据源#
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’,)
在 GenericCSVData 中 openinterest 的索引位置为 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)