Home

Awesome

<img src="https://user-images.githubusercontent.com/46355364/220746807-669cdbc1-ac67-404c-b0bb-4a3d67d9931f.jpg" alt="Logo">

GitHub Sponsors Buy Me a Coffee Twitter LinkedIn Documentation Supported Python Versions PYPI Version PYPI Downloads

Call for Contributors to the FinanceDatabase
The FinanceDatabase serves the role of providing anyone with any type of financial product categorization entirely for free. To be able to achieve this, the FinanceDatabase relies on involvement from the community to add, edit and remove tickers over time. This is made easy enough that anyone, even with a lack of coding experience can contribute because of the usage of CSV files that can be manually edited with ease.
I'd like to invite you to go to the Contributing Guidelines to understand how you can help. Thank you!

As a private investor, the sheer amount of information that can be found on the internet is rather daunting. Trying to understand what type of companies or ETFs are available is incredibly challenging with there being millions of companies and derivatives available on the market. Sure, the most traded companies and ETFs can quickly be found simply because they are known to the public (for example, Microsoft, Tesla, S&P500 ETF or an All-World ETF). However, what else is out there is often unknown.

This database tries to solve that. It features 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets. It therefore allows you to obtain a broad overview of sectors, industries, types of investments and much more.

The aim of this database is explicitly not to provide up-to-date fundamentals or stock data as those can be obtained with ease (with the help of this database) by using the Finance Toolkit 🛠️. Instead, it gives insights into the products that exist in each country, industry and sector and gives the most essential information about each product. With this information, you can analyse specific areas of the financial world and/or find a product that is hard to find. See for examples on how you can combine this database, and the earlier mentioned packages the section Examples.

Some key statistics of the database:

ProductQuantitySectorsIndustriesCountriesExchanges
Equities158.429126311183
ETFs36.7862952211153
Funds57.88115415211134
ProductQuantityCategory
Currencies2.556175 Currencies
Cryptocurrencies3.367352 Cryptocurrencies
Indices91.18364 Exchanges
Money Markets1.3673 Exchanges

The Finance Database is used within or referenced by:

<a href="https://openbb.co/"><img width="200" height="100" alt="OpenBB" src="https://github-production-user-asset-6210df.s3.amazonaws.com/46355364/265290693-cff58802-8f6e-48ec-9a5c-1a7795c3522c.png"></a> <a href="https://app.noteable.io/f/242bc47d-9c85-4a30-b6e5-d7d201f6e2d6/Finance+Database.ipynb"><img alt="Noteable" width="200" height="100" src="https://github-production-user-asset-6210df.s3.amazonaws.com/46355364/265290704-1110feb5-3ad8-4f1c-b580-df661df4682d.png"></a> <a href="https://algotrading101.com/learn/financedatabase-python-guide/"><img width="200" height="100" alt="AlgoTrading" src="https://github-production-user-asset-6210df.s3.amazonaws.com/46355364/265290727-4c113348-45fc-45fe-afb5-e043b738ee94.png"></a> <a href="https://twitter.com/pyquantnews/status/1576185955677077504?lang=en"><img width="200" height="100" alt="PyQuantNews" src="https://github-production-user-asset-6210df.s3.amazonaws.com/46355364/265290754-8c9025fb-3830-4f41-95fd-e5e6d0f84758.png"></a> <a href="https://alpha2phi.medium.com/investment-analysis-finance-database-61f47ecfe7ca"><img width="200" height="100" alt="Medium" src="https://github-production-user-asset-6210df.s3.amazonaws.com/46355364/265290765-dfbd0f4c-85eb-4de6-adba-345cb5189f31.png"></a>


Table of Contents

  1. Installation
  2. Basic Usage
    1. Quick Start
    2. Collecting information from the database
    3. Searching the database extensively
    4. Storing the database at a different location
  3. Examples
    1. Companies in the Netherlands
    2. Perform a Dupont Analysis on Railroad Companies
    3. Technical Analysis of Biotech ETFs
  4. Questions & Answers
  5. User Contributions
  6. Contact

Installation

Before installation, consider starring the project on GitHub which helps others find the project as well.

<img width="1353" alt="image" src="https://github.com/JerBouma/FinanceDatabase/assets/46355364/4132edde-72f9-4e32-adfe-8872207f46ff">

To install the FinanceDatabase it simply requires the following:

pip install financedatabase -U

Then within Python use:

import financedatabase as fd

Basic Usage

This section explains in detail how the database can be queried with the related financedatabase package, also see the Jupyter Notebook in which you can run the examples also demonstrated here. You can find this document here.

Quick Start

Same methods apply to all other asset classes as well. Columns may vary.

import financedatabase as fd

# Initialize the Equities database
equities = fd.Equities()

# Obtain all countries from the database
equities_countries = equities.options("country")

# Obtain all sectors from the database
equities_sectors = equities.options("sector")

# Obtain all industry groups from the database
equities_industry_groups = equities.options("industry_group")

# Obtain all industries from a country from the database
equities_germany_industries = equities.options("industry", country="Germany")

# Obtain a selection from the database
equities_united_states = equities.select(country="United States")

# Obtain a detailed selection from the database
equities_usa_machinery = equities.select(
    country="United States", industry="Machinery"
)

# Search specific fields from the database
equities_uk_biotech = equities.search(
    country="United Kingdom", summary="biotech", exchange="LSE"
)

# Search specific fields from the database with lists
equities_media_services = equities.search(
    industry="Interactive Media & Services",
    country="United States",
    market_cap=["Large Cap", "Mega Cap"]
)

# Use the tickers to obtain data via the Finance Toolkit
telecomunication_services = equities.search(
    industry="Diversified Telecommunication Services",
    country="United States",
    market_cap="Mega Cap",
    exclude_exchanges=True)

toolkit = telecomunication_services.to_toolkit(
    api_key="FINANCIAL_MODELING_PREP_KEY",
    start_date="2000-01-01",
    progress_bar=False
)

# For example, obtain the historical data
historical_data = toolkit.get_historical_data()

Scroll down below for a more elaborate explanation and detailed examples.

Collecting information from the database

Please see the Jupyter Notebook for an elaborate explanation of each asset class. This includes Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.


<b><div align="center">Find code examples of all Asset Classes in the Jupyter Notebook <a href="https://www.jeroenbouma.com/projects/financedatabase/getting-started">here</a>.</div></b>


As an example for Equities, If you wish to collect data from all equities you can use the following:

import financedatabase as fd

# Initialize the Equities database
equities = fd.Equities()

# Obtain all data available excluding international exchanges
equities.select()

Which returns the following DataFrame:

symbolnamecurrencysectorindustry_groupindustryexchangemarketcountrystatecityzipcodewebsitemarket_capisincusipfigicomposite_figishareclass_figi
AAgilent Technologies, Inc.USDHealth CarePharmaceuticals, Biotechnology & Life SciencesBiotechnologyNYQNew York Stock ExchangeUnited StatesCASanta Clara95051http://www.agilent.comLarge CapUS00846U101600846U101BBG000C2V541BBG000C2V3D6BBG001SCTQY4
AAAlcoa CorporationUSDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesPAPittsburgh15212-5858http://www.alcoa.comMid CapUS013872106513872106BBG00B3T3HK5BBG00B3T3HD3BBG00B3T3HF1
AAALFAareal Bank AGUSDFinancialsBanksBanksPNKOTC Bulletin BoardGermanynanWiesbaden65189http://www.aareal-bank.comSmall CapUS00254K108800254K108nannannan
AAALYAareal Bank AGUSDFinancialsBanksBanksPNKOTC Bulletin BoardGermanynanWiesbaden65189http://www.aareal-bank.comSmall CapUS00254K108800254K108nannannan
AABBAsia Broadband, Inc.USDMaterialsMaterialsMetals & MiningPNKOTC Bulletin BoardUnited StatesNVLas Vegas89135http://www.asiabroadbandinc.comMicro Capnannannannannan

This returns approximately 20.000 different equities. Note that by default, only the American exchanges are selected. These are symbols like TSLA (Tesla) and MSFT (Microsoft) that tend to be recognized by a majority of data providers and therefore is the default. To disable this, you can set the exclude_exchanges argument to False which then results in approximately 155,000 different symbols.

Note that the summary column is taken out on purpose to keep it organized for markdown. The summary is however very handy when it comes to querying specific words as found with the following description given for Apple. All of this information is available when you query the database. Find a more elaborate explanation with help(equities.select).

As an example, we can use equities.options to obtain specific country, sector and industry options. For we can acquire all industries within the sector Basic Materials within the United States. This allows us to look at a specific industry in the United States in detail.

industry_options = equities.options(selection='industry', country="United States", sector="Materials")

Which returns:

array(['Chemicals', 'Construction Materials', 'Metals & Mining',
       'Paper & Forest Products'], dtype=object)

So with this information in hand, I can now query the industry Metals & Mining as follows:

metals_and_mining = equities.search(industry="Metals & Mining", country="United States", market_cap="Large Cap", exclude_exchanges=True)

metals_and_mining

This gives you a DataFrame with the following information:

symbolnamecurrencysectorindustry_groupindustryexchangemarketcountrystatecityzipcodewebsitemarket_capisincusipfigicomposite_figishareclass_figi
FCXFreeport-McMoRan Inc.USDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesAZPhoenix85004-2189http://fcx.comLarge CapUS35671D857035671D857BBG000BJDCQ6BBG000BJDB15BBG001S5R3F3
NEMNewmont CorporationUSDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesCODenver80237http://www.newmont.comLarge CapUS6516391066651639106BBG000BPWYG4BBG000BPWXK1BBG001S5TKX3
NUENucor CorporationUSDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesNCCharlotte28211http://www.nucor.comLarge CapUS6703461052670346105BBG000BQ8MY5BBG000BQ8KV2BBG001S5TRV0
RSReliance Steel & Aluminum Co.USDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesCALos Angeles90071http://www.rsac.comLarge CapUS7595091023759509102BBG000CJ2332BBG000CJ2181BBG001S81M27
SCCOSouthern Copper CorporationUSDMaterialsMaterialsMetals & MiningNYQNew York Stock ExchangeUnited StatesAZPhoenix85014http://www.southerncoppercorp.comLarge CapUS84265V105284265V105BBG000BSHKK0BBG000BSHH72BBG001S6ZM88
STLDSteel Dynamics, Inc.USDMaterialsMaterialsMetals & MiningNMSNASDAQ Global SelectUnited StatesINFort Wayne46804http://www.steeldynamics.comLarge CapUS8581191009858119100BBG000HH03N1BBG000HGYNZ9BBG001S98JK5

As you can imagine, looking at such a specific selection only yields a few results but picking the entire sector Materials would have returned 403 different companies (which excludes exchanges other than the United States).

To conclude, this information can then be send to the Finance Toolkit 🛠️ to obtain 130+ financial metrics, historical and fundamental data with the to_toolkit function. This functionality can be used with any output as obtained from the Finance Database.

companies = metals_and_mining.to_toolkit(
    api_key="FINANCIAL_MODELING_PREP_KEY",
    start_date="2000-01-01",
    quarterly=False)

companies.get_quote()

This returns the following:

FCXNEMNUERSSCCOSTLD
SymbolFCXNEMNUERSSCCOSTLD
Price38.75540.3007157.54268.0678.399.49
Beta2.0650060.3945361.6275930.9232361.2946051.523167
Average Volume104318797104366131564626559810313951277711
Market Capitalization555607157203199875580039183663880156968162266053435389416479921560
Last Dividend0.60000000000000011.62.04441.7000000000000002
Range26.03-46.7337.45-55.41102.86-182.68168.25-295.9842.42-87.5969.12-136.46
Changes-1.435-0.16932.874.41-1.35999999999999991.38
Company NameFreeport-McMoRan Inc.Newmont CorporationNucor CorporationReliance Steel & Aluminum Co.Southern Copper CorporationSteel Dynamics, Inc.
CurrencyUSDUSDUSDUSDUSDUSD
CIK83125911647277330986188410018381022671
ISINUS35671D8570US6516391066US6703461052US7595091023US84265V1052US8581191009
CUSIP35671D85765163910667034610575950910284265V105858119100
ExchangeNew York Stock ExchangeNew York Stock ExchangeNew York Stock ExchangeNew York Stock ExchangeNew York Stock ExchangeNASDAQ Global Select
Exchange Short NameNYSENYSENYSENYSENYSENASDAQ
IndustryCopperGoldSteelSteelCopperSteel
Websitehttps://fcx.comhttps://www.newmont.comhttps://www.nucor.comhttps://www.rsac.comhttps://www.southernperu.comhttps://stld.steeldynamics.com
CEOMr. Richard C. AdkersonMr. Thomas Ronald PalmerMr. Leon J. TopalianMs. Karla R. LewisMr. Oscar Gonzalez RochaMr. Mark D. Millett
SectorBasic MaterialsBasic MaterialsBasic MaterialsBasic MaterialsBasic MaterialsBasic Materials
CountryUSUSUSUSUSUS
Full Time Employees256001460031400145001501812060
Phone602 366 8100303 863 7414704 366 7000213 687 7700602 264 1375260 969 3500
Address333 North Central Avenue6900 East Layton Avenue1915 Rexford Road350 South Grand Avenue1440 East Missouri Avenue7575 West Jefferson Boulevard
CityPhoenixDenverCharlotteLos AngelesPhoenixFort Wayne
StateAZCONCCAAZIN
ZIP Code85004-21898023728211900718501446804
DCF Difference3.246012.089.7075913.680213.44699.8176
DCF41.57451.24157.162213.0161.1331109.112
IPO Date1995-07-101980-03-171980-03-171994-09-161996-01-051996-11-22

Searching the database extensively

All asset classes have the capability to search each column with search, for example equities.search(). Through how this functionality is developed you can define multiple columns and search throughoutly. For example:

# Collect all Equities Database
equities = fd.Equities()

# Search Multiple Columns
equities.search(summary='automotive', currency='USD', country='Germany')

Which returns a selection of the DataFrame that matches all criteria.

symbolnamecurrencysectorindustry_groupindustryexchangemarketcountrystatecityzipcodewebsitemarket_capisincusipfigicomposite_figishareclass_figi
AFRMFAlphaform AGUSDIndustrialsCapital GoodsMachineryPNKOTC Bulletin BoardGermanynanFeldkirchen85622nanNano Capnannannannannan
AUUMFAumann AGUSDIndustrialsCapital GoodsMachineryPNKOTC Bulletin BoardGermanynanBeelen48361http://www.aumann.comMicro CapDE000A2DAM03nannannannan
BAMXFBayerische Motoren Werke AktiengesellschaftUSDConsumer DiscretionaryAutomobiles & ComponentsAutomobilesPNKOTC Bulletin BoardGermanynanMunich80788http://www.bmwgroup.comLarge CapDE0005190037nannannannan
BASFYBASF SEUSDMaterialsMaterialsChemicalsPNKOTC Bulletin BoardGermanynanLudwigshafen am Rhein67056http://www.basf.comLarge Capnannannannannan
BDRFFBeiersdorf AktiengesellschaftUSDConsumer StaplesHousehold & Personal ProductsHousehold ProductsPNKOTC Bulletin BoardGermanynanHamburg20245http://www.beiersdorf.comLarge CapUS07724U103407724U103nannannan

Storing the database at a different location

If you wish to store the database at a different location (for example your own Fork) you can do so with the variable base_url which you can find in each of the asset classes. An example would be:

You can also store the database locally and point to your local location with the variable base_url and by setting use_local_location to True. An example would be:

Examples

This section gives a few examples of the possibilities with this package. These are merely a few of the things you can do with the package. As you can obtain a wide range of symbols, pretty much any package that requires symbols should work.


<b><div align="center">Find a variety of How-To Guides for the FinanceDatabase <a href="https://www.jeroenbouma.com/projects/financedatabase">here</a>.</div></b>


Companies in the Netherlands

I want to see how many public companies exist in each sector in the Netherlands. Here, I can obtain all stocks that are located in the Netherlands with country='Netherlands'. I also include all exchanges by setting exclude_exchanges=False. This will give me all stocks that are listed on all exchanges. This is relevant because some stocks are listed on exchanges that are not the American exchanges which the parameter defaults to. Find the related Jupyter Notebook with more examples here.

import financedatabase as fd

dutch_companies = equities.select(country='Netherlands', exclude_exchanges=False)

Which returns:

symbolnamecurrencysectorindustry_groupindustryexchangemarketcountrystatecityzipcodewebsitemarket_capisincusipfigicomposite_figishareclass_figi
09B.Flastminute.com N.V.EURConsumer DiscretionaryConsumer ServicesHotels, Restaurants & LeisureFRAFrankfurt Stock ExchangeNetherlandsnanAmsterdam1097 JBhttp://lmgroup.lastminute.comSmall Capnannannannannan
0DI7.LAFC Ajax NVEURnannannanLSELondon Stock Exchange (international)NetherlandsnanAmsterdam1101 AXhttp://www.ajax.nlMicro CapNL0000018034nannannannan
0DLI.LAmsterdam Commodities N.V.EURnannannanLSELondon Stock Exchange (international)NetherlandsnanRotterdam3011 DDhttp://www.acomo.nlSmall Capnannannannannan
0DQK.LBeter Bed Holding N.V.EURnannannanLSELondon Stock Exchange (international)NetherlandsnanUden5405 ARhttp://www.beterbedholding.comMicro CapNL0000339703nannannannan
0E2F.LCtac N.V.EURnannannanLSELondon Stock Exchange (international)Netherlandsnan's-Hertogenbosch5216 TZhttp://www.ctac.nlMicro CapNL0000345577nannannannan

This will return the same company multiple times. That makes sense, since a company can be listed on multiple exchanges. Filtering is applied by grouping by unique names and the sector.

unique_dutch_companies_per_sector = dutch_companies.groupby('sector').agg({'name': 'nunique'})

Now with this result, I can plot a pie chart to showcase the distribution of companies in each sector.

unique_dutch_companies_per_sector['name'].plot.pie(
    title='Number of companies per sector in the Netherlands',
    ylabel='',
)

This results in the following graph which gives an indication which sectors are dominant within The Netherlands. Of course this is a mere example and to truly understand the importance of certain companies for the Netherlands, you would need to know market cap of each sector as well including demographics.

FinanceDatabase

Perform a Dupont Analysis on Railroad Companies

A great use-case for the data found in the Finance Database is to do competitive analysis in which companies are compared that compete for the same market. For example, in case I want to look into the Railroad companies in the United States that are marked as "Large Cap", I can directly search for this with the Finance Database and use the Finance Toolkit 🛠️ to do further research. Find the related Jupyter Notebook with more examples here.

import financedatabase as fd

equities = fd.Equities()

railroad = equities.search(industry='Road & Rail',
                           country='United States',
                           market_cap='Large Cap',
                           exclude_exchanges=True)

This gives the following:

symbolnamecurrencysectorindustry_groupindustryexchangemarketcountrystatecityzipcodewebsitemarket_capisincusipfigicomposite_figishareclass_figi
CSXCSX CorporationUSDIndustrialsTransportationRoad & RailNMSNASDAQ Global SelectUnited StatesFLJacksonville32202http://www.csx.comLarge CapUS12640810351.26408e+08BBG000BGK1N1BBG000BGJRC8BBG001S5Q7Q3
KSUKansas City SouthernUSDIndustrialsTransportationRoad & RailNYQNew York Stock ExchangeUnited StatesMOKansas City64105http://www.kcsouthern.comLarge Capnannannannannan
KSU-PKansas City SouthernUSDIndustrialsTransportationRoad & RailNYQNew York Stock ExchangeUnited StatesMOKansas City64105http://www.kcsouthern.comLarge Capnannannannannan
NSCNorfolk Southern CorporationUSDIndustrialsTransportationRoad & RailNYQNew York Stock ExchangeUnited StatesVANorfolk23510-2191http://www.norfolksouthern.comLarge CapUS65584410846.55844e+08BBG000BQ5GM4BBG000BQ5DS5BBG001S5TQJ6
UNPUnion Pacific CorporationUSDIndustrialsTransportationRoad & RailNYQNew York Stock ExchangeUnited StatesNEOmaha68179http://www.up.comLarge CapUS90781810819.07818e+08BBG000BW3413BBG000BW3299BBG001S5X2M0
WABWestinghouse Air Brake Technologies CorporationUSDIndustrialsTransportationRoad & RailNYQNew York Stock ExchangeUnited StatesPAPittsburgh15212http://www.wabteccorp.comLarge CapUS92974010889.2974e+08BBG000BDDBD5BBG000BDD940BBG001S5XBT3

With this information in hand, I can now start collecting data with the FinanceToolkit package. This can be anything from balance sheet, cash flow and income statements to 100+ financial ratios, technical indicators and more. Here I initialize the FinanceToolkit with the tickers as found in the Finance Database.

API_KEY = "YOUR_FMP_API_KEY"

companies = railroad.to_toolkit(api_key=API_KEY, start_date='2005-01-01')

Then, as a demonstration, I can obtain all balance sheet statements for all companies that are marked as Large Cap Railroad companies in the United States. To keep this concise, only the first company is shown.

companies.get_balance_sheet_statement().loc['CSX']

Which returns:

200520062007200820092010201120122013201420152016201720182019202020212022
Cash and Cash Equivalents3.09e+084.61e+083.68e+086.69e+081.029e+091.292e+097.83e+087.84e+085.92e+086.69e+086.28e+086.03e+084.01e+088.58e+089.58e+083.129e+092.239e+091.958e+09
Short Term Investments2.93e+084.39e+083.46e+087.6e+076.1e+075.4e+075.23e+085.87e+084.87e+082.92e+088.1e+084.17e+081.8e+072.53e+089.96e+082e+067.7e+071.29e+08
Cash and Short Term Investments6.02e+089e+087.14e+087.45e+081.09e+091.346e+091.306e+091.371e+091.079e+099.61e+081.438e+091.02e+094.19e+081.111e+091.954e+093.131e+092.316e+092.087e+09
Accounts Receivable1.202e+091.174e+091.174e+091.107e+099.95e+089.93e+081.129e+099.62e+081.052e+091.129e+099.82e+089.38e+089.7e+081.01e+099.86e+089.12e+081.148e+091.313e+09
Inventory1.99e+082.04e+082.4e+082.17e+082.03e+082.18e+082.4e+082.74e+082.52e+082.73e+083.5e+084.07e+083.72e+082.63e+082.61e+083.02e+083.39e+083.41e+08
Other Current Assets1.44e+081.43e+081.09e+081.19e+081.24e+081.06e+087.8e+071.43e+091.523e+091.611e+091.528e+091.467e+091.496e+091.454e+091.324e+091.31e+091.557e+091.762e+09
Total Current Assets2.372e+092.672e+092.491e+092.391e+092.57e+092.855e+092.935e+092.801e+092.602e+092.572e+092.966e+092.487e+091.915e+092.565e+093.278e+094.441e+093.873e+093.849e+09
Property, Plant and Equipment2.0163e+102.0923e+102.178e+102.2688e+102.3213e+102.3799e+102.4974e+102.605e+102.7291e+102.8584e+103.0174e+103.115e+103.1764e+103.1998e+103.2168e+103.2444e+103.3015e+103.4242e+10
Goodwill0006.4e+076.4e+077e+076.4e+076.4e+076.4e+076.3e+076.3e+076.3e+076.3e+070002.76e+083.19e+08
Intangible Assets07.3e+07000000000000001.75e+081.83e+08
Long Term Investments6.03e+086.07e+081.004e+091.015e+091.088e+091.134e+091.171e+091.206e+091.298e+091.356e+091.394e+091.459e+091.686e+091.779e+091.879e+091.985e+092.099e+092.292e+09
Tax Assets002.54e+082.03e+08-6.4e+074.74e+081.82e+081.19e+081.55e+081.41e+081.26e+089.596e+096.418e+096.69e+096.961e+097.168e+09-4.51e+087.569e+09
Other Fixed Assets1.094e+098.54e+082.59e+08-7.3e+071.65e+08-1.91e+081.47e+083.31e+083.72e+083.37e+083.16e+08-9.341e+09-6.107e+093.87e+089.32e+089.23e+081.544e+09-6.542e+09
Fixed Assets2.186e+102.2457e+102.3043e+102.3897e+102.4466e+102.5286e+102.6538e+102.777e+102.918e+103.0481e+103.2073e+103.2927e+103.3824e+103.4164e+103.4979e+103.5352e+103.6658e+103.8063e+10
Other Assets000000000000000000
Total Assets2.4232e+102.5129e+102.5534e+102.6288e+102.7036e+102.8141e+102.9473e+103.0571e+103.1782e+103.3053e+103.5039e+103.5414e+103.5739e+103.6729e+103.8257e+103.9793e+104.0531e+104.1912e+10
Accounts Payable9.54e+089.74e+089.76e+089.73e+089.67e+081.046e+091.147e+091.014e+099.57e+088.45e+087.64e+088.06e+088.47e+089.49e+081.043e+098.09e+089.63e+081.13e+09
Short Term Debt9.37e+086e+087.87e+083.2e+081.13e+086.13e+085.07e+087.8e+085.33e+082.28e+082e+073.31e+081.9e+071.8e+072.45e+084.01e+081.81e+081.51e+08
Tax Payables1.02e+081.14e+081.13e+081.25e+081.12e+088.5e+071.29e+088.5e+079.1e+071.63e+081.08e+081.29e+081.57e+081.06e+086.9e+077.3e+071.34e+081.11e+08
Deferred Revenue6.67e+086.09e+085.74e+085.9e+084.95e+08-1.046e+09-1.147e+09-1.014e+09-9.57e+08-8.45e+08-7.64e+08-8.06e+08-8.47e+081.06e+08-1.043e+09-8.09e+08-9.63e+087.569e+09
Other Current Liabilities4.21e+083.39e+083.34e+085.21e+082.9e+081.924e+092.18e+091.847e+091.891e+091.879e+091.932e+091.709e+091.875e+098.42e+081.906e+091.618e+092.052e+09-6.379e+09
Total Current Liabilities2.979e+092.522e+092.671e+092.404e+091.865e+092.537e+092.687e+092.627e+092.424e+092.107e+091.952e+092.04e+091.894e+091.915e+092.151e+092.019e+092.233e+092.471e+09
Long Term Debt5.093e+095.362e+096.47e+097.512e+097.895e+098.051e+098.734e+099.052e+099.022e+099.514e+091.0683e+101.0962e+101.179e+101.4739e+101.5993e+101.6304e+101.6185e+101.7896e+10
Deferred Revenue Non Current08.74e+080000000000000000
Deferred Tax Liabilities6.082e+096.11e+096.096e+096.235e+096.585e+097.053e+097.601e+098.096e+098.662e+098.858e+099.305e+099.596e+096.418e+096.69e+096.961e+097.168e+097.383e+097.569e+09
Other Non Current Liabilities2.124e+091.23e+091.612e+092.089e+091.831e+091.8e+091.983e+091.794e+091.17e+091.398e+091.431e+091.122e+099.16e+088.05e+081.289e+091.192e+091.23e+091.351e+09
Total Non Current Liabilities1.3299e+101.3576e+101.4178e+101.5836e+101.6311e+101.6904e+101.8318e+101.8942e+101.8854e+101.977e+102.1419e+102.168e+101.9124e+102.2234e+102.4243e+102.4664e+102.4798e+102.6816e+10
Other Liabilities000000000000000000
Capital Lease Obligations000000000000004.93e+084.55e+084.78e+084.88e+08
Total Liabilities1.6278e+101.6098e+101.6849e+101.824e+101.8176e+101.9441e+102.1005e+102.1569e+102.1278e+102.1877e+102.3371e+102.372e+102.1018e+102.4149e+102.6394e+102.6683e+102.7031e+102.9287e+10
Preferred Stock000-1.824e+100-2.801e+091.3e+071.4e+072.1e+072.4e+071.6e+071.5e+071.6e+071.7e+070000
Common Stock2.18e+084.38e+084.08e+083.91e+083.93e+083.7e+081.049e+091.02e+091.009e+099.92e+089.66e+089.28e+088.9e+088.18e+087.73e+087.63e+082.202e+092.066e+09
Retained Earnings6.262e+097.427e+098.565e+098.398e+099.182e+099.087e+098.275e+098.876e+099.936e+091.0734e+101.1238e+101.1253e+101.4084e+101.2157e+101.1404e+101.2527e+101.163e+101.0363e+10
Accumulated Other Comprehensive Income-2.77e+08-3.92e+08-3.25e+08-7.41e+08-8.09e+08-7.71e+08-8.75e+08-9.36e+08-5.23e+08-6.66e+08-6.65e+08-6.4e+08-4.86e+08-6.61e+08-6.75e+08-5.98e+08-4.08e+08-3.88e+08
Other Total Shareholder Equity1.751e+091.469e+093.7e+071.824e+108e+072.815e+096e+062.8e+076.1e+079.2e+071.13e+081.38e+082.17e+082.49e+083.61e+084.18e+087.6e+075.84e+08
Total Shareholder Equity7.954e+098.942e+098.685e+098.048e+098.846e+098.7e+098.468e+099.002e+091.0504e+101.1176e+101.1668e+101.1694e+101.4721e+101.258e+101.1863e+101.311e+101.35e+101.2625e+10
Total Equity7.954e+098.942e+098.685e+098.048e+098.846e+098.7e+098.468e+099.002e+091.0504e+101.1176e+101.1668e+101.1694e+101.4721e+101.258e+101.1863e+101.311e+101.35e+101.2625e+10
Total Liabilities and Shareholder Equity2.4232e+102.5129e+102.5534e+102.6288e+102.7036e+102.8155e+102.9486e+103.0585e+103.1803e+103.3077e+103.5055e+103.5429e+103.5755e+103.6746e+103.8272e+103.9802e+104.0541e+104.1922e+10
Minority Interest08.9e+07001.4e+071.4e+071.3e+071.4e+072.1e+072.4e+071.6e+071.5e+071.6e+071.7e+071.5e+079e+061e+071e+07
Total Liabilities and Equity2.4232e+102.5129e+102.5534e+102.6288e+102.7036e+102.8155e+102.9486e+103.0585e+103.1803e+103.3077e+103.5055e+103.5429e+103.5755e+103.6746e+103.8272e+103.9802e+104.0541e+104.1922e+10
Total Investments8.96e+081.046e+091.35e+091.091e+091.149e+091.188e+091.694e+091.793e+091.785e+091.648e+092.204e+091.876e+091.704e+092.032e+092.875e+091.987e+092.176e+092.421e+09
Total Debt6.03e+095.962e+097.257e+097.832e+098.008e+098.664e+099.241e+099.832e+099.555e+099.742e+091.0703e+101.1293e+101.1809e+101.4757e+101.6238e+101.6705e+101.6366e+101.8047e+10
Net Debt5.721e+095.501e+096.889e+097.163e+096.979e+097.372e+098.458e+099.048e+098.963e+099.073e+091.0075e+101.069e+101.1408e+101.3899e+101.528e+101.3576e+101.4127e+101.6089e+10

With the data from the FinanceToolkit, it is now possible to execute a Dupont analysis on all companies. This shows the power of being able to combine a large database with a toolkit that allows you to do proper financial research. Again, only the first company is selected to keep things compact.

companies.models.get_extended_dupont_analysis().loc['CSX']

Which returns:

200520062007200820092010201120122013201420152016201720182019202020212022
Interest Burden Ratio1.49611.16131.16771.28981.29761.20621.18351.16631.18861.18691.14211.23641.16711.13131.15041.20261.12991.1125
Tax Burden Ratio0.73870.61270.59220.49310.50420.5090.53310.53770.53670.53340.54910.50581.4920.67960.67090.63390.67590.6917
Operating Profit Margin0.12020.19250.19260.19070.19480.23940.24590.25210.2430.24030.26570.24760.27540.35130.36160.34270.39540.3645
Asset Turnovernan0.38760.39590.43440.33910.38550.40760.39160.38570.39080.34690.31420.32070.33810.31840.27120.31180.3603
Equity Multipliernan2.92152.87423.0973.15643.14473.35593.4373.19662.99052.98073.01572.69372.65443.06783.12543.01863.1557
Return on Equitynan0.15510.15160.16320.13640.17820.21230.21280.19110.17780.17230.14670.41420.24240.27260.22140.28420.3189

It isn't too difficult to then plot a metric like Return on Equity (RoE) for all companies if you want to delve deeper. You can locate the rows directly from the DuPont Analysis but it is also possible to call the related function.

companies.ratios.get_return_on_equity().T.plot(
    title='Return on Equity (RoE) for Railroad Companies in the United States',
    figsize=(15, 5))

Which returns:

Return on Equity

Technical Analysis of Biotech ETFs

In this example I will show how you can use the FinanceDatabase to do a technical analysis of Biotech ETFs during the Coronacrisis. Let's find Health Care ETFs that mention something about 'Biotech' in their description. This would indicate they are related to Biotechnology. Find the related Jupyter Notebook with more examples here.

import financedatabase as fd

API_KEY = "YOUR_FMP_API_KEY"

etfs = fd.ETFs()

health_care_etfs_in_biotech = etfs.search(category='Health Care', summary='biotech', exclude_exchanges=True)

Which returns:

symbolnamecurrencycategory_groupcategoryfamilyexchangemarket
AGNGGlobal X Aging Population ETFUSDHealth CareHealth CareGlobal X FundsNMSus_market
BBCVirtus LifeSci Biotech Clinical Trials ETFUSDHealth CareHealth CareVirtusPCXus_market
BBHVanEck Vectors Biotech ETFUSDHealth CareHealth CareVanEck Asset ManagementNMSus_market
BBPVirtus LifeSci Biotech Products ETFUSDHealth CareHealth CareVirtusPCXus_market
CNCRLoncar Cancer Immunotherapy ETFUSDHealth CareHealth CareLoncar InvestmentsNGMus_market
FBTFirst Trust NYSE Arca Biotechnology Index FundUSDHealth CareHealth CareFirst Trust AdvisorsPCXus_market
IBBiShares Nasdaq Biotechnology ETFUSDHealth CareHealth CareBlackRock Asset ManagementNMSus_market
IBBJDefiance Nasdaq Junior Biotechnology ETFUSDHealth CareHealth CareDefiance ETFsNGMus_market
IBBQInvesco Nasdaq Biotechnology ETFUSDHealth CareHealth CareInvesco Investment ManagementNMSus_market
IEIHiShares Evolved U.S. Innovative Healthcare ETFUSDHealth CareHealth CareBlackRock Asset ManagementBTSus_market
PBEInvesco Dynamic Biotechnology & Genome ETFUSDHealth CareHealth CareInvesco Investment ManagementPCXus_market
SBIOALPS Medical Breakthroughs ETFUSDHealth CareHealth CareALPS ETF TrustPCXus_market
XBISPDR S&P Biotech ETFUSDHealth CareHealth CareState Street Global AdvisorsPCXus_market
XLVHealth Care Select Sector SPDR FundUSDHealth CareHealth CareState Street Global AdvisorsPCXus_market

Next up is initializing the Finance Toolkit and obtaining historical data for the chosen tickers. Here a start and end date are also selected that match the period around the initial wave of the Coronacrisis. Then it's time to collect the historical data for each ETF found.

etfs_in_biotech = health_care_etfs_in_biotech.to_toolkit(api_key=API_KEY, start_date="2020-01-01", end_date="2020-06-01")

etfs_in_biotech.get_historical_data()

Which returns (note that this is a MultiIndex):

Date('Open', 'AGNG')('Open', 'BBC')('Open', 'BBH')('Open', 'BBP')('Open', 'CNCR')('Open', 'FBT')('Open', 'IBB')('Open', 'IEIH')('Open', 'PBE')('Open', 'SBIO')('Open', 'XBI')('Open', 'XLV')('High', 'AGNG')('High', 'BBC')('High', 'BBH')('High', 'BBP')('High', 'CNCR')('High', 'FBT')('High', 'IBB')('High', 'IEIH')('High', 'PBE')('High', 'SBIO')('High', 'XBI')('High', 'XLV')('Low', 'AGNG')('Low', 'BBC')('Low', 'BBH')('Low', 'BBP')('Low', 'CNCR')('Low', 'FBT')('Low', 'IBB')('Low', 'IEIH')('Low', 'PBE')('Low', 'SBIO')('Low', 'XBI')('Low', 'XLV')('Close', 'AGNG')('Close', 'BBC')('Close', 'BBH')('Close', 'BBP')('Close', 'CNCR')('Close', 'FBT')('Close', 'IBB')('Close', 'IEIH')('Close', 'PBE')('Close', 'SBIO')('Close', 'XBI')('Close', 'XLV')('Adj Close', 'AGNG')('Adj Close', 'BBC')('Adj Close', 'BBH')('Adj Close', 'BBP')('Adj Close', 'CNCR')('Adj Close', 'FBT')('Adj Close', 'IBB')('Adj Close', 'IEIH')('Adj Close', 'PBE')('Adj Close', 'SBIO')('Adj Close', 'XBI')('Adj Close', 'XLV')('Volume', 'AGNG')('Volume', 'BBC')('Volume', 'BBH')('Volume', 'BBP')('Volume', 'CNCR')('Volume', 'FBT')('Volume', 'IBB')('Volume', 'IEIH')('Volume', 'PBE')('Volume', 'SBIO')('Volume', 'XBI')('Volume', 'XLV')('Dividends', 'AGNG')('Dividends', 'BBC')('Dividends', 'BBH')('Dividends', 'BBP')('Dividends', 'CNCR')('Dividends', 'FBT')('Dividends', 'IBB')('Dividends', 'IEIH')('Dividends', 'PBE')('Dividends', 'SBIO')('Dividends', 'XBI')('Dividends', 'XLV')('Return', 'AGNG')('Return', 'BBC')('Return', 'BBH')('Return', 'BBP')('Return', 'CNCR')('Return', 'FBT')('Return', 'IBB')('Return', 'IEIH')('Return', 'PBE')('Return', 'SBIO')('Return', 'XBI')('Return', 'XLV')('Volatility', 'AGNG')('Volatility', 'BBC')('Volatility', 'BBH')('Volatility', 'BBP')('Volatility', 'CNCR')('Volatility', 'FBT')('Volatility', 'IBB')('Volatility', 'IEIH')('Volatility', 'PBE')('Volatility', 'SBIO')('Volatility', 'XBI')('Volatility', 'XLV')('Excess Return', 'AGNG')('Excess Return', 'BBC')('Excess Return', 'BBH')('Excess Return', 'BBP')('Excess Return', 'CNCR')('Excess Return', 'FBT')('Excess Return', 'IBB')('Excess Return', 'IEIH')('Excess Return', 'PBE')('Excess Return', 'SBIO')('Excess Return', 'XBI')('Excess Return', 'XLV')('Excess Volatility', 'AGNG')('Excess Volatility', 'BBC')('Excess Volatility', 'BBH')('Excess Volatility', 'BBP')('Excess Volatility', 'CNCR')('Excess Volatility', 'FBT')('Excess Volatility', 'IBB')('Excess Volatility', 'IEIH')('Excess Volatility', 'PBE')('Excess Volatility', 'SBIO')('Excess Volatility', 'XBI')('Excess Volatility', 'XLV')('Cumulative Return', 'AGNG')('Cumulative Return', 'BBC')('Cumulative Return', 'BBH')('Cumulative Return', 'BBP')('Cumulative Return', 'CNCR')('Cumulative Return', 'FBT')('Cumulative Return', 'IBB')('Cumulative Return', 'IEIH')('Cumulative Return', 'PBE')('Cumulative Return', 'SBIO')('Cumulative Return', 'XBI')('Cumulative Return', 'XLV')
2020-01-0223.5938.47140.4444.1823.62149.6121.327.794256.2742.7995.82102.1723.7438.47140.4444.1823.62149.6121.7527.94856.2742.7996.03102.2923.5637.01138.9642.8523.17147.14118.9427.794255.3341.3293.73101.423.66537.413139.6243.17123.459148.22119.8927.94855.8441.6294.68102.1323.160737.413138.22243.17121.6018146.208118.89427.94855.788241.6294.450696.637324006530015100290050003249002.8444e+0629275400944003.5886e+066.2774e+060000000000000000000000000.02436170.03559170.02501250.03011170.03364360.0258670.02724920.02284320.02791960.03615030.0328110.0268018-0.0143432-0.0356187-0.0173654-0.0270471-0.0179894-0.022162-0.0239449-0.019122-0.018979-0.0344102-0.0233211-0.01614950.02487740.03608960.02560920.03050880.03417350.02640060.02777550.02341340.02844010.03652990.03327030.0273135111111111111
2020-01-0323.4136.9137.2442.8823.11145.9118.227.7455.2341.0193.21100.9523.6237.24138.8142.8823.43147.33119.1427.762655.6341.594.18101.8223.1834.6137.2442.71423.11145.29117.7727.617255.1540.6892.7100.4523.55536.8413842.71423.196146.3118.3627.725555.4240.9693.36101.2423.05336.84136.61842.71421.3596144.314117.37627.725555.368640.9693.133895.7952237001078002690040076001751005.4809e+06193712400910005.1106e+068.2475e+06000000000000-0.00464814-0.0153155-0.0116029-0.0105858-0.0112111-0.0129537-0.0127615-0.00796121-0.00752148-0.0158578-0.0139417-0.008714370.02436170.03559170.02501250.03011170.03364360.0258670.02724920.02284320.02791960.03615030.0328110.0268018-0.0225481-0.0332155-0.0295029-0.0284858-0.0291111-0.0308537-0.0306615-0.0258612-0.0254215-0.0337578-0.0318417-0.02661440.02487740.03608960.02560920.03050880.03417350.02640060.02777550.02341340.02844010.03652990.03327030.02731350.9953520.9846850.9883970.9894140.9887890.9870460.9872380.9920390.9924790.9841420.9860580.991286
2020-01-0623.24236.57137.0542.323.1145.47117.6927.7655.2640.5492.76100.7823.6136.81139.3243.02523.45147.89119.1827.841555.3840.99294.21101.923.24235.72137.0542.0722.94144.9116.9527.7654.8640.0491.83100.7523.56536.77139.2943.02523.45147.89119.1227.841555.3840.9994.17101.8723.062836.77137.89643.02521.5935145.882118.1327.841555.328640.9993.941996.391318003530015700510010600926002.1991e+062488100891003.3645e+066.4418e+060000000000000.000424587-0.001900110.00934770.007281010.01095030.0108680.006421030.00418384-0.0007217450.0007324950.008676160.006222810.02436170.03559170.02501250.03011170.03364360.0258670.02724920.02284320.02791960.03615030.0328110.0268018-0.0176754-0.0200001-0.0087523-0.010819-0.00714974-0.00723197-0.011679-0.0139162-0.0188217-0.0173675-0.00942384-0.01187720.02487740.03608960.02560920.03050880.03417350.02640060.02777550.02341340.02844010.03652990.03327030.02731350.9957740.9828140.9976360.9966180.9996160.9977740.9935780.9961890.9917620.9848630.9946130.997454
2020-01-0723.6936.85138.8742.79623.51147.76119.1627.855.241.2994.49101.5923.8137.29139.6943.14223.661148.6119.6427.8555.241.36294.73101.7623.6436.44138.8642.58523.34146.72117.9627.854.9540.3192.98101.123.65137.068139.4243.14223.632148.37119.1527.819355.0241.1294.32101.6723.14737.068138.02443.14221.7611146.356118.1627.819354.96941.1294.091596.20210600272007400250026900931001.7184e+0620703400617003.9548e+066.3353e+060000000000000.003649510.008104460.0009332650.002719260.007761190.003245640.000251689-0.000797335-0.006500520.003171430.00159277-0.001963390.02436170.03559170.02501250.03011170.03364360.0258670.02724920.02284320.02791960.03615030.0328110.0268018-0.0146505-0.0101955-0.0173667-0.0155807-0.0105388-0.0150544-0.0180483-0.0190973-0.0248005-0.0151286-0.0167072-0.02026340.02487740.03608960.02560920.03050880.03417350.02640060.02777550.02341340.02844010.03652990.03327030.02731350.9994090.9907790.9985670.9993281.007371.001010.9938280.9953950.9853150.9879870.9961980.995496
2020-01-0823.5136.84139.0143.2723.66148.24119.0728.005254.8341.1794.23101.7223.82337.431141.0143.93724.19150.56120.8828.005255.2541.8595.99102.7923.5136.69139.0143.2723.66148.24118.8628.005254.8340.95193.89101.6823.76337.43140.1243.81824.11150.07120.2228.005255.0741.6895.61102.3323.256637.43138.71743.81822.2012148.033119.22128.005255.018941.6895.378496.826622008720023000210023400666003.3882e+0623012000493003.0882e+067.4947e+060000000000000.004735520.009765810.005020810.01566930.02022690.0114580.008980250.006682380.0009086760.01361870.01367690.006491660.02436170.03559170.02501250.03011170.03364360.0258670.02724920.02284320.02791960.03615030.0328110.0268018-0.0139645-0.00893419-0.0136792-0.003030740.00152691-0.00724201-0.00971975-0.0120176-0.0177913-0.0050813-0.00502309-0.01220830.02487740.03608960.02560920.03050880.03417350.02640060.02777550.02341340.02844010.03652990.03327030.02731351.004141.000451.003581.014991.027751.012481.002751.002050.9862111.001441.009821.00196

Then, let's calculate the Bollinger Bands for each ETF.

bollinger_bands = etfs_in_biotech.technicals.get_bollinger_bands()

Which returns (note that this is a MultiIndex):

Date('Close', 'AGNG')('Close', 'BBC')('Close', 'BBH')('Close', 'BBP')('Close', 'CNCR')('Close', 'FBT')('Close', 'IBB')('Close', 'IEIH')('Close', 'PBE')('Close', 'SBIO')('Close', 'XBI')('Close', 'XLV')('Lower Band', 'AGNG')('Lower Band', 'BBC')('Lower Band', 'BBH')('Lower Band', 'BBP')('Lower Band', 'CNCR')('Lower Band', 'FBT')('Lower Band', 'IBB')('Lower Band', 'IEIH')('Lower Band', 'PBE')('Lower Band', 'SBIO')('Lower Band', 'XBI')('Lower Band', 'XLV')('Middle Band', 'AGNG')('Middle Band', 'BBC')('Middle Band', 'BBH')('Middle Band', 'BBP')('Middle Band', 'CNCR')('Middle Band', 'FBT')('Middle Band', 'IBB')('Middle Band', 'IEIH')('Middle Band', 'PBE')('Middle Band', 'SBIO')('Middle Band', 'XBI')('Middle Band', 'XLV')('Upper Band', 'AGNG')('Upper Band', 'BBC')('Upper Band', 'BBH')('Upper Band', 'BBP')('Upper Band', 'CNCR')('Upper Band', 'FBT')('Upper Band', 'IBB')('Upper Band', 'IEIH')('Upper Band', 'PBE')('Upper Band', 'SBIO')('Upper Band', 'XBI')('Upper Band', 'XLV')
2020-01-0223.160737.413138.22243.17121.6018146.208118.89427.94855.788241.6294.450696.637322.865335.44136.69242.839420.9387144.953118.09727.649255.213741.641493.613694.333523.133737.7297139.26543.965621.7711148.507120.29928.017255.98842.778495.970596.012523.402140.0195141.83745.091822.6036152.06122.50228.385256.762343.915498.327497.6915
2020-01-0323.05336.84136.61942.71421.3596144.314117.37627.725555.368640.9693.133895.795222.908435.5338136.45542.610620.9476144.258117.51127.595455.127741.15693.146594.653623.14537.7597139.21443.906621.7739148.348120.16727.98955.961642.653195.866596.104223.381539.9857141.97245.202622.6002152.439122.82328.382656.795544.150298.586497.5548
2020-01-0623.062836.77137.89543.02521.5935145.882118.1327.841555.328640.9993.941996.391322.901235.679136.32942.491821.0242143.947117.20427.575755.110240.790192.893895.147423.141337.8004139.16243.864621.7994148.23120.06427.969455.957342.529295.781796.243123.381539.9219141.99545.237422.5746152.512122.92328.363256.804444.268498.669597.3388
2020-01-0723.14737.068138.02443.14221.7611146.356118.1627.819354.96941.1294.091596.20222.92435.7637136.17942.380221.0897143.686116.87827.585154.902640.525292.619195.293823.151337.8291139.00743.801621.8268147.994119.88927.972755.899542.400495.622896.295723.378739.8946141.83445.22322.5639152.301122.90128.360256.896544.275698.626497.2975
2020-01-0823.256637.43138.71743.81822.2012148.032119.22128.005255.018941.6895.378496.826622.943735.8584136.13642.384821.1318143.658116.80327.612454.736640.447392.576895.519223.167137.8677138.95843.80621.8742147.913119.83527.987355.839642.28695.560196.400223.390539.877141.7845.227222.6166152.167122.86728.362156.942544.124798.543397.2811

Then, it's time to visually depict the Bollinger Bands for each ETF during the early stages of the Coronacrisis.

from matplotlib import pyplot as plt

figure, axis = plt.subplots(4, 3)
figure.set_size_inches(15, 10)
row = 0
column = 0

for ticker in bollinger_bands.columns.get_level_values(1).unique():
    name = health_care_etfs_in_biotech.loc[health_care_etfs_in_biotech.index == ticker, 'name'].iloc[0]
    
    bollinger_bands.xs(ticker, level=1, axis=1).plot(
        ax=axis[row, column],
        xlabel='',
        title=name,
        legend=False
        )

    column += 1
    if column == 3:
        row += 1
        column = 0
        
figure.suptitle('Technical Analysis of Biotech ETFs during the Coronacrisis', fontweight='bold')

figure.tight_layout()

This leads to the following graph which gives an indication of whether Biotech ETFs were oversold or overbought and how this effect is neutralised (to some degree) in the months after. Read more about the Bollinger Bands here.

Coronacrisis

Questions & Answers

In this section you can find answers to commonly asked questions. In case the answer to your question is not here, consider creating an Issue.

User Contributions

This section is meant to thank those that contributed to the project. Looking to contribute as well? Have a look here.

UserContribution
desaijimmyMade changes to Equities dataset including the Split of Daimler to Mercedes-Benz and Daimler Trucks
nindogoIntroduced a variety of new equities from the Nairobi Securities Exchange and introduced the country Kenya into the dataset.
colin99dHelped in the conversion of the Finance Database package to Object-Orientated, making the code much more efficient.

Contact

If you have any questions about the FinanceDatabase or would like to share with me what you have been working on, feel free to reach out to me via:

f you'd like to support my efforts, either help me out via the Contributing Guidelines or Buy me a Coffee.

Star History Chart