DAX expansion

03 December 2021

In this article, we will get an insight on how an index impacts a stock liquidity. We will look back on how DAX (German index 🇩🇪 on Deutsche Börse) expansion from 30 to 40 stocks impacted liquidity for these new stocks leveraging several APIs we provide.

It has always been known that stocks being part of an index were more liquid💧 than those being outside an index. It can be measured when a stock gets integrated in an index or when a stock is removed from an index.

It is quite rare that an index increases its components the way DAX did. On September 20th, DAX index went from 30 stocks to 40 ↗.

Until September 19th, DAX included representing 30 of the country’s largest companies by market capitalisation. It was one of the smallest blue-chip indices in Europe, compared with 🇮🇹 MIB 40 as well as 🇫🇷 CAC 40 or 🇬🇧 FTSE 100.

Following the announcement of Deutsche Böerse in 2020, the index became larger since 20 September 2021 by incorporating ten of the largest companies from Germany's MDAX listing 👇

  • Airbus SE, Brenntag SE, HelloFresh SE, Porsche SE, Puma SE, Qiagen NV, Sartorius AG (Pref. shares), Siemens Healthineers AG, Symrise AG and Zalando SE.

What was the impact on liquidity for these 10 new stocks?

Today's article will focus on measuring liquidity for these 10 new stocks using technical and analytical parameters to measure the market activity such as ticks count, traded sizes and trade counts.

We are requesting on-demand historical market data from highly trusted sources using several APIs within Ganymede, our web and cloud-based JupyterLab environment.

Getting started

The overall approach followed in this article is as follows:

  • Request ticks count for DAX new components before and after the index expansion
  • Analyze market activity for the recently added components
  • Track liquidity movements by requesting tick trades

We will be using a set of Systemathics modules in addition to Opensource modules. For this sample, we chose to use Python with the following Systemathics package:

PyPI version

Request ticks count - Topology feature

In order to understand the market activity of DAX components, we suggest to start with a purely technical indicator which is the ticks count, internally named topology. Each market event is pre-mapped, normalized and stored as a tick in our data store:

  • Trades: timestamps, prices, sizes, trades Ids, trade conditions, etc.
  • Book quotes (best bids and asks): timestamps, prices, sizes, etc.

We get a pandas dataframe with daily ticks count when calling TopologiesService:

DAX - ten new components

DAX index expaning

Market activity following components' change

With this data, we want to get insights through the the percentage increase for each ticker before and after being part of the index.

  • The range before being in the index is from 1st of June 2021 to 19th of September 2021.
  • The range after being in the index is from 20th of September to 1st of December 2021.

              
# we start from June 1st until December 2nd , including September 20th, DAX expansion date
start_date = datetime(2021, 6, 1).date()
end_date = datetime(2021, 12, 1).date()
change_date = datetime(2021, 9, 20).date()
day_before_change = datetime(2021, 9, 19).date()

# compute ticks count movement for the recently added components following the DAX expansion
ratios = (new_topologies[change_date:end_date].mean() - new_topologies[start_date:day_before_change].mean()) / new_topologies[start_date:day_before_change].mean()

# format data for display purposes
liquidity_ratios = round(ratios*100, 2)
liquidity = pd.DataFrame({'Name': names,'Ticker': liquidity_ratios.index, 'Liquidity movement (%)': liquidity_ratios.values})
liquidity
              
            
DAX idex expaning

There is a very meaningful impact. Liquidity was raised between 85% to 50% for most stocks.🚀

Request trades data - Tick trades feature

DAX new components: Traded size & trades count

Now, we will incorporate analytical parameters to enrich our analysis on market activity before and after DAX expansion. We are requesting trades data by calling TickTradesService.

The pandas dataframe below contains the daily trade size for the recently added DAX components:

DAX idex expaning

The pandas dataframe below contains the daily trades count for the recently added DAX components:

DAX idex expaning

Trades' evolution following components' change

Let's now track traded size and trades count movements following the DAX expansion 🔍

We assume previous dataframes containing new DAX components trades' data are as follows:

  • 1stdataframe storing daily traded size is called new_sizes
  • 2nddataframe storing daily trades count is called new_trades

The following code snippet highlights the traded size and trades count evolution following the DAX index expansion.

              
# Using the same dates as before
# compute traded sizes percentage change
size_ratios = (new_sizes[change_date:end_date].mean() - new_sizes[start_date:day_before_change].mean()) / new_sizes[start_date:day_before_change].mean()
liquidity_size_ratios = round(size_ratios*100, 2)
liquidity_size_changes = pd.DataFrame({'Name': names,'Ticker': liquidity_size_ratios.index, 'Traded size movement (%)': liquidity_size_ratios.values})

# compute trades counts percentage change 
count_ratios = (new_trades[change_date:end_date].mean() - new_trades[start_date:day_before_change].mean()) / new_trades[start_date:day_before_change].mean()
liquidity_count_ratios = round(count_ratios*100, 2)
liquidity_count_changes = pd.DataFrame({'Name': names,'Ticker': liquidity_count_ratios.index, 'Trades count movement (%)': liquidity_count_ratios.values})

# Merge both data frame
liquidity = pd.merge(liquidity_count_changes, liquidity_size_changes, on=["Ticker", "Name"])
liquidity
              
          
DAX index

It would be interesting to go request spread data by calling the TickBookService and analyze its movement over the time during short and long periods around the DAX index expansion data. This is an exercise left to the reader.💸

Both trade sizes and trades count significanlty increased for most of these 10 stocks.
Being part of an index is a great chance for stock as it ensures a much better liquidity, better spread.
That's why most of algo-trading stocks are part of index.
It's a good thing to be able to confirm with numbers that stocks part of index are more liquidid.
Thanks DAX 🇩🇪 for providing this rare opportunity.

Reach out to try our solutions

In this article, we request tick data and use index components by calling a dedicated API service within Ganymede, our web and cloud-based JupyterLab environment, and our API. You can use it as-is and/or call directly our API within your internal tools and start immediately retrieving on-demand financial data.

To get the full sample and discover more data analytics samples and building blocks navigate to our public Github →