from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, classification_report from datetime import datetime from datetime import timedelta import pandas as pd import numpy as np class TransdimensionalTachyonCompensator(QCAlgorithm): month = 0 def Initialize(self): self.SetStartDate(2020, 1, 1) # Set Start Date self.SetEndDate(2020, 10, 27) self.SetCash(100000) # Set Strategy Cash self.trading_symbols = [] self.UniverseSettings.Resolution = Resolution.Minute self.AddUniverse(self.CoarseSelectionFunction) self.lookback_period = 60 self.spy = self.AddEquity("SPY").Symbol # self.Train(self.DateRules.MonthStart(), self.TimeRules.AfterMarketOpen(self.spy, 0), self.train) self.Schedule.On(self.DateRules.MonthStart(), self.TimeRules.AfterMarketOpen(self.spy, 0), self.train) def CoarseSelectionFunction(self, coarse): if self.Time.month == self.month: return Universe.Unchanged self.month = self.Time.month sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True) self.trading_symbols = [ x.Symbol for x in sortedByDollarVolume if x.HasFundamentalData ][:20] return self.trading_symbols def train(self): if not self.trading_symbols: return price_history = self.History(self.trading_symbols , self.lookback_period , Resolution.Daily) symbol1 = [self.trading_symbols[0] for i in range(self.lookback_period)] symbol2 = [self.trading_symbols[1] for i in range(self.lookback_period)] symbol3 = [self.trading_symbols[2] for i in range(self.lookback_period)] symbol4 = [self.trading_symbols[3] for i in range(self.lookback_period)] symbol5 = [self.trading_symbols[4] for i in range(self.lookback_period)] symbol6 = [self.trading_symbols[5] for i in range(self.lookback_period)] symbol7 = [self.trading_symbols[6] for i in range(self.lookback_period)] symbol8 = [self.trading_symbols[7] for i in range(self.lookback_period)] symbol9 = [self.trading_symbols[8] for i in range(self.lookback_period)] symbol10 = [self.trading_symbols[9] for i in range(self.lookback_period)] symbol11 = [self.trading_symbols[10] for i in range(self.lookback_period)] symbol12 = [self.trading_symbols[11] for i in range(self.lookback_period)] symbol13 = [self.trading_symbols[12] for i in range(self.lookback_period)] symbol14 = [self.trading_symbols[13] for i in range(self.lookback_period)] symbol15 = [self.trading_symbols[14] for i in range(self.lookback_period)] symbol16 = [self.trading_symbols[15] for i in range(self.lookback_period)] symbol17 = [self.trading_symbols[16] for i in range(self.lookback_period)] symbol18 = [self.trading_symbols[17] for i in range(self.lookback_period)] symbol19 = [self.trading_symbols[18] for i in range(self.lookback_period)] symbol20 = [self.trading_symbols[19] for i in range(self.lookback_period)] close_list = [] open_list = [] high_list = [] low_list = [] volume_list = [] date_list = [ str(price_history.index[i][1]).split(" ")[0] for i in range(price_history.shape[0]) ] for i in range(price_history.shape[0]): close_list.append(price_history.close.iloc[i]) open_list.append(price_history.open.iloc[i]) high_list.append(price_history.high.iloc[i]) low_list.append(price_history.low.iloc[i]) volume_list.append(price_history.volume.iloc[i]) d = {'symbol': symbol1 + symbol2 + symbol3 + symbol4 + symbol5 + symbol6 + symbol7 + symbol8 + symbol9 \ + symbol10 + symbol11 + symbol12 + symbol13 + symbol14 + symbol15 + symbol16 + symbol17 + symbol18 + \ symbol19 + symbol20, 'datetime': date_list, 'close': close_list, 'high': high_list, 'low': low_list, 'open': open_list, 'volume': volume_list } self.price_data = pd.DataFrame(data=d) self.price_data = self.price_data[['symbol','datetime','close','high','low','open','volume']] # sort the values by symbol and then date self.price_data.sort_values(by = ['symbol','datetime'], inplace = True) # calculate the change in price self.price_data['change_in_price'] = self.price_data['close'].diff() # identify rows where the symbol changes mask = self.price_data['symbol'] != self.price_data['symbol'].shift(1) # For those rows, let's make the value null self.price_data['change_in_price'] = np.where(mask == True, np.nan, self.price_data['change_in_price']) # print the rows that have a null value, should only be 5 self.price_data[self.price_data.isna().any(axis = 1)] # Calculate the 14 day RSI n = 14 # First make a copy of the data frame twice up_df, down_df = self.price_data[['symbol','change_in_price']].copy(), self.price_data[['symbol','change_in_price']].copy() # For up days, if the change is less than 0 set to 0. up_df.loc['change_in_price'] = up_df.loc[(up_df['change_in_price'] < 0), 'change_in_price'] = 0 # For down days, if the change is greater than 0 set to 0. down_df.loc['change_in_price'] = down_df.loc[(down_df['change_in_price'] > 0), 'change_in_price'] = 0 # We need change in price to be absolute. down_df['change_in_price'] = down_df['change_in_price'].abs() # Calculate the EWMA (Exponential Weighted Moving Average), meaning older values are given less weight compared to newer values. ewma_up = up_df.groupby('symbol')['change_in_price'].transform(lambda x: x.ewm(span = n).mean()) ewma_down = down_df.groupby('symbol')['change_in_price'].transform(lambda x: x.ewm(span = n).mean())

Hi guys, I've been trying to apply a lambda transform to my "change in price" column values, sorted by symbol values. 

However, I'm being thrown the error: 

"2020-04-01 09:31:00 Runtime Error: In Scheduled Event 'MonthStart: SPY: 0 min after MarketOpen', TypeError : Cannot get managed object
  at train in main.py:line 160 :: ewma_up = up_df.groupby(\'symbol\')[\'change_in_price\'].transform(lambda x: x.ewm(span = n).mean())
 TypeError : Cannot get managed object"

This does not seem to be a common issue as well, and the solutions provided in other threads do not help for me. 

Any help will be greatly appreciated, thank you!
 

Author