Model For Datathon
This repo holds 2 final models that was used and made for Ristek Datathon. The first model is a Linear Regression Model, and the other is an LSTM Model. The datasets use to train the model rely with the yfinance python module, which is a module that was made by Yahoo! that stores the stock market data, from what price it opens, close, the highest price it reach on that day and the lowest and the volume. It was also slighly modified with some added features that was used for the Linear Regression Model, adding SMA, EMA and RSI. While the LSTM Model only relied only on the Closing price of the stock and without the added modified dataset due to during testing it generated the best result when just using the close feature.
Using Linear Regression Model
Sample python code to see the linear regression model
from joblib import load
import yfinance as yf
# Grab the most recent stock data
data = yf.download('AAPL', period='40d')
# Adding SMA (Simple Moving Average) into the data
data['SMA_5'] = data['Close'].rolling(window=5).mean()
data['SMA_10'] = data['Close'].rolling(window=10).mean()
# Adding EMA (Exponential Moving Average) into the data
data['EMA_5'] = data['Close'].ewm(span=5, adjust=False).mean()
data['EMA_10'] = data['Close'].ewm(span=10, adjust=False).mean()
# Adding RSI (Relative Strength Index) into the data
delta = data['Close'].diff()
avg_gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
avg_loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = avg_gain / avg_loss
data['RSI'] = 100 - (100 / (1 + rs))
# Grab the features of the final stock price to predict the next day stock
feature = data[['Open', 'High', 'Low', 'Close', 'Volume', 'SMA_5', 'SMA_10', 'EMA_5', 'EMA_10', 'RSI']].tail().values
# Load the models in your directory
model = load('Path/Of/The/Model')
predictions = model.predict(feature)
# Predicts gives the next day stock
print(f"Predicted: ${predictions[0]:.2f}")
Using LSTM Model
Sample python code to see the LSTM model
import yfinance as yf
from tensorflow.keras.models import load_model
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# Grab the most recent stock data
data = yf.download('AAPL', period='40d')
# Normalize the data
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_features = scaler.fit_transform(data[['Close']])
# Grabbing the last 30 days of data for prediction
windows_size = 30
last_30_days = scaled_features[-windows_size:]
# Shaping the data to match the model input
x = np.reshape(last_30_days, (1, windows_size, 1))
# Loading model
model = load_model('Models/Stockly-lstm.keras')
# Predicting the next day's stock price
predictions = model.predict(x)
predictions = scaler.inverse_transform(predictions)
print(f"Predicted: ${predictions[0][0]:.2f}")
NOTE: These models are still very new and not that highly accurate. So don't really use them for actual usage to trade in the stock market, but rather have fun with it, since the model itself was made pretty rushed to complete the Datathon. If the model ever get updated to be more accurate this NOTE should be gone.
- Downloads last month
- -