import backtrader as bt class Backtest(bt.Strategy): def __init__(self): self.signal = self.data.signal def next(self): if self.signal == 1: self.buy() elif self.signal == -1: self.sell() cerebro = bt.Cerebro() data = bt.feeds.PandasData(dataname=data) cerebro.adddata(data) cerebro.addstrategy(Backtest) cerebro.run()报错'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute 'signal'
时间: 2023-06-17 19:09:07 浏览: 203
bst.rar_bst_bst tree
这个错误提示意味着你的 `data` 对象没有名为 `signal` 的属性。你需要确认你的 `data` 对象中是否有名为 `signal` 的列,并且已经正确地被加载到了 `data` 对象中。如果你已经确定 `signal` 列存在并且被正确地加载到了 `data` 对象中,那么你需要检查一下 `data` 对象的数据类型是否正确。
另外,你需要在初始化函数中调用 `super().__init__()`,这样你才能够访问 `self.data` 对象。所以你需要修改你的代码如下:
```python
import backtrader as bt
class Backtest(bt.Strategy):
def __init__(self):
super().__init__() # 添加这行代码
self.signal = self.data.signal
def next(self):
if self.signal == 1:
self.buy()
elif self.signal == -1:
self.sell()
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=data)
cerebro.adddata(data)
cerebro.addstrategy(Backtest)
cerebro.run()
```
如果你的数据类型是 Pandas DataFrame,确保你已经正确地将 `signal` 列设置为了索引列或时间序列,并且在加载数据时使用了 `index_col` 或 `datetime` 参数。
阅读全文