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)