docchi's picture
Upload 8 files
546b08c verified
# Import necessary libraries
from datetime import datetime
import streamlit as st
import yfinance as yf
from predictions import feature_engineering, load_custom_model, run_inference
# Main function to run the app
def main():
st.title("Stock Prediction App")
# Define the ticker symbols
ticker_symbols = ['BCA', 'BRI', 'Mandiri', 'BNI', 'BSI']
# Create a dropdown menu for selecting a ticker symbol
selected_ticker = st.selectbox('Select a Ticker', ticker_symbols)
# Button to trigger prediction
if st.button("Predict the following bank company"):
with st.spinner('Loading...'):
# Fetch stock data for the selected ticker symbol
stock_data = fetch_stock_data(selected_ticker)
if stock_data is not None:
# Perform model inference
predicted_price = perform_inference(stock_data, selected_ticker)
# Display the predicted price
st.write(f"Predicted Close Price for {selected_ticker}: {predicted_price}")
else:
st.error("Failed to retrieve data for the selected ticker. Please try again.")
# Function to perform inference on the stock data
def perform_inference(stock_data, selected_ticker):
# Perform feature engineering
X_test = feature_engineering(stock_data)
# Load the corresponding model
model = load_custom_model(selected_ticker)
if model is not None:
# Run inference
predicted_prices = run_inference(model, X_test)
return predicted_prices[-1] # Return the last predicted price
else:
return None
# Function to fetch stock data for the selected ticker symbol
def fetch_stock_data(selected_ticker):
# Define the start date (1 year ago) and end date (today)
start_date = datetime(2023, 1, 1)
end_date = datetime.now()
# Fetch stock data based on the selected ticker symbol
if selected_ticker == 'BCA':
return yf.download('BBCA.JK', start=start_date, end=end_date)
elif selected_ticker == 'BRI':
return yf.download('BBRI.JK', start=start_date, end=end_date)
elif selected_ticker == 'Mandiri':
return yf.download('BMRI.JK', start=start_date, end=end_date)
elif selected_ticker == 'BNI':
return yf.download('BBNI.JK', start=start_date, end=end_date)
elif selected_ticker == 'BSI':
return yf.download('BRIS.JK', start=start_date, end=end_date)
else:
return None
# Run the main function
if __name__ == "__main__":
main()