`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!