I tried to create a new indicator myself and try to get the last N days of data to do OLS and return the value to line, unfortunately my strategy get 0 in value.

class toroOLS(bt.Indicator):

#lines = ('slope','intercept',)

lines=('slope',)

params = (('period', 20),)

def __init__(self):
self.addminperiod(self.params.period)
def next(self):
closes = pd.Series(self.data.close.get(size=self.p.period))
x = np.arange(self.p.period).reshape(-1,1)
x = sm.add_constant(x, prepend=True)
#toro, intercept = sm.OLS(x, closes).fit().params
#self.lines.slope[0] = toro
#self.lines.intercept[0] = intercept
toro = linear_model.LinearRegression().fit(x, closes)
annualize_return = (((1+toro.coef_[0])**250) - 1)*100
self.lines.slope[0] = annualize_return

==========================================

**This is where the indicator is used. Can you please suggest?**

class TestStrategy(bt.Strategy):

params = (

('exitbars', 5),

)

def log(self, txt, dt=None):
''' Logging function fot this strategy'''
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
# Keep a reference to the "close" line in the data[0] dataseries
self.dataclose = self.datas[0].close
self.slope = toroOLS(period=20)

.....

def next(self):

# Simply log the closing price of the series from the reference

self.log('Close, %.2f' % self.dataclose[0])

self.log('Slope, %.10f' % self.slope[0])