import requests import yfinance as yf import threading import random import time running = True # Variable global para controlar el estado de los hilos def actualizar_grafico_criptomonedas_api(canvas, ax): """Actualiza los datos del gráfico de criptomonedas utilizando CoinGecko API.""" while True: if not running: # Verifica si el programa está en ejecución break if not canvas.get_tk_widget().winfo_exists(): # Verifica si el Canvas sigue existiendo break try: # Solicitar datos de precios de criptomonedas url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd" response = requests.get(url) response.raise_for_status() data = response.json() # Obtener precios actuales bitcoin_price = data['bitcoin']['usd'] ethereum_price = data['ethereum']['usd'] # Actualizar el gráfico con datos simulados + precios reales ax.clear() ax.set_title("Gráfico Criptomonedas") ax.plot([random.randint(1, 100) for _ in range(10)], label=f"Bitcoin (${bitcoin_price})", color="blue") ax.plot([random.randint(1, 100) for _ in range(10)], label=f"Ethereum (${ethereum_price})", color="green") ax.legend() canvas.draw() except Exception as e: print(f"Error al obtener datos de criptomonedas: {e}") time.sleep(60) def actualizar_grafico_ibex_api(canvas, ax): """Actualiza los datos del gráfico del IBEX utilizando Yahoo Finance API.""" while True: if not running: # Verifica si el programa está en ejecución break if not canvas.get_tk_widget().winfo_exists(): # Verifica si el Canvas sigue existiendo break try: # Obtener datos históricos de IBEX 35 data = yf.Ticker("^IBEX").history(period="1d", interval="5m") # Extraer los precios de cierre close_prices = data['Close'].values # Actualizar el gráfico con los datos reales ax.clear() ax.set_title("Gráfico IBEX") ax.plot(close_prices, label="IBEX", color="orange") ax.legend() canvas.draw() except Exception as e: print(f"Error al obtener datos del IBEX: {e}") time.sleep(60) # Actualizar cada 5 minutos def iniciar_hilos(canvas_cripto, ax_cripto, canvas_ibex, ax_ibex): """Inicia los hilos de actualización de gráficos.""" global running running = True # Asegurar que los hilos pueden ejecutarse # Hilo para criptomonedas thread_criptomonedas = threading.Thread( target=actualizar_grafico_criptomonedas_api, args=(canvas_cripto, ax_cripto), daemon=True ) thread_criptomonedas.start() # Hilo para IBEX thread_ibex = threading.Thread( target=actualizar_grafico_ibex_api, args=(canvas_ibex, ax_ibex), daemon=True ) thread_ibex.start() def detener_hilos(): """Detiene la ejecución de los hilos.""" global running running = False print("Hilos detenidos.")