"How much money can I make with a battery?", we get asked a lot. On this site, we publish our FlexIndex, which is a transparent reference for the value of flexibility on the German power market. In order to achieve a comprehensive and transparent flexibility index, we open-source our three market optimization model. 

The FlexIndex is a transparent reference for the value of flexibility in the German power market. The calculation of the FlexIndex is based on the optimization of a battery on the German wholesale electricity markets. More specifically, we consider a reference battery with 1MWh, 1MW and 1 cycle per day, which is optimized on the Day-Ahead Auction, the Intraday Auction and the Intraday Continuous Market.

In simple terms, what the FlexIndex tells you is the following: “If I owned a 1MWh-1MW-1Cycle battery, how much money would I make with it every day?”

The revenue of the reference battery aims to give an indication of the historical and present value of flexibility in the German Power Market. If you own a battery asset, or develop one, and are interested in a detailed revenue modelling of your specific asset, please get in touch with us.

The above graph shows the historical curve of the FlexIndex from 2018 until present. Note that we show a 28 day moving average of the actual daily values to eliminate some noise. You can zoom into the graph by selecting an area with your mouse. The button on the upper right resets the zoom. Hovering with your mouse will show the explicit values for each day. 

The underlying data is available for download. On the bottom of this page you will find a form where you can provide your email address to receive access to the full historical data of the FlexIndex. 

Open-sourcing the optimization model...

The model for the three market linear optimization is made publicly available on our GitHub. This is a simplified version of our internal optimization model. It is supposed to be as comprehensible and transparent as possible. It is also the exact model that was used to calculate the FlexIndex. The GitHub repository contains a document with the mathematical formulation of the optimization problem, as well as a Python implementation of the model using the free library Pyomo. 

We decided to open-source this material to help push forward the development of the energy storage sector. The whole field of flexibility optimization is very young but rapidly picking up pace. With this model we want to help build a publicly available knowledge pool for flexibility optimization and hopefully spark some professional discourse which can benefit everyone. If you build upon this model, or use it in some other way, we would be happy to see you also contributing to the open-source knowledge pool.

How it works

The model follows the logic of the optimization explained in our blog post from last October on the three market optimization of battery energy storage, which some of you might have read. 

Here are some assumptions:

  • We consider a battery with 1MWh energy capacity, 1MW power capacity and allow 1 full cycle per day.
  • More complicated battery properties like efficiency, depth-of-discharge restrictions or grid connection constraints are left out of this model for the sake of simplicity. 
  • Every day is considered individually. The battery starts with a State-of-Charge of 0% at midnight and ends with a State-of-Charge of 0% 24 hours later.
  • Positions on the three markets are optimized sequentially, based on perfect foresight. (Read below why we still believe this to be a very conservative approach)

To give better intuition of how this works, let us look at an example day in October 2023.

Optimization Step 1

We begin by taking positions on the Day-ahead auction, where we buy the cheapest hour and sell the most expensive hour. On the example day, the cheapest hour is 03h-04h and we buy here at 7.77 EUR/MWh. The most expensive hour is 19h-20h, where we sell at 127.36 EUR/MWh. On the given day, the generated Day-ahead revenue of 119.59 EUR is identical to the the High-Low-Spread of the Day-Ahead Auction. For the reference battery this is true for most days, except for situations where the daily high price occurs before the daily low price (We need to charge the battery before we can discharge). You can already see that while the Day Ahead High-Low Spread is not a perfect indication for the revenue potential it has a strong correlation with revenues, which is why we advertise for this metric as an indicator for the value of flexibility. 

The trades taken on the Day-ahead auction result in a certain State-of-Charge profile. It is important to understand that this profile is subject to change. The Day-ahead positions are taken one day in advance. In the further steps we will trade around those existing positions in the intraday markets. The State-of-Charge profile after step 3 is the final schedule that is going into dispatch. 

Optimization Step 2

In the second step, we take trades on the intraday auction, but we have to take into account our already existing positions from the Day-ahead auction. For instance, it turns out that we get high price spikes on the ID Auction in quarters 27 and 32. We obviously want to sell there, but since we already sold all of our energy in 19h-20h, we have to close some of our existing positions. Therefore, we buy back some of the quarters in 19h-20h that we previously sold on the Day-ahead auction. The trades can become quite complex here, but the optimization algorithm finds the schedule, which maximizes the additional revenue. On the example day, we add 40.66 EUR to our revenue, from the positions taken on the Intraday Auction. Note how the additional positions result in a different, more complex State-of-Charge profile. 

Optimization Step 3

In the final step we take trades on the intraday continuous market, again, respecting our positions from the previous two optimization steps. The ID continuous market is a pay-as-bid market, as opposed to the auctions in the previous two steps. Here, power prices in each quarter change over time. We approximate the ID Continuous market with the ID1 index, which is the volume-weighted average price of all trades in the last hour before gate closure. 

Otherwise, the logic of taking positions on the ID Continuous market is identical to the second optimization step. On the example day, we generate an additional revenue of 36.45 EUR from our ID Continuous positions. 

The total revenue of the given day is the sum of the three market's seperate revenues, so 119.59 EUR + 40.66 EUR + 36.45 EUR = 196.70 EUR. 

Why the FlexIndex is a Conservative Approach despite Perfect Foresight

The fact that we assume perfect foresight here might make the approach look overly optimistic. Perfect foresight only works historically, how would you translate this into practice? 

For the Day-Ahead Auction and Intraday Auction one indeed never achieves the perfect foresight results. However, with sophisticated forecasting methods and good knowledge of the markets, it is possible to get quite close. One important aspect to understand is that for the auctions you only have to correctly predict when the highest or lowest prices will emerge, but not how high or low they will be. The market clearing principle of the auctions will do the rest here. 

For the continuous intraday market in the third step, the situation is quite different. As mentioned above, this is a pay-as-bid market, where prices continuously change over time. In practice, the contracts will at some point in time always trade at prices higher than the ID1, and at another point in time they will also trade at prices lower than the ID1. In Intraday trading you always see, where each quarter is currently trading at and can take positions according to that. No need to guess here. As soon as you see another, higher spread between other quarters, you close your existing positions and enter the new trade. This is where flexibility assets show their full potential and almost become a short-term trading cheat code. If you have a well though-out flexibility trading algorithm in place, and an experienced trading team to take over in heated situations, you will outperform the ID1 perfect foresight approximation and do so by a substantial amount. Furthermore, the FlexIndex is a Spot Index and ignores FCR, aFRR, and regulatory arbitrage which clearly offers further earning potential.

They say, "All models are wrong, but some are useful": We chose to publish a FlexIndex based on a methodology that is as simple as possible and as complex as necessary. Therefore we chose to ignore within-product Intraday volatility as including this makes a model that is replicable and comprehensible to the general public impossible. The published model and the resulting FlexIndex present as a transparent and comprehensible reference for the value of flexibility. 

Get Raw Data

Below, you can fill in your information to receive access to the FlexIndex historical dataset.