import pandas as pd def MakeFeatures(df, i): # Remove the ticker column df.columns = df.columns.get_level_values(0) # Make sure Date is a number object df = df.reset_index() df['Date'] = pd.to_numeric(pd.to_datetime(df['Date'])) # Add the Symbol column for tracking | as an int 1 hot encoded df['Symbol'] = i # Add feature Spread df['Spread'] = abs( df['High'] - df['Low'] ) # Add feature for Returns df['Return'] = df['Close'].pct_change() # Add feature for volitility last 5 df['Volatility_5'] = df['Return'].transform(lambda x: x.rolling(5).std()) # Add feature for volitility last 20 df['Volatility_20'] = df['Return'].transform(lambda x: x.rolling(20).std()) # This is our training metric df['Target_Close_Tomorrow'] = df['Close'].shift(-1).pct_change() # Return new df with new features return df def CleanDF(df): # Make date the index so it doesnt influence the training df.set_index('Date', inplace=True) # Drop rows with null values df.dropna(inplace=True) # Return new df thats cleaned return df