#importing libraries import streamlit as st import yfinance as yf from datetime import date from prophet import Prophet from prophet.plot import plot_plotly from plotly import graph_objs as go #main function def main(): START="2017-01-01" TODAY=date.today().strftime("%Y-%m-%d") st.title("Stock Forecast App") st.write("**Disclaimer:** The stock price predictions generated by this app should not be considered financial advice. Always consult with a qualified financial advisor before making investment decisions.") stocks= ("MSFT","AAPL","GOOG") st.write(""" ***Stock Tickers:*** - AAPL : Apple Inc. - MSFT : Microsoft Corporation. - GOOG : Alphabet Inc.(Google) """) selected_stocks=st.selectbox('select dataset for prediction',stocks) n_year=st.slider("**Select Year of prediction**",1,4) period=n_year * 365 #download Dataset @st.cache_data def load_data(ticker): data=yf.download(ticker,START,TODAY) data.reset_index(inplace=True) return data data_load_state=st.text('Loading data..') data=load_data(selected_stocks) data_load_state.text("Done!!") st.subheader("Raw data") st.write(data.tail()) #plot the Raw Data def plot_rawdata(): fig=go.Figure() fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'],name="stock_open")) fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'],name="stock_close")) fig.layout.update(title_text="Forecast Data") fig.update_xaxes(rangeslider_visible=True) st.plotly_chart(fig) plot_rawdata() #Forecasting df_train=data[["Date",'Close']] df_train=df_train.rename(columns={'Date':'ds','Close':'y'}) model=Prophet() model.fit(df_train) future=model.make_future_dataframe(periods=period) forecast=model.predict(future) #show and plot the feature st.subheader("Forecasted dataset") st.write(forecast.tail(5)) st.write("Forecast plot") fig1=plot_plotly(model,forecast) st.plotly_chart(fig1) st.write("Forecast components") fig2=model.plot_components(forecast) st.write(fig2) if __name__=="__main__": main()