Skip to main content

Find financial assets and get their price history without worrying about different APIs or rate limiting.

Project description

tessa – simple, hassle-free access to price information of financial assets 📉🤓📈

tessa is a Python library to help you easily search asset identifiers (e.g., tickers) and retrieve price information for assets from different sources such as Yahoo or Coingecko. It takes care of the different APIs, caching, rate limiting, and other hassles.

tessa provides a Symbol class that encapsulates nicely the methods relevant for a symbol. tessa also provides functionality to manage collections of symbols, store and load them, and extend their functionality.

Finally, tessa makes sure to be nice to the sites being accessed and tries to prevent users from being blocked by 429 rate limiting errors by 1) caching results upon retrieval and 2) keeping track of request timestamps and waiting appropriate amounts of time if necessary. tessa also automatically waits and retries requests that fail with a 5xx error.

→ Check out the full documentation. 📖

How to use

Here's a longer example that quickly shows all aspects of the library. Refer to submodules symbol, search, and price for more information.

  • Imports:
from tessa import Symbol, SymbolCollection, search
  • Create a symbol for MSFT and access some functions:
s1 = Symbol("MSFT")         # will use "yahoo" as the default source
s1.price_latest()           # get latest price
  • Create another symbol from a bloomberg ticker as it is used by Yahoo Finance:
s2 = Symbol("SREN.SW")
s2.price_point("2022-06-30")    # get price at specific point in time
  • Create a symbol from the coingecko source with an id as it is used by coingecko:
s3 = Symbol("bitcoin", source="coingecko")
s3.price_graph()            # show price graph
  • Search for a crypto ticker on coingecko:
res = search("name")        # search and print search result summary
filtered = res.filter(source="coingecko")  # filter results
filtered.p()                # print summary of filtered results
filtered.buckets[1].symbols # review the 2nd bucket in the filtered results
s4 = filtered.buckets[1].symbols[2]   # our symbol is the 3rd in that list
s4.price_history()          # get entire history
  • Build a collection of several symbols and use the collection to retrieve symbols:
sc = SymbolCollection([s1, s2, s3, s4])
sc.add(Symbol("AAPL"))      # add another one
sc.find_one("SREN").price_graph()
  • Store and load a symbol collection:
sc.save_yaml("my_symbols.yaml")
sc_new = SymbolCollection()
sc_new.load_yaml("my_symbols.yaml")
  • Use a different currency preference:
sc.find_one("ens").price_latest()   # will return price in USD
Symbol.currency_preference = "CHF"
sc.find_one("ens").price_latest()   # will return price in CHF

Note that currency_preference will only have an effect with sources that support it. It is supported for Coingecko but not for Yahoo. So you should always verify the effective currency you receive in the result.

Data sources

tessa builds on yfinance and pycoingecko and offers a simplified and unified interface.

Why these two sources? Yahoo Finance (via yfinance) is fast and offers an extensive database that also contains many non-US markets. Coingecko (via pycoingecko) offers great access to crypto prices. While Yahoo Finance also offers crypto information, pycoingecko has the advantage that you can have the prices quoted in many more currency preferences (a function that is also exposed via tessa).

More sources can be added in the future. Let me know in the issues of you have a particular request.

Main submodules

  • symbol: working with symbols and symbol collections.
  • search: searching the different sources.
  • price: accessing price functions directly instead of via the Symbol class.
  • sources: if you'd like to add additional sources to the library.

How to install

pip install tessa

Prerequisites

See pyproject.toml. Major prerequisites are the yfinance and pycoingecko packages to access finance information as well as the beautifulsoup4 package to do some scraping for searching on Yahoo Finance.

Repository

https://github.com/ymyke/tessa

Future Work

This is an initial version. There are a number of ideas on how to extend. Please leave your suggestions and comments in the Issues section.

On terminology

I'm using symbol instead of ticker because a ticker is mainly used for stock on stock markets, whereas tessa is inteded to be used for any kind of financial assets, e.g. also crypto.

Other noteworthy libraries

  • strela: A python package for financial alerts.
  • pypme: A Python package for PME (Public Market Equivalent) calculation.

On investpy as a data source

Tessa used to use the investpy package as the main source of information until mid 2022 until investing.com introduced Cloudflare, which broke access by investpy. 😖 It is currently unclear if investpy will be available again in the future. You can follow the developments in issue 600. The old tessa/investpy code is still available in the add-symbols-based-on-investpy branch.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tessa-0.8.1.tar.gz (25.2 kB view details)

Uploaded Source

Built Distribution

tessa-0.8.1-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file tessa-0.8.1.tar.gz.

File metadata

  • Download URL: tessa-0.8.1.tar.gz
  • Upload date:
  • Size: 25.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.2 Windows/10

File hashes

Hashes for tessa-0.8.1.tar.gz
Algorithm Hash digest
SHA256 9d45155a4c640a4861c8dcc15bf44d9b0eddb8e29c5c0a148379a114fc25bec4
MD5 dc1586f939ce78ce67a99895ed3bd8f2
BLAKE2b-256 51bc74bf2e7a3ee54d268174d3c3c1c908bc93699eb65255850d81aa1b138cda

See more details on using hashes here.

File details

Details for the file tessa-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: tessa-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 29.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.2 Windows/10

File hashes

Hashes for tessa-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c3900fbe925784166f59bacc76476883fd748b500bca3a556727c984931581fe
MD5 1412ac5b5bb0fe790c0ccd2711f1c2d2
BLAKE2b-256 b05060588564e675f60078cdc6d85f402f6dcb1d301b2a8c0f6959eb68815bde

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page