21. Precios de acciones

 

21. Precios de Acciones con Python: Tutorial para Principiantes

📈 Introducción: Tu asistente de bolsa personal

¿Alguna vez has querido saber el precio de las acciones de tus empresas favoritas sin abrir una app o navegador? ¡Ahora puedes preguntárselo a tu asistente virtual! Vamos a convertirlo en un mini analista de bolsa que te dará precios de acciones en tiempo real.

¿Qué son las acciones?

  • Son pequeñas partes de una empresa que puedes comprar/vender

  • Su precio cambia constantemente durante el día

  • Analoǵía: Es como comprar un pedacito de una pizza gigante (la empresa)


💼 ¿Cómo funciona? Esquema visual

text

🎤 TÚ: "Precio de Tesla"

     ↓

🤖 ASISTENTE: Detecta "precio" y "acción"

     ↓

📦 yfinance: Pide datos a Yahoo Finance

     ↓

🌐 INTERNET: Obtiene precios en tiempo real

     ↓

💾 DATOS: Recibe información estructurada

     ↓

🔊 ASISTENTE: "Tesla está a $865.42"


🛠️ Lo que necesitaremos

1. Nueva librería: yfinance

  • Biblioteca especializada en datos financieros

  • Accede a Yahoo Finance (gratuito)

  • No necesita API Key

bash

# En tu terminal o CMD:

pip install yfinance

Importante: Después de instalar, CIERRA y ABRE Visual Studio Code.


📊 Entendiendo los "tickers"

Cada acción tiene un código único llamado "ticker":

Empresa

Ticker

Ejemplo de precio

Tesla

TSLA

$865.42

Amazon

AMZN

$3,022.84

Meta (Facebook)

META

$320.15

Apple

AAPL

$175.00

Google

GOOGL

$2,850.00

Analoǵía: Los tickers son como los apodos de las acciones.


✍️ Código paso a paso explicado

Paso 1: Importar y configurar la librería

python

import yfinance as yf  # ← 'as yf' crea un alias (apodo)

¿Por qué as yf?

  • yfinance es largo de escribir muchas veces

  • yf es más corto y fácil

  • Es como decirle a un amigo: "A partir de ahora te llamaré 'Alex' en vez de 'Alejandro'"


Paso 2: Detectar cuándo preguntamos por acciones

python

# En tu función principal:

if 'acción' in comando and 'precio' in comando:

    precio_acciones()

Ejemplos que activarán la función:

  • "Precio de una acción"

  • "¿Cuánto vale Tesla?"

  • "Dime el valor de Amazon"

  • "Acción de Facebook"


Paso 3: Crear la función principal

python

def precio_acciones():

    """

    Pregunta y muestra el precio de una acción

    """

    

    # 1. Preguntar qué acción quiere el usuario

    hablar("¿Qué acción quieres ver?")

    

    # 2. Escuchar la respuesta

    nombre_accion = escuchar().lower()

    

    # 3. Traducir nombre a ticker

    if 'tesla' in nombre_accion:

        ticker = "TSLA"

    elif 'amazon' in nombre_accion:

        ticker = "AMZN"

    elif 'facebook' in nombre_accion or 'meta' in nombre_accion:

        ticker = "META"

    elif 'apple' in nombre_accion or 'manzana' in nombre_accion:

        ticker = "AAPL"

    elif 'google' in nombre_accion:

        ticker = "GOOGL"

    else:

        hablar(f"No reconozco la acción {nombre_accion}")

        return

    

    # 4. Obtener el precio

    try:

        # Crear objeto de la acción

        accion = yf.Ticker(ticker)

        

        # Obtener datos del último día

        historial = accion.history(period="1d")

        

        # Extraer el precio de cierre

        precio = historial["Close"].iloc[-1]

        

        # Decir el precio

        hablar(f"El precio de {ticker} es de {precio:.2f} dólares")

        

        # También imprimirlo bonito

        print(f"📊 {ticker} ({nombre_accion.title()}): ${precio:.2f}")

        

    except Exception as e:

        hablar("No pude obtener el precio en este momento")

        print(f"Error: {e}")


🔍 Explicación detallada de partes clave

1. yf.Ticker("TSLA")

  • Crea un objeto que representa la acción

  • Es como crear un "archivo" con toda la información de Tesla

2. .history(period="1d")

  • Obtiene el historial de precios

  • "1d" = últimos 1 día

  • También puedes usar: "5d", "1mo", "1y"

3. ["Close"].iloc[-1]

  • ["Close"] = Precio de cierre del día

  • .iloc[-1] = Último valor disponible (el más reciente)

  • Analoǵía: Es como tomar el último dato de una lista de temperaturas diarias


🎯 Código completo mejorado

python

# ASISTENTE VIRTUAL - PRECIOS DE ACCIONES

import yfinance as yf

import pyttsx3


# Configuración de voz

engine = pyttsx3.init()


def hablar(texto):

    engine.say(texto)

    engine.runAndWait()


def precio_acciones_inteligente():

    """

    Versión mejorada con más acciones y manejo de errores

    """

    

    # Diccionario de acciones conocidas

    acciones = {

        # "palabra que dice usuario": "ticker real"

        "tesla": "TSLA",

        "amazon": "AMZN",

        "facebook": "META",

        "meta": "META",

        "apple": "AAPL",

        "manzana": "AAPL",

        "google": "GOOGL",

        "microsoft": "MSFT",

        "netflix": "NFLX",

        "nvidia": "NVDA",

        "twitter": "TWTR",

        "disney": "DIS",

        "ibm": "IBM",

        "intel": "INTC"

    }

    

    hablar("¿De qué empresa quieres saber el precio?")

    

    # Escuchar respuesta

    respuesta = escuchar().lower()

    

    if not respuesta:

        hablar("No escuché tu respuesta")

        return

    

    # Buscar coincidencias

    ticker_encontrado = None

    empresa_encontrada = None

    

    for palabra, ticker in acciones.items():

        if palabra in respuesta:

            ticker_encontrado = ticker

            empresa_encontrada = palabra

            break

    

    # Si no encontramos la acción

    if not ticker_encontrado:

        hablar(f"No tengo información de {respuesta}")

        hablar("Prueba con: Tesla, Amazon, Apple, Google, Microsoft...")

        return

    

    try:

        # Obtener datos

        hablar(f"Consultando precio de {empresa_encontrada.title()}...")

        

        accion = yf.Ticker(ticker_encontrado)

        

        # Obtener información adicional

        info = accion.info

        nombre_completo = info.get('longName', empresa_encontrada)

        

        # Precio actual

        historial = accion.history(period="1d")

        

        if historial.empty:

            hablar(f"No hay datos disponibles para {nombre_completo}")

            return

        

        precio_actual = historial["Close"].iloc[-1]

        precio_abierto = historial["Open"].iloc[0]

        

        # Calcular cambio

        cambio = precio_actual - precio_abierto

        porcentaje = (cambio / precio_abierto) * 100

        

        # Preparar mensaje

        if cambio > 0:

            tendencia = "subió"

            emoji = "📈"

        elif cambio < 0:

            tendencia = "bajó"

            emoji = "📉"

        else:

            tendencia = "se mantuvo igual"

            emoji = "➡️"

        

        mensaje = f"""{emoji} {nombre_completo} ({ticker_encontrado}):

Precio actual: ${precio_actual:.2f}

Hoy {tendencia} {abs(cambio):.2f} dólares ({abs(porcentaje):.2f}%)"""

        

        # Decir versión resumida

        hablar(f"{nombre_completo} está a {precio_actual:.2f} dólares. Hoy {tendencia} {abs(porcentaje):.2f} por ciento.")

        

        # Imprimir versión completa

        print("=" * 50)

        print(mensaje)

        print("=" * 50)

        

    except Exception as e:

        hablar("Error al obtener datos financieros")

        print(f"Error detallado: {e}")


def precio_acciones_directo(comando):

    """

    Versión que extrae la acción directamente del comando

    Ejemplo: "precio de tesla" → detecta Tesla automáticamente

    """

    

    # Lista de acciones para buscar en el comando

    acciones_dict = {

        "tesla": "TSLA",

        "amazon": "AMZN",

        "apple": "AAPL",

        "google": "GOOGL",

        "microsoft": "MSFT",

        "meta": "META",

        "facebook": "META",

        "netflix": "NFLX"

    }

    

    comando_lower = comando.lower()

    

    # Buscar si menciona alguna acción directamente

    for accion_nombre, ticker in acciones_dict.items():

        if accion_nombre in comando_lower:

            # Obtener precio directamente

            try:

                accion = yf.Ticker(ticker)

                historial = accion.history(period="1d")

                precio = historial["Close"].iloc[-1]

                

                hablar(f"{accion_nombre.title()} está a {precio:.2f} dólares")

                return

            except:

                pass

    

    # Si no mencionó acción específica, preguntar

    precio_acciones_inteligente()


# Diagrama visual del proceso:

"""

🎤 TÚ DICES: "¿Cuánto vale Apple?"

     ↓

🤖 ASISTENTE: Detecta "Apple" en el comando

     ↓

🔍 BUSCA: Encuentra ticker "AAPL" en diccionario

     ↓

🌐 YFINANCE: Pide datos de AAPL a Yahoo

     ↓

📊 PROCESA: Precio actual = $175.64

     ↓

📈 ANALIZA: Hoy subió $2.50 (1.44%)

     ↓

🔊 RESPONDE: "Apple está a 175.64 dólares. Hoy subió 1.44%"

"""


📊 Información adicional que puedes obtener

python

# Ejemplos de datos disponibles:

accion = yf.Ticker("TSLA")


# Información general

info = accion.info

print(info['longName'])      # Nombre completo

print(info['sector'])        # Sector (Automotriz)

print(info['country'])       # País (United States)


# Historial

historial = accion.history(period="5d")

print(historial[['Open', 'High', 'Low', 'Close', 'Volume']])


# Dividendos

dividendos = accion.dividends


# Recomendaciones de analistas

recomendaciones = accion.recommendations


🚨 Solución de problemas comunes

Problema 1: "No module named 'yfinance'"

bash

# Solución:

pip uninstall yfinance

pip install yfinance --upgrade

# Cerrar y abrir VS Code

Problema 2: Precios desactualizados

python

# Yahoo Finance tiene delay de 15 minutos

# Para datos en tiempo real necesitarías API premium

print("⚠️ Los precios tienen 15 minutos de delay")

Problema 3: Acción no encontrada

python

# Verificar el ticker en Yahoo Finance

# Algunas empresas tienen múltiples tickers:

# Google: GOOGL (clase A) y GOOG (clase C)

# Meta: FB (viejo) y META (nuevo)


✨ Mejoras avanzadas

1. Seguimiento de múltiples acciones:

python

def portfolio():

    """Revisa varias acciones a la vez"""

    mis_acciones = {

        "TSLA": 5,    # 5 acciones de Tesla

        "AAPL": 10,   # 10 acciones de Apple

        "AMZN": 2     # 2 acciones de Amazon

    }

    

    total = 0

    for ticker, cantidad in mis_acciones.items():

        precio = yf.Ticker(ticker).history("1d")["Close"].iloc[-1]

        valor = precio * cantidad

        total += valor

        print(f"{ticker}: {cantidad} × ${precio:.2f} = ${valor:.2f}")

    

    print(f"Valor total del portafolio: ${total:.2f}")

2. Alertas de precio:

python

def alerta_precio(ticker, limite):

    """Verifica si una acción supera un límite"""

    precio = obtener_precio(ticker)

    

    if precio > limite:

        hablar(f"¡Alerta! {ticker} superó ${limite}")

        hablar(f"Precio actual: ${precio}")

3. Gráficos simples:

python

import matplotlib.pyplot as plt


def grafico_accion(ticker):

    """Muestra gráfico de los últimos 30 días"""

    datos = yf.Ticker(ticker).history(period="30d")

    datos['Close'].plot(title=f"{ticker} - Últimos 30 días")

    plt.show()


✅ Resumen clave

  1. pip install yfinance instala la librería financiera

  2. Los tickers son códigos de 2-5 letras para cada acción

  3. yf.Ticker("TSLA") crea el objeto de la acción

  4. .history("1d")["Close"].iloc[-1] obtiene el último precio

  5. Siempre usar try-except porque los precios pueden fallar


📝 Cuestionario de repaso

Pregunta 1

¿Qué comando instala la librería para precios de acciones?
a) pip install finance
b) pip install yahoo-finance
c) pip install yfinance
d) install yfinance

Pregunta 2

¿Qué es un "ticker"?
a) El precio de una acción
b) Un reloj que hace tic-tac
c) El código único de una acción
d) Un tipo de gráfico

Pregunta 3

Si quieres el precio de Apple, ¿qué ticker usas?
a) APPL
b) APL
c) AAPL
d) APPLE

Pregunta 4

¿Qué hace .iloc[-1] en el código?
a) Toma el primer precio
b) Toma el último precio disponible
c) Calcula el promedio
d) Redondea el número

Pregunta 5

¿Por qué es importante usar try-except?
a) Para que el código sea más rápido
b) Para manejar errores si falla la conexión
c) Porque es obligatorio en Python
d) Para instalar librerías automáticamente


Respuestas del cuestionario

  1. c) pip install yfinance - Recuerda: "y" de Yahoo + "finance"

  2. c) El código único de una acción - Como DNI para empresas

  3. c) AAPL - ¡Ojo con la ortografía! Apple es AAPL, no APPL

  4. b) Toma el último precio disponible - -1 significa "último elemento"

  5. b) Para manejar errores si falla la conexión - Internet puede fallar, hay que estar preparados


💰 Reto final: Crea tu propio asistente financiero

Desafío 1: Agrega más empresas

python

# Agrega estas empresas latinoamericanas:

"bancolombia": "CIB",

"femsa": "FMX",

"américa móvil": "AMX"

Desafío 2: Calcula ganancias/pérdidas

python

def calcular_ganancia(ticker, precio_compra, cantidad):

    precio_actual = obtener_precio(ticker)

    diferencia = (precio_actual - precio_compra) * cantidad

    hablar(f"Tienes {'ganancia' if diferencia > 0 else 'pérdida'} de ${abs(diferencia):.2f}")

Desafío 3: Criptomonedas

python

# yfinance también funciona con criptos!

"bitcoin": "BTC-USD",

"ethereum": "ETH-USD",

"dogecoin": "DOGE-USD"


🎉 ¡Felicidades!

Ahora tu asistente puede:

  • ✅ Consultar precios de acciones en tiempo real

  • ✅ Reconocer múltiples empresas

  • ✅ Mostrar cambios porcentuales

  • ✅ Manejar errores de conexión

Próximo paso: Agregar seguimiento de portafolio, alertas de precios, o integración con criptomonedas. ¡Tu asistente financiero está listo para ayudarte!

Esta respuesta es generada por AI, solo como referencia




https://www.youtube.com/watch?v=Pj9KbAKpQyk

https://www.youtube.com/watch?v=-0tIy8wWtzE

https://www.youtube.com/watch?v=YqSSId7xfwU

https://www.youtube.com/watch?v=MjK-j7YJ5YI


https://www.youtube.com/watch?v=l2G8-iQYfoA



https://www.youtube.com/watch?v=t-YO0XeHczU


Comentarios

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio