Maisarah Nurain
Add application file
b17f43c
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)