For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
Pandas data feed extension issue
-
Hi all, I am new to use BT. I hope to ask a question related to pandas data feed extension. I was hoping to add a column called "delta" into my data feed but after I run the codes, it always generates the AttributeError: 'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute 'delta'.
from __future__ import (absolute_import, division, print_function, unicode_literals) import datetime # For datetime objects import backtrader as bt import pandas as pd import numpy as np %matplotlib inline class PandasData_delta(bt.feeds.PandasData): Lines = ('delta',) params = (('delta',7),) class MyStrategy(bt.Strategy): def __init__(self): self.delta = self.datas[0].delta if (self.delta > self.datas.high and self.delta != 0): self.buy_signal = 1 elif (self.delta < self.datas.low and self.delta != 0): self.sell_signal = -1 def next(self): if not self.position and self.buy_signal[0] == 1: self.order = self.buy() if self.getposition().size < 0 and self.buy_signal[0] == 1: self.order = self.close() self.order = self.buy() if not self.position and self.sell_signal[0] == 1: self.order =self.sell() if self.getposition().size > 0 and self.sell_signal[0] == 1: self.order = self.close() self.order = self.sell() if __name__ == '__main__': # 1. Create a cerebro cerebro = bt.Cerebro(stdstats=True) # 2. Add data feed # 2.1 Creat a data feed # load dataframe data = pd.read_csv('futures.csv') data['datetime'] = pd.to_datetime(data['datetime']) data.set_index('datetime', inplace=True) data = PandasData_delta(dataname=data, fromdate=datetime.datetime(2017, 8, 1), todate=datetime.datetime(2017, 8, 10) ) # 2.2Add the Data Feed to Cerebro cerebro.adddata(data, name='data') # 3 Add strategy cerebro.addstrategy(MyStrategy) # broker setting cerebro.broker.setcash(100000.0) cerebro.addobserver(bt.observers.Benchmark, data=data) # 4. Run cerebro.run() pos = cerebro.broker.getposition(data) print('size:', pos.size) print('price:', pos.price) print('value:', cerebro.broker.get_value()) print('cash:', cerebro.broker.get_cash()) # 5.Plot result cerebro.plot(style='candle')
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-23-28e9b1b66044> in <module> 82 83 # 4. Run ---> 84 cerebro.run() 85 86 pos = cerebro.broker.getposition(data) ~\Anaconda3\lib\site-packages\backtrader\cerebro.py in run(self, **kwargs) 1125 # let's skip process "spawning" 1126 for iterstrat in iterstrats: -> 1127 runstrat = self.runstrategies(iterstrat) 1128 self.runstrats.append(runstrat) 1129 if self._dooptimize: ~\Anaconda3\lib\site-packages\backtrader\cerebro.py in runstrategies(self, iterstrat, predata) 1215 sargs = self.datas + list(sargs) 1216 try: -> 1217 strat = stratcls(*sargs, **skwargs) 1218 except bt.errors.StrategySkipError: 1219 continue # do not add strategy to the mix ~\Anaconda3\lib\site-packages\backtrader\metabase.py in __call__(cls, *args, **kwargs) 86 _obj, args, kwargs = cls.donew(*args, **kwargs) 87 _obj, args, kwargs = cls.dopreinit(_obj, *args, **kwargs) ---> 88 _obj, args, kwargs = cls.doinit(_obj, *args, **kwargs) 89 _obj, args, kwargs = cls.dopostinit(_obj, *args, **kwargs) 90 return _obj ~\Anaconda3\lib\site-packages\backtrader\metabase.py in doinit(cls, _obj, *args, **kwargs) 76 77 def doinit(cls, _obj, *args, **kwargs): ---> 78 _obj.__init__(*args, **kwargs) 79 return _obj, args, kwargs 80 <ipython-input-23-28e9b1b66044> in __init__(self) 27 28 def __init__(self): ---> 29 self.delta = self.datas[0].delta 30 if (self.delta > self.datas.high and self.delta != 0): 31 self.buy_signal = 1 ~\Anaconda3\lib\site-packages\backtrader\lineseries.py in __getattr__(self, name) 459 # in this object if we set an attribute in this object it will be 460 # found before we end up here --> 461 return getattr(self.lines, name) 462 463 def __len__(self): AttributeError: 'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute 'delta'
I could not figure out the reason why and I tried to follow answers from previous posts but I am still stuck. Please help if possible. Thank you very much.