Pular para o conteúdo

Usando a API Alpha Vantage (gratuita) para dados de mercado financeiro


import requests
import pandas as pd
from datetime import datetime

# Usando a API Alpha Vantage (gratuita) para dados de mercado financeiro
# Você precisa se registrar em https://www.alphavantage.co para obter uma API key gratuita

API_KEY = "SUA CHAVE DE API" # Chave da API fornecida pelo usuário

def get_stock_data(symbol="IBM"):
    """
    Função para obter dados históricos de ações
    """
    base_url = "https://www.alphavantage.co/query"
    
    params = {
        "function": "TIME_SERIES_DAILY",
        "symbol": symbol,
        "apikey": API_KEY,
        "outputsize": "compact"
    }
    
    try:
        response = requests.get(base_url, params=params)
        data = response.json()
        
        # Verificar se a resposta contém erro
        if "Error Message" in data:
            print(f"Erro da API: {data['Error Message']}")
            return None
            
        if "Note" in data:
            print(f"Aviso da API: {data['Note']}")
            return None
            
        if "Time Series (Daily)" not in data:
            print(f"Erro: Dados não encontrados para {symbol}")
            print("Resposta da API:", data)
            return None
            
        # Convertendo dados para DataFrame
        df = pd.DataFrame.from_dict(data["Time Series (Daily)"], orient="index")
        
        # Renomeando colunas
        df.columns = [col.split(". ")[1] for col in df.columns]
        
        # Convertendo tipos de dados
        for col in df.columns:
            df[col] = pd.to_numeric(df[col], errors='coerce')
            
        # Resetando índice e convertendo para datetime
        df.index = pd.to_datetime(df.index)
        df = df.reset_index()
        df.rename(columns={"index": "date"}, inplace=True)
        
        if df.empty:
            print(f"Aviso: DataFrame vazio para {symbol}")
            return None
            
        return df
        
    except requests.exceptions.RequestException as e:
        print(f"Erro na conexão: {str(e)}")
        return None
    except ValueError as e:
        print(f"Erro ao processar dados: {str(e)}")
        return None
    except Exception as e:
        print(f"Erro inesperado: {str(e)}")
        return None

# Exemplo de uso
symbol = "MSFT"  # Símbolo da Microsoft
df = get_stock_data(symbol)

if df is not None:
    try:
        display(df.head())  # Usando display() que é específico do Databricks
        
        # Criando um gráfico simples
        import matplotlib.pyplot as plt
        
        plt.figure(figsize=(12, 6))
        plt.plot(df['date'], df['close'])
        plt.title(f'Preço de Fechamento - {symbol}')
        plt.xlabel('Data')
        plt.ylabel('Preço ($)')
        plt.grid(True)
        plt.xticks(rotation=45)
        display(plt.show())
    except Exception as e:
        print(f"Erro ao exibir dados: {str(e)}")

    
Avaliação
0 0

Por enquanto não há comentários.

para ser o primeiro a comentar.