stock-finance-analyzer/stock_analysis.py
2026-06-15 07:02:22 +01:00

58 lines
No EOL
1.5 KiB
Python

from datetime import datetime
import os
import pandas as pd
from dotenv import load_dotenv
from alpaca.data.historical import StockHistoricalDataClient
from alpaca.data.requests import StockBarsRequest
from alpaca.data.timeframe import TimeFrame
load_dotenv()
API_KEY = os.getenv("ALPACA_API_KEY")
SECRET_KEY = os.getenv("ALPACA_SECRET_KEY")
def fetch_stock_data(symbol, start_date, end_date):
client = StockHistoricalDataClient(API_KEY, SECRET_KEY)
request = StockBarsRequest(
symbol_or_symbols=symbol,
timeframe=TimeFrame.Day,
start=datetime.fromisoformat(start_date),
end=datetime.fromisoformat(end_date),
)
bars = client.get_stock_bars(request)
df = bars.df.reset_index()
return df
def analyze_stock(df):
df["Return"] = df["close"].pct_change()
df["MA_3"] = df["close"].rolling(window=3).mean()
print("\nFirst rows:")
print(df.head())
print("\nStock analysis:")
print(f"Highest price: {df['close'].max():.2f}")
print(f"Lowest price: {df['close'].min():.2f}")
print(f"Average price: {df['close'].mean():.2f}")
print(f"Average return: {df['Return'].mean():.4f}")
print("\nClose, Return, MA_3:")
print(df[["timestamp", "close", "Return", "MA_3"]])
if __name__ == "__main__":
symbol = input("Enter stock symbol, for example AAPL: ").upper()
start_date = input("Start date YYYY-MM-DD: ")
end_date = input("End date YYYY-MM-DD: ")
df = fetch_stock_data(symbol, start_date, end_date)
analyze_stock(df)