I am recieving the following error:
Runtime Error: One or more errors occurred. Specified cast is not valid.
The goal of my program is to use a rolling window of an input variable and and output variable which here is the price to create a prediction for the price. This is my program:
#All appropriate variables are imported before this line
# Demonstration of using coarse and fine universe selection together to filter down a smaller universe of stocks.
class FrameworkAlgorithm(QCAlgorithm):
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.SetStartDate(2014,1,1) #Set Start Date
self.SetEndDate(2015,1,1) #Set End Date
self.SetCash(50000) #Set Strategy Cash
self.UniverseSettings.Resolution = Resolution.Daily
self.AddUniverse(self.CoarseSelectionFunction, self.FineSelectionFunction)
self.AddEquity("SPY", Resolution.Daily)
self.SetBenchmark("SPY")
self.__numberOfSymbols = 100
self.__numberOfSymbolsFine = 30
self._changes = None
self.Schedule.On(self.DateRules.MonthStart("SPY"), self.TimeRules.AfterMarketOpen("SPY"), Action(self.Rebalancing))
self.splotName = 'Strategy Info'
sPlot = Chart(self.splotName)
sPlot.AddSeries(Series('Leverage', SeriesType.Line, 0))
self.AddChart(sPlot)
self.historicalPERatio = {}
self.historicalPricetoCashRatio={}
#self.historicalTotalDebtEquityRatioGrowth = {}
self.FCFRatio = {}
#self.historicalEquityPerShareRatio = {}
#self.historicalEVToEBITDA = {}
self.CFOPerShare = {}
self.Y = {}
self.rollingWindowSize = 90;
self.averages = { };
def CoarseSelectionFunction(self, coarse):
x = list(coarse)
CoarseWithFundamental = [x for x in coarse if (x.HasFundamentalData) and (float(x.Price) > 5)]
filtered = [x for x in CoarseWithFundamental if x.HasFundamentalData
and x.Volume > 0
and x.Price > 0]
# sort descending by daily dollar volume
sortedByDollarVolume = sorted(filtered, key=lambda x: x.DollarVolume, reverse=True)
#HasFundamentalData = sorted(coarse, key=lambda x: HasFundamentalData, reverse=True)
top = sortedByDollarVolume[:self.__numberOfSymbols]
# return the symbol objects of the top entries from our sorted collection
return top
def FineSelectionFunction(self, fine):
self.r = [x for x in fine if x.ValuationRatios.PERatio]
for x in self.r:
if x.Symbol not in self.historicalPERatio.keys():
# Set up rolling window for new ticker
self.historicalPERatio[x.Symbol] = RollingWindow[Decimal](self.rollingWindowSize)
self.historicalPERatio[x.Symbol].Add(x.ValuationRatios.PERatio) #your job is to find the decimal current version for all the following variables
#self.prices_y[x.Symbol] = list(history.loc[x.Value]['close'])[1:]
self.r = [x for x in fine if PredictionEngine(x.historicalPERatio, x.Y ).predictionScore() > float(x.Price) or PredictionEngine(x.historicalPERatio , x.Y ).predictionScore() < float(x.Price)]
#self.a = (x for x in self.r
r = self.r
topFine = sorted(self.r, key=lambda x: x.ValuationRatios.PERatio, reverse = False)
self.topFine = [x.Symbol for x in topFine]
self.symbols = [i.Symbol for i in topFine]
self.y = self.History(self.symbols, self.rollingWindowSize, Resolution.Daily)
for i in self.symbols:
self.Debug(i.Symbol)
#self.Debug(self.symbols)
#[x.Symbol for x in self.r]
return self.symbols
def OnData(self, data):
print("asdf")
symbols = self.symbols
for x in symbols:
if PredictionEngine(x.historicalPERatio,x.y).predictionScore() > float(x.Price):
self.SetHoldings(security, 0.1)
print("Security")
self.Debug(security)
#self.historicalPERatio[x.Symbol]
self._changes = None
#self.Debug("asdf")
# if we have no changes, do nothing
#if self.changes == None: return
# liquidate removed securities
#for security in self._changes.RemovedSecurities:
#if security.Invested:
#for security in self.symbols:
#self.SetHoldings(security, 0.1*finalFactor)
def Rebalancing(self):
print("b")
for security in self.Portfolio.Values:
if PredictionEngine(security.historicalPERatio,security.y).predictionScore() < float(security.Price)*1.08 and security.Invested:
self.Liquidate(security.Symbol)
class PredictionEngine(object):
def __init__(self):
self.historicalPERatio = historicalPERatio
self.y = Y
def predictionScore(self):
vector_factor_direction= 0
scalar = StandardScaler()
p = 1
pe = pd.DataFrame(self.historicalPERatio)
#after this line is where I do all the magical things needed to predict prices
return predictions