Spaces:
Runtime error
Runtime error
import yfinance as yf | |
import streamlit as st | |
import pandas as pd | |
import datetime | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from keras.models import Sequential | |
from keras.layers import LSTM | |
from keras.layers import Dense | |
from keras.layers import Bidirectional | |
st.write(""" | |
# Simple Stock Price App | |
Shown are the stock **closing price** and **volume**. | |
""") | |
def user_input_features() : | |
stock_symbol = st.sidebar.selectbox('Symbol',('ANTM', 'ARNA', 'DUTI', 'ELSA', 'MFMI')) | |
date_start = st.sidebar.date_input("Start Date", datetime.date(2015, 5, 31)) | |
date_end = st.sidebar.date_input("End Date", datetime.date.today()) | |
tickerData = yf.Ticker(stock_symbol+'.JK') | |
tickerDf = tickerData.history(period='1d', start=date_start, end=date_end) | |
return tickerDf, stock_symbol | |
input_df, stock_symbol = user_input_features() | |
st.line_chart(input_df.Close) | |
st.line_chart(input_df.Volume) | |
st.write(""" | |
# Stock Price Prediction | |
Shown are the stock prediction for next 20 days. | |
""") | |
n_steps = 100 | |
n_features = 1 | |
model = Sequential() | |
model.add(Bidirectional(LSTM(300, activation='relu'), input_shape=(n_steps, n_features))) | |
model.add(Dense(1)) | |
model.compile(optimizer='adam', loss='mse') | |
model.load_weights(stock_symbol + ".h5") | |
df = input_df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) | |
df = df[df.Volume > 0] | |
close = df['Close'][-n_steps:].to_list() | |
min_in = min(close) | |
max_in = max(close) | |
in_seq = [] | |
for i in close : | |
in_seq.append((i - min_in) / (max_in - min_in)) | |
for i in range(20) : | |
x_input = np.array(in_seq[-100:]) | |
x_input = x_input.reshape((1, n_steps, n_features)) | |
yhat = model.predict(x_input, verbose=0) | |
in_seq.append(yhat[0][0]) | |
norm_res = in_seq[-20:] | |
res = [] | |
for i in norm_res : | |
res.append(i * (max_in - min_in) + min_in) | |
closepred = close[-80:] | |
for x in res : | |
closepred.append(x) | |
plt.figure(figsize = (20,10)) | |
plt.plot(closepred, label="Prediction") | |
plt.plot(close[-80:], label="Previous") | |
plt.ylabel('Price (Rp)', fontsize = 15 ) | |
plt.xlabel('Days', fontsize = 15 ) | |
plt.title(stock_symbol + " Stock Prediction", fontsize = 20) | |
plt.legend() | |
plt.grid() | |
st.pyplot(plt) | |