# 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()