File size: 3,880 Bytes
0dfdfb5 b0bd1b7 22f5b92 0dfdfb5 22f5b92 9e7913b 22f5b92 b0bd1b7 22f5b92 b0bd1b7 22f5b92 b0bd1b7 22f5b92 70363ab 22f5b92 70363ab 22f5b92 70363ab 22f5b92 0dfdfb5 22f5b92 0dfdfb5 22f5b92 b0bd1b7 22f5b92 b0bd1b7 22f5b92 b0bd1b7 22f5b92 971d03b 22f5b92 |
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 99 100 101 102 103 104 105 |
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
# Fetch stock data using yfinance
def get_stock_data(ticker, start_date, end_date):
stock_data = yf.download(ticker, start=start_date, end=end_date)
return stock_data
# Example usage:
ticker = 'AAPL'
start_date = '2022-01-01'
end_date = '2023-01-01'
stock_data = get_stock_data(ticker, start_date, end_date)
print(stock_data.head())
def preprocess_data(data):
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data[['Close']].values)
return scaled_data, scaler
# Preprocess stock data
scaled_data, scaler = preprocess_data(stock_data)
def create_lstm_model(input_shape):
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=input_shape))
model.add(LSTM(units=50))
model.add(Dense(units=1)) # Predict the stock price
model.compile(optimizer='adam', loss='mean_squared_error')
return model
# Train the LSTM model
def train_model(stock_data, window_size=60):
X_train, y_train = [], []
for i in range(window_size, len(stock_data)):
X_train.append(stock_data[i-window_size:i, 0])
y_train.append(stock_data[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
model = create_lstm_model((X_train.shape[1], 1))
model.fit(X_train, y_train, epochs=5, batch_size=32)
return model
# Train and prepare the model
model = train_model(scaled_data)
def make_prediction(model, scaler, stock_data, last_data, prediction_days=90):
# Prepare last data for prediction
input_data = last_data[-60:].reshape(1, 60, 1)
predicted_prices = []
for _ in range(prediction_days):
predicted_price = model.predict(input_data)
predicted_prices.append(predicted_price[0, 0])
input_data = np.append(input_data[:, 1:], [[predicted_price]], axis=1)
# Rescale to original prices
predicted_prices = scaler.inverse_transform(np.array(predicted_prices).reshape(-1, 1))
return predicted_prices
# Predict future prices
last_data = scaled_data[-60:] # Last 60 days data
future_prices = make_prediction(model, scaler, scaled_data, last_data)
import gradio as gr
def predict_stock(ticker, start_date, end_date):
stock_data = get_stock_data(ticker, start_date, end_date)
scaled_data, scaler = preprocess_data(stock_data)
model = train_model(scaled_data)
future_prices = make_prediction(model, scaler, scaled_data, scaled_data[-60:])
# Generate a plot of historical and future prices
plt.figure(figsize=(14,5))
plt.plot(stock_data['Close'], label='Historical Prices')
future_dates = pd.date_range(end=end_date, periods=90, freq='B')
plt.plot(future_dates, future_prices, label='Predicted Prices', linestyle='--')
plt.title(f"Stock Prices for {ticker}")
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.savefig('stock_plot.png')
return future_prices, 'stock_plot.png'
# Define UI components
tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA', 'AMZN', 'FB', 'NFLX', 'NVDA', 'INTC', 'IBM']
with gr.Blocks() as app:
gr.Markdown("## Stock Buy/Sell Prediction App")
ticker = gr.Dropdown(tickers, label="Stock Ticker")
start_date = gr.Date(label="Start Date")
end_date = gr.Date(label="End Date")
predict_btn = gr.Button("Predict")
predicted_values = gr.Textbox(label="Predicted Stock Values")
stock_plot = gr.Image(label="Stock Performance Graph")
predict_btn.click(fn=predict_stock, inputs=[ticker, start_date, end_date], outputs=[predicted_values, stock_plot])
app.launch()
|