import numpy as np import pandas as pd from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Data import * from datetime import timedelta from System.Collections.Generic import List from QuantConnect.Data.UniverseSelection import * class QualityMomentumModel(QCAlgorithm): def Initialize(self): self.SetStartDate(2010, 1, 1) # Set Start Date self.SetEndDate(2015, 1, 1) self.SetCash(1000) # Set Strategy Cash momentumlookbackdays = 126 #Momentum lookback momentumskipdays = 10 overalllookback = 136 self.spy = self.AddEquity("SPY", Resolution.Minute) #add SPY to use for trends #list of bond etfs for when markets down. self.AddEquity("TLT").Symbol self.AddEquity("IEF").Symbol self.BONDS = ['TLT', 'IEF'] # Add bonds self.stocks_to_hold = [] self.trend_up = 0 self.UniverseSettings.Resolution = Resolution.Minute #update the universe every minute #adding a universe of stocks #schedule function for making trades self.Schedule.On(self.DateRules.MonthStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 30), Action(self.trade)) self.Schedule.On(self.DateRules.MonthStart("SPY"), self.TimeRules.BeforeMarketClose("SPY", 30), Action(self.trade)) #15 Day moving average of SPY self.spy_ma_fast = self.SMA("SPY", 10) #100 Day moving average of SPY self.spy_ma_slow = self.SMA("SPY", 100) if self.spy_ma_fast >= self.spy_ma_slow: self.trend_up = 1 self.AddUniverse(self.CoarseSelectionFunction, self.FineSelectionFunction) def CoarseSelectionFunction(self, coarse): #drop any securities that dont have fundamental data and cost less than $5 selected = [x for x in coarse if (x.HasFundamentalData) and (float(x.Price) > 5)] filtered = sorted(selected, key=lambda x: x.DollarVolume, reverse=True) return [x.Symbol for x in filtered[:2000]] def FineSelectionFunction(self, fine): #filter with fundamentals self.quality = sorted(fine, key = lambda f: f.OperationRatios.ROIC.SixMonths, reverse=True) self.high_quality = sorted(self.quality, key = lambda f: f.OperationRatios.LongTermDebtEquityRatio.OneYear + f.ValuationRatios.CashReturn + f.ValuationRatios.FCFYield, reverse=True) self.momentum = sorted(self.high_quality, key = lambda f: f.ValuationRatios.CashReturn.overalllookback - f.ValuationRatios.CashReturn.momentumlookbackdays, reverse=True) self.TQ = [x.Symbol for x in self.momentum[:5]] #search for top 5 equities with the highest ROIC return self.TopTQ[:5]#take the 5 with the highest ROIC def OnData(self, data): pass def trade(self): self.stocks_to_hold = [] for i in self.TopTQ: self.stocks_to_hold.append(i) if self.trend_up == 1: for i in self.Portfolio.Values: if (i.Invested) and (i not in self.BONDS and self.stocks_to_hold): self.Liquidate(i.Symbol) for i in self.stocks_to_hold: self.SetHoldings(i, 0.7) for i in self.BONDS: self.SetHoldings(i, 0.3)

In this algo, I want to use the difference in the returns for each equity to determine momentum. In self.momentum, I want to use custom lengths. But I get the error, 

'float' object has no attribute 'overalllookback'
at FineSelectionFunction in main.py:line 75

Is there some way to set a custom length for fundamental factors, rather than "OneYear" or "SixMonths"?