import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression import streamlit as st from datetime import date import yfinance as yf from plotly import graph_objs as go START = "2019-01-01" TODAY = date.today().strftime("%Y-%m-%d") st.title("Cryptocurrency Price Forecaster") html_temp = """ ALL INVESTMENTS ARE SUBJECT TO PRICE FLUCTUATIONS AND OTHER MARKET RISKS..... """ st.markdown(html_temp,unsafe_allow_html=True) currency=("ETH-USD","BTC-USD","BNB-USD","MATIC-USD","TRX-USD","DOGE-USD","SOL-USD","ATOM-USD") selected_currency=st.selectbox("select coin",currency) n_days = st.slider("Days of prediction",1,30) # period =n_years*365 # @st.cache @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("load data...") data=load_data(selected_currency) data_load_state.text("loading data....done") # st.subheader('Raw data') # st.write(data.head(7)) # st.write(data.tail(7)) def plot_raw_data(): fig=go.Figure() fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'], name='open')) fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'], name='close')) fig.layout.update(title_text="Time Series Graph", xaxis_rangeslider_visible=True) st.plotly_chart(fig) # plot_raw_data() def get_data(ticker): data=load_data(ticker) data[str(n_days)+'_Day_Price_Forecast'] = data[['Close']].shift(-n_days) X= np.array(data[['Close']]) X= X[:data.shape[0]-n_days] y= np.array(data[str(n_days)+'_Day_Price_Forecast']) y= y[:-n_days] return X,y X, y= get_data(selected_currency) #linear regression def result(X,y): X_train, X_test, y_train,y_test = train_test_split(X,y,test_size=0.2) linReg = LinearRegression() linReg.fit(X_train,y_train) x_projection = np.array(data[['Close']])[-n_days:] linReg_prediction = linReg.predict(x_projection) lr_acc = linReg.score(X_test,y_test)#r^2 test return x_projection,linReg_prediction,lr_acc n, m, p= result(X,y) # st.write(n) # st.subheader('Predicted prices ') # st.write(m) r_list=list(range(1,n_days)) def plot_result_data(): fig=go.Figure() fig.add_trace(go.Scatter(x=r_list, y=m, name='predicted')) fig.layout.update(title_text="Time Series Data", xaxis_rangeslider_visible=True) st.plotly_chart(fig) # plot_result_data() if st.button("View Past data"): #st.subheader('Raw data') st.write(data.head(7)) st.write(data.tail(7)) plot_raw_data() if st.button("Predict future Prices"): st.subheader('Predicted prices ') st.write(m) plot_result_data() if st.button("Accuracy check"): st.write(p*100) if st.button('INR CONVERTER'): st.write(m*82.56) st.write(f''' ''', unsafe_allow_html=True )