File size: 2,985 Bytes
1dda37e
 
e2d4283
1dda37e
 
 
 
 
 
 
 
 
 
 
 
 
6e74a3e
 
 
 
 
 
1dda37e
 
 
 
 
 
 
 
6e74a3e
 
 
 
1dda37e
 
 
6e74a3e
 
 
 
 
 
 
 
 
 
 
 
 
1dda37e
6e74a3e
 
 
 
1dda37e
6e74a3e
3f96245
6e74a3e
 
 
1330f63
1dda37e
e2d4283
1dda37e
60ede24
1dda37e
 
 
50946de
1dda37e
 
 
1330f63
1dda37e
 
1330f63
1dda37e
 
1330f63
6e74a3e
 
 
 
 
 
 
 
 
 
 
 
 
 
427e196
1dda37e
 
427e196
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
93
94
95
96
97
98
# Import necessary libraries
import pandas as pd
import yfinance as yf
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import streamlit as st
from datetime import datetime, timedelta, timezone

# Function to fetch historical stock data
def fetch_stock_data(symbol, start_date, end_date):
    data = yf.download(symbol, start=start_date, end=end_date)
    return data

# Function to create features for the model
def create_features(data):
    data['Date'] = data.index
    data['Year'] = data['Date'].dt.year
    data['Month'] = data['Date'].dt.month
    data['Day'] = data['Date'].dt.day
    data['Hour'] = data['Date'].dt.hour
    data['Minute'] = data['Date'].dt.minute

    return data

# Function to train a machine learning model
def train_model(data):
    features = ['Year', 'Month', 'Day', 'Hour', 'Minute']
    target = 'Close'

    if len(data) == 0:
        st.write("Not enough data for training.")
        return None

    X = data[features]
    y = data[target]

    if len(data) <= 1:
        st.write("Not enough data for splitting.")
        return None

    try:
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

        if len(X_train) == 0 or len(X_test) == 0:
            st.write("Not enough data after splitting.")
            return None

        model = RandomForestRegressor()
        model.fit(X_train, y_train)

        # Evaluate the model
        predictions = model.predict(X_test)
        mse = mean_squared_error(y_test, predictions)
        st.write(f"Mean Squared Error: {mse}")

        return model

    except ValueError as e:
        st.write(f"Error during train-test split: {e}")
        return None

# Streamlit UI
def main():
    st.title("Stock Price Prediction Tool")

    symbol = st.text_input("Enter Stock Symbol (e.g., AAPL):")
    start_date = st.date_input("Select Start Date:")
    end_date = st.date_input("Select End Date:")

    if st.button("Predict Stock Price"):
        # Fetch stock data
        stock_data = fetch_stock_data(symbol, start_date, end_date)

        # Create features
        stock_data = create_features(stock_data)

        # Train the model
        model = train_model(stock_data)

        if model:
            # Predict the stock price for a specific date (e.g., the last date in the dataset)
            prediction_date = stock_data['Date'].iloc[-1]
            prediction_features = [[
                prediction_date.year,
                prediction_date.month,
                prediction_date.day,
                prediction_date.hour,
                prediction_date.minute
            ]]
            predicted_price = model.predict(prediction_features)[0]

            st.subheader(f"Predicted Stock Price on {prediction_date} (UTC):")
            st.write(f"${predicted_price:.2f}")

# Run the Streamlit app
if __name__ == '__main__':
    main()