File size: 3,399 Bytes
221814d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import streamlit as st
import pandas as pd
import numpy as np
from pandas_datareader import data
from datetime import date, datetime
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score

def dateArrange(data):
    dates = data['Date'].to_list()
    epochDates = []
    for i in dates:
        date_time = np.datetime64(i).astype(datetime)
        splitDate = date_time.strftime("%Y-%#m-%d").split('-')
        epochDate = datetime(int(splitDate[0]),int(splitDate[1]),int(splitDate[2]),0,0).timestamp()
        epochDates.append(epochDate)
    data['Date'] = epochDates

def dataScraper(ticker):
    startdate = '2012-01-01'
    today = date.today().strftime("%Y-%m-%d") 
    enddate = today
    try:
        panel_data = data.DataReader(ticker, 'yahoo', startdate, enddate).reset_index()
        price_close = panel_data['Adj Close']
        price_20dma = price_close.rolling(window=20).mean().to_list()[100:] # 20 Day Moving Average
        price_50dma = price_close.rolling(window=50).mean().to_list()[100:] # 50 day
        price_100dma = price_close.rolling(window=100).mean().to_list()[100:] # 100 day
        panel_data = panel_data.iloc[100: , :]
        panel_data['20dma'] = price_20dma
        panel_data['50dma'] = price_50dma
        panel_data['100dma'] = price_100dma
        dateArrange(panel_data)
        return panel_data
    except:
        print("Error while scraping data")
        return

def predictor(stock_ticker):
    prediction_list = []
    stock_data = dataScraper(stock_ticker)    
    try:
        stock_data.iat[0,0]
    except:
        print('Error with stock data')
        return    
    from sklearn.linear_model import Lasso
    alpha = 1.0
    tol = 0.0008
    max_iter = 10000
    lasso = Lasso(alpha=alpha, max_iter=max_iter, tol=tol)
    test_size = 0.1
    print('\nModel = ' + str(lasso))
    print('\n~ ' + stock_ticker.upper() + ' Next Day Price Predictions ~\n')
    X = stock_data.iloc[:-1 , :]
    y = {
        'High' : stock_data.iloc[1: , :]['High'], 
        'Low' : stock_data.iloc[1: , :]['Low'], 
        'Close (Adjusted)': stock_data.iloc[1: , :]['Close']
    }
    sample = stock_data.iloc[-1:, :]
    for i in y:
        X_train, X_test, y_train, y_test = train_test_split(X, y[i], test_size=test_size)
        y_pred_lasso = lasso.fit(np.array(X_train), np.array(y_train))
        r2_score_lasso = r2_score(np.array(y_test), y_pred_lasso.predict(np.array(X_test)))
        prediction = y_pred_lasso.predict(np.array(sample))
        prediction_list.append(prediction)
        output = "<h5 style='text-align: center; color: #0E7600;'>" + i + ' - ' + str(prediction) + '\n' + "</h1>"
        st.markdown(output, unsafe_allow_html=True)
    prediction_list.append(lasso)
    prediction_list.append(r2_score_lasso)
    r2score = 'R2 = ' + str(r2_score_lasso)
    print(r2score)

st.markdown("<h1 style='text-align: center; color: #2BD314;'>Stock Price Predictor v2.0</h1>", unsafe_allow_html=True)
st.markdown("<h6 style='text-align: center; color: #094B00;'>by Bryan Mildort</h1>", unsafe_allow_html=True)
ticker = st.text_input('Enter Ticker to Scrape:', placeholder='SPY')
col1, col2, col3, col4, col5 = st.columns(5)
with col1:
    st.write(' ')
with col2:
    st.write(' ')
with col3:
    if st.button('Scrape!'):
        predictor(ticker)
with col4:
    st.write(' ')
with col5:
    st.write(' ')