Tutorial Python y Yahoo! Finance para consultar acciones y títulos de la bolsa

  • En este tutorial crearemos un simple programa en Python que nos presenta el valor actual de una acción, del cierre anterior, y la descripción de la empresa.

Python y Yahoo! Finance para consultar acciones y títulos de la bolsa

  • Hace varios años atrás Yahoo! tenía una API que permitía conectarse a la sección de finanzas del portal https://finance.yahoo.com/ para poder obtener valores, noticias e información sobre las acciones y títulos de la bolsa de Nueva York.
  • La empresa luego decidió darla de baja, por lo cual Ran Aroussi https://aroussi.com/post/python-yahoo-finance/ hacia 2019 desarrolló una biblioteca en python https://pypi.org/project/yfinance/ que nos permitía acceder a esos datos mediante la misma.
  • Este script es una adaptación de un ejercicio que doy a las/os estudiantes de mis cursos de Python. El código fuente lo podéis encontrar en https://github.com/fortinux/acciones_bolsa_NY/
  • En los enlaces que os acabo de presentar podéis obtener más ejemplos para personalizar el script que programaremos a continuación.
  • por último, si buscáis una solución más completa os recomiendo el artículo Las 12 mejores API del mercado de valores para crear productos financieros https://geekflare.com/es/best-stock-market-api/.

Python script y la biblioteca yfinance

  • Procedemos inicialmente a instalar la biblioteca yfinance en nuestro sistema operativo:
pip install yfinance
  • Creamos un fichero que podemos llamar acciones_bolsa.py y lo editamos con el siguiente código:
#!/user/bin/env python3
"""
[Obtener valores de acciones de la bolsa de NY]

Author: Fortinux - fortinux.com
Date: [2019]
"""
  • Importamos la biblioteca en nuestro script:
import yfinance as yf
  • Obtenemos la sigla de la acción que queremos ver y creamos las variables para descargar la información de Yahoo Finance:
print("***** Bolsa de valores ***** ")
print('''Para consultar el valor de las acciones de
la bolsa de Nueva York, escribe la sigla de 
la acción en mayúsculas, por ej. GOOG, AAPL,
FB, AMZ, MSFT, o TSLA''')

sigla = input('Escribe la sigla de la acción: ')

sigla = yf.Ticker(sigla).info
precio_mercado = sigla['regularMarketPrice']
precio_anterior = sigla['regularMarketPreviousClose']
***** Bolsa de valores ***** 
Para consultar el valor de las acciones de
la bolsa de Nueva York, escribe la sigla de 
la acción en mayúsculas, por ej. GOOG, AAPL,
FB, AMZ, MSFT, o TSLA
Escribe la sigla de la acción: GOOG
  • Imprimimos el valor de la acción y el del cierre anterior:
print('Precio de la acción: ', precio_mercado) 
print('Precio de cierre anterior: ', precio_anterior) 
Precio de la acción:  2318.19
Precio de cierre anterior:  2263.22
  • Imprimimos la información sobre la empresa:
print(sigla['longBusinessSummary'])
Alphabet Inc. provides various products and platforms in the United States, Europe, the Middle East, Africa, the Asia-Pacific, Canada, and Latin America. It operates through Google Services, Google Cloud, and Other Bets segments. The Google Services segment offers products and services, including ads, Android, Chrome, hardware, Gmail, Google Drive, Google Maps, Google Photos, Google Play, Search, and YouTube. It is also involved in the sale of apps and in-app purchases and digital content in the Google Play store; and Fitbit wearable devices, Google Nest home products, Pixel phones, and other devices, as well as in the provision of YouTube non-advertising services. The Google Cloud segment offers infrastructure, platform, and other services; Google Workspace that include cloud-based collaboration tools for enterprises, such as Gmail, Docs, Drive, Calendar, and Meet; and other services for enterprise customers. The Other Bets segment sells health technology and internet services. The company was founded in 1998 and is headquartered in Mountain View, California.
***** - *****
  • Finalmente ejecutamos nuestro fichero con:
python acciones_bolsa.py 

Yfinance: otros ejemplos de uso y creación de gráficos

  • Aquí os dejo otros tres ejemplos para adaptar nuestro script:
sigla = input('Escribe la sigla de la acción: ')

sigla = yf.Ticker(sigla)
sigla.info

# Muestra la información financiera
sigla.financials
***** Bolsa de valores ***** 
Para consultar el valor de las acciones de la bolsa de Nueva York
Escribe la sigla de la acción: GOOG
2021-12-31 2020-12-31 2019-12-31 2018-12-31
Research Development 31562000000.0 27573000000.0 26018000000.0 21419000000.0
Effect Of Accounting Charges None None None None
Income Before Tax 90734000000.0 48082000000.0 39625000000.0 34913000000.0
Minority Interest None None None None
Net Income 76033000000.0 40269000000.0 34343000000.0 30736000000.0
Selling General Administrative 36422000000.0 28998000000.0 28015000000.0 23256000000.0
Gross Profit 146698000000.0 97795000000.0 89961000000.0 77270000000.0
Ebit 78714000000.0 41224000000.0 35928000000.0 32595000000.0
Operating Income 78714000000.0 41224000000.0 35928000000.0 32595000000.0
Other Operating Expenses None None None None
Interest Expense -346000000.0 -135000000.0 -100000000.0 -114000000.0
Extraordinary Items None None None None
Non Recurring None None None None
Other Items None None None None
Income Tax Expense 14701000000.0 7813000000.0 5282000000.0 4177000000.0
Total Revenue 257637000000.0 182527000000.0 161857000000.0 136819000000.0
Total Operating Expenses 178923000000.0 141303000000.0 125929000000.0 104224000000.0
Cost Of Revenue 110939000000.0 84732000000.0 71896000000.0 59549000000.0
Total Other Income Expense Net 12020000000.0 6858000000.0 3697000000.0 2318000000.0
Discontinued Operations None None None None
Net Income From Continuing Ops 76033000000.0 40269000000.0 34343000000.0 30736000000.0
Net Income Applicable To Common Shares 76033000000.0 40269000000.0 34343000000.0 30736000000.0
# Obtiene el histórico del mercado
sigla.history(period="max")
Open High Low Close Volume Dividends Stock Splits
Date
2004-08-19 49.813290 51.835709 47.800831 49.982655 44871361 0 0.0
2004-08-20 50.316402 54.336334 50.062355 53.952770 22942874 0 0.0
2004-08-23 55.168217 56.528118 54.321388 54.495735 18342897 0 0.0
2004-08-24 55.412300 55.591629 51.591621 52.239197 15319808 0 0.0
2004-08-25 52.284027 53.798351 51.746044 52.802086 9232276 0 0.0
... ... ... ... ... ... ... ...
2022-05-05 2404.409912 2424.665039 2303.649902 2334.929932 2154500 0 0.0
2022-05-06 2310.379883 2349.969971 2282.860107 2313.199951 1764000 0 0.0
2022-05-09 2266.070068 2311.258057 2251.030029 2261.679932 1726000 0 0.0
2022-05-10 2320.810059 2333.820068 2267.666016 2291.689941 1557900 0 0.0
2022-05-11 2274.209961 2333.419922 2273.000000 2279.219971 1822500 0 0.0

4464 rows × 7 columns

# Se importan las bibliotecas necesarias
import datetime
import matplotlib.pyplot as plt
start = '2020-01-01'
end = '2022-05-01'
sigla = input('Escribe la sigla de la acción: ')
sigla = yf.download(sigla, start, end)

# Crea un gráfico con los valores de la acción: 
sigla['Open'].plot(label = 'Acción', figsize = (15,7)) 
plt.title('Valor de la acción período enero 2020 a abril 2022')

Python valor  GOOG

Imagen de portada: Foto de Pixabay

Si buscas un formador para realizar este curso u otra actividad formativa (webinar, workshops, bootcamps, etc.) en tu organización, me puedes ubicar a través de la página de contacto. Muchas gracias.

Si te ha gustado el artículo puedes ayudarme haciendo una donación con criptomonedas. Gracias!!!