System.InvalidCastException: Specified cast is not valid.
OR
Runtime Error: Specified cast is not valid.
Why?
[backtest doesn't show up on the list, will have to paste here instead of attach]
# System.InvalidCastException: Specified cast is not valid.
# Runtime Error: Specified cast is not valid.
import pandas as pd
class Zoo(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017,10,1)
self.SetEndDate(2017,11,1)
self.SetCash(100000)
self.averages = {}
self.AddUniverse(self.CoarseSelection)
def CoarseSelection(c, coarse):
columns = ['Price', 'HasFundamentalData']
data_df = pd.DataFrame.from_records(
[[getattr(s, name) for name in columns] for s in coarse],
index = [s for s in coarse], columns = columns, coerce_float=True)
data_df = data_df.query("(Price > .50) and (Price < .60) and HasFundamentalData").nsmallest(99, 'Price')
diffs = pd.Series({})
for cf in data_df.index:
sym = cf.Symbol
if sym not in c.averages:
c.averages[sym] = SymbolData(sym) # initialize
c.averages[sym].update(cf) # Update the SymbolData object with current EOD price?
sma1 = c.averages[sym].sma1.Current.Value ; sma1 = float(sma1) if sma1 else 0.0
sma2 = c.averages[sym].sma2.Current.Value ; sma2 = float(sma2) if sma2 else 0.0
diff = sma1 - sma2
if not diff: continue
z = str(sym) # to avoid diffs[sym] = diff ... 'object is not callable' (another confusing error)
diffs[z] = diff
'''
if len(diffs.index): c.Log(diffs.size)
And another confusing error:
Runtime Error: Trying to dynamically access a method that does not exist throws a TypeError exception.
To prevent the exception, ensure each parameter type matches those required by the Log method.
Please checkout the API documentation. at CoarseSelection in main.py:line 32
TypeError : No method matches given arguments for Log (Open Stacktrace)
Huh? len() or .size ???? Expected any of these would work fine ...
c.Log(diffs) c.Log(len(diffs)) c.Log(diffs.size)
'''
c.Log(diffs)
return list(diffs.index)
class SymbolData(object):
def __init__(self, symbol):
self.symbol = symbol
self.sma1 = SimpleMovingAverage(3)
self.sma2 = SimpleMovingAverage(10)
self.is_ready = False
def update(self, value):
self.is_ready = self.sma1.Update(value.EndTime, value.Price) and self.sma2.Update(value.EndTime, value.Price)