I would like to build some custom indicators for an Alpha Model. 

in this case I would like to replace a standard momentum indicator with a exponetial slope, like suggested by Andreas Clenow in his book.

Does someone have an clue why this is not working. During debugging I do not get any value for input.Close in the class for the custom indicator, but i'm just using this example which is similar




from datetime import timedelta
import numpy as np
from scipy import stats
from collections import deque

class CustomSlope(PythonIndicator):
def __init__(self, name, period):
self.Name = name
self.Time = datetime.min
self.Value = 0
self.queue = deque(maxlen=period)

# Update method is mandatory
def Update(self, input):
y= [np.log(float(data)) for data in input.Close]
x = [range(len(y))]
slope,r_value = stats.linregress(x,y)[0],stats.linregress(x,y)[2]
return slope

class MOMAlphaModel(AlphaModel):
def __init__(self):
self.mom = []
self.cslope = CustomSlope('custom', 100)
if not self.cslope.IsReady:

def OnSecuritiesChanged(self, algorithm, changes):
for security in changes.AddedSecurities:
symbol = security.Symbol
#self.mom.append({"symbol":symbol, "indicator":algorithm.MOM(symbol, 100, Resolution.Daily)})

algorithm.RegisterIndicator(symbol, self.cslope, Resolution.Daily)

self.mom.append({"symbol":symbol, "indicator":self.cslope.Value})

def Update(self, algorithm, data):
insights = []
ordered = sorted(self.mom, key=lambda kv: kv["indicator"].Current.Value, reverse=True)[:4]
for x in ordered:
symbol = x['symbol']
insights.append( Insight.Price(symbol, timedelta(1), InsightDirection.Up) )
return insights