From ad63ab08063e762ad79a1a54a21c2ec93d00cb23 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Tue, 17 Feb 2026 18:37:56 -0800 Subject: [PATCH] Split out AI features --- WebServer/AIPython/features.py | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 WebServer/AIPython/features.py diff --git a/WebServer/AIPython/features.py b/WebServer/AIPython/features.py new file mode 100644 index 00000000..9c62d5ab --- /dev/null +++ b/WebServer/AIPython/features.py @@ -0,0 +1,38 @@ +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()) + + # 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