What happened on the market while the battery was running?
This page shows 8 days in one view: 7 days back (a full week of storage action) + 1 day of forecast. Top left is the real charge/discharge load curve from the grid-operator portal (with a ~2-3 day lag), above it the market prices as a forecast. This makes visible in which hours a better strategy would have extracted more from the market.
How to read it: The dashed vertical line marks "NOW". Everything to the left = the past (load curve + prices final, all "Actual"). Everything to the right = the ENTSO-E DA forecast for tomorrow (not a model — the DA auction cleared today at 12:00 noon for tomorrow from 00:00 onwards).
Data quality: All series are real market prices from the respective primary sources (EPEX auction, TSO activation, BNetzA reBAP). No modelled / smoothed values ("backcast") — Montel's DA spot backcast and spot forecast are held in the stack but are NOT shown here.
What happens here? Every night at 06:30 UTC, Python deterministically queries all daily figures from ClickHouse (Σ charge/discharge, real vs. ideal spread, efficiency, top charge/discharge hour) and passes them as facts to Gemma 3:27b on GX10-ece1 (100.76.114.92). Gemma may ONLY phrase text, never invent new numbers — LEAP-71 validation checks each one afterwards.
— Daily report loading …
0b Ask the learning system · RAG · Gemma 3:27b LEAP-71
How it works: Your question is vectorised with nomic-embed-text on GX10-ece1, then ChromaDB searches the Top-K most relevant learning documents (Reference customer DE master data, concept wiki, daily reports) and passes them together with your question to Gemma 3:27b. Gemma may only phrase text from the sources — LEAP-71 checks that no numbers are invented.
0c Forecast next 24h · BUY/HOLD/SELL recommendation
The EPEX DA auction is published daily at 12:00 for the next day. From it, Stromfee derives a signal per 15-min slot: BUY (≤ 25 % quartile) · HOLD · SELL (≥ 75 % quartile). Confidence is based on the distance to the daily extreme. Maximum-revenue projection for a 1.5 MW × 4.072 MWh battery vendor.
Stromfee recommendation now
—
Loading current signal data ...
Top-3 charge windows (cheapest hours)
—
Top-3 discharge windows (most expensive hours)
—
Daily spread
—
€/MWh · pmax − pmin
1 full cycle
—
€ · spread × 4.072 MWh
2 full cycles
—
€ · battery-vendor typical
3 full cycles
—
€ · manufacturer max
EPEX Day-Ahead today + tomorrow with IDEAL markers
Signal list · all slots today + tomorrow
1v Missed potential per market · 8-day range (−7d to +1d)
What this table shows: For each hour of the 192-hour range, the maximum possible spread revenue at 1.5 MW full load is computed per market and reduced by the share Reference customer DE has actually already earned. The red bar series in each sub-chart below visualises the same thing hour by hour. The sum per market shows how much revenue was left on the table if Reference customer DE had perfectly arbitraged ONLY this one market. These sums are NOT additive — the storage cannot trade in all 12 markets at the same time.
Question from Reference customer DE: "Why are the returns so low?" This section compares the actual grid-operator/direct-marketer charge/discharge strategy with the ideal arbitrage pattern. Heikin-Ashi candles smooth the DA price trend (green = rising trend = getting more expensive, red = falling trend = getting cheaper). Expectation: the BESS charges in red phases (the trough) and discharges in green phases (the peak). If this systematically does not coincide, the direct-marketer strategy is suboptimal and the real additional revenue is lower than what would be theoretically possible.
Quantitative evaluation — what actually came out?
— loading —
Readout:— calculating —
1b Detail line chart · Battery ↔ Day-Ahead price (€/MWh)
What do you learn here? If the storage charges in hours with a low DA price (e.g. noon, lots of PV) and discharges in expensive evening hours, the marketing was profitable. Red line at top = DA price, yellow dashed = ID-VWAP, blue/green bars at bottom = charge/discharge in kW.
Note: the DA peak and the ID peak are often 1-2 h apart. DA = day-before auction (ENTSO-E 14:30, prices the forecast) · ID = live continuous (reacts to real-time load, wind-forecast errors, power-plant status). Example 22.05.2026: DA peak 18:45 UTC = €247.68 · ID peak 20:30 UTC = €224.61. A pure DA optimisation misses the ID peak — which is exactly what partly happens with the direct marketer. The red + yellow vertical lines in the chart show both maxima in the window.
2 Intraday Continuous + SIDC auctions — each individually with BESS action
What do you learn here? Each of the 6 sub-charts shows a market price index overlaid with the actually measured storage load curve (purple bars = charge, green = discharge). Green "IDEAL CHARGE" marker = cheapest slot in the window (the storage should have charged here). Red "IDEAL DISCHARGE" marker = most expensive slot (the storage should have discharged here). If the bars under the green marker coincide with the charging profile → arbitrage used. If not → missed opportunity.
2.1 · ID-Full (EPEX Continuous VWAP of all trades · Actual)
2.2 · ID-1 (EPEX VWAP last 1 h Continuous · Actual)
2.3 · ID-3 (EPEX VWAP last 3 h Continuous · Actual)
2.4 · IDA1 (SIDC auction · clearing 15:00 D−1)
2.5 · IDA2 (SIDC auction · clearing 22:00 D−1)
2.6 · IDA3 (SIDC auction · clearing 10:00 D · delivery only from ~12:00)
3 Balancing energy + Reactive energy — each individually with BESS action
What do you learn here? This is about peak revenue beyond the continuous market. aFRR/mFRR activation prices jump when the grid balances acutely — the storage could land in >500 €/MWh hours here. reBAP is the live balancing-group signal with a ~30 min lag. Min/max markers show the maximum potential spread per window.
3.1 · aFRR Activation Up (positive balancing-energy dispatch · Actual)
3.2 · aFRR Activation Down (negative balancing-energy dispatch · Actual)
3.3 · mFRR Activation Up (minute reserve positive · MARI Actual)
3.4 · mFRR Activation Down (minute reserve negative · MARI Actual)
3.5 · reBAP single (balancing-group settlement · BNetzA Actual · quasi-live)
3.6 · ID-AEP (intraday reactive-energy index · 35 h lag)
What do you learn here? Not every source is equally up to date. Here you see how many slots we have per series (capacity prices 100 % because of the D-1 auction, activation prices with a lag, BESS load curve with the grid-operator portal lag). Gaps are reality, not bugs.