- 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')
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!!!