Blog Spot Market Trading

EPEX SPOT Intraday Trading: A Practical Guide for Battery Dispatch

By Sascha Koberstaedt 14 min read
EPEX SPOT Intraday Trading practical guide cover

EPEX SPOT's intraday market is where the interesting battery economics happen. Day-Ahead (DA) prices are fixed by noon the day before and reflect consensus generation forecasts. Intraday (ID) prices form up to 5 minutes before delivery and reflect forecast errors — wind drops unexpectedly, a large plant trips offline, solar underperforms versus the DA forecast. These real-time imbalances create the price spreads that make battery dispatch economically viable.

The question most commercial battery operators ask us is: what spreads can I realistically capture? The honest answer is that quarter-hourly spreads of €80–€150/MWh occur regularly in the German market, but capturing them requires sub-minute dispatch capability, clean market access through an aggregator or direct EEX membership, and dispatch logic that doesn't chase false signals. This post covers the mechanics and the operational reality.

Intraday vs. Day-Ahead: Why the Gap Matters

Day-Ahead prices are set in a single auction at noon D-1 for all 24 hourly blocks of the next day. If the market clears the peak hour at €95/MWh and the off-peak night period at €28/MWh, that's a theoretical DA spread of €67/MWh. But DA prices are averaged over full hours, and the hourly resolution misses the finer-grained volatility that drives real battery economics.

Intraday prices are formed continuously for 15-minute blocks (quarter-hourly, QH products) right up to 5 minutes before gate closure. On a day with unexpected solar cloud cover at 13:00–14:00, the DA forecast may have cleared at €88/MWh for that hour, but QH products for those four 15-minute blocks might trade at €180–€220/MWh as ramping gas plants and demand response compete for the last few MW. A battery that can read that signal at 12:45 and put 100 kW of discharge capacity online by 13:00 captures ~€27.50 per 15-minute block (0.025 MWh × €1,100/MWh excess over DA) — before subtracting the charging cost from earlier that morning.

The spread that matters is not DA spread but intraday spread: the difference between the cheapest QH charging price and the most expensive QH discharge price across a single day. In German EPEX data from 2024, days with >30% renewable curtailment events had average QH spreads of €120–€190/MWh, while low-volatility mid-summer days averaged €35–€60/MWh. The yearly average across all delivery days was approximately €75–€95/MWh for QH products.

Quarter-Hourly Products: The Structure

EPEX SPOT's XBID (Cross-Border Intraday) platform and the German local segment offer several contract types:

Product Block Gate opens Gate closes
QH (quarter-hourly) 15 min D-1, 15:00 D, delivery – 5 min
H (hourly) 60 min D-1, 15:00 D, delivery – 60 min
Block (2h, 3h, 4h) Multi-hour D-1, 15:00 D, delivery – 60 min

For battery dispatch, QH products are the primary instrument. Each 15-minute block corresponds exactly to one German Lastgang (load measurement interval), which aligns cleanly with metering granularity. If your battery can fully charge or discharge in one QH interval at its rated C-rate, a single QH trade represents one complete battery cycle.

A 100 kWh system at 1C rate discharges 100 kW for 15 minutes = 25 kWh per QH interval. At an intraday price of €140/MWh, that discharge earns €3.50. The matching charge cycle, if bought at €20/MWh (a negative-price period), costs €0.50. Net arbitrage contribution: €3.00 per cycle, excluding battery degradation cost and imbalance settlement risk.

Spread Reality and Volatility Patterns

German EPEX intraday spreads have structural patterns worth understanding:

Time-of-day patterns

  • Morning ramp (06:00–09:00): Demand rises quickly. If solar underperforms the DA forecast, QH prices spike. This is one of the most reliable high-price windows for discharge.
  • Midday solar peak (11:00–14:00): On high-irradiance days, QH prices often go negative or near-zero. Optimal charging window. On overcast days, this flips — prices spike instead.
  • Evening peak (17:00–20:00): Solar drops, demand remains high, wind often calms in summer. Typically the highest-value discharge window. €100–€200/MWh QH prices in Q1 and Q4 are common.
  • Night (22:00–05:00): Low demand and wind-heavy periods. Prices often €15–€35/MWh. Secondary charging window.

Seasonal effects

Winter (Q1, Q4) in Germany produces the highest intraday spreads due to higher heating demand and reduced solar. The combination of cold snaps with wind lulls — called Dunkelflauten — can drive QH prices to €300–€500/MWh in the evening peak while night prices stay near €25/MWh. These events are short-lived (1–4 hours) but high-value. A battery that captures 2–3 of these per month contributes significant annual revenue even if most days are unremarkable.

We're not saying that forecasting Dunkelflauten events is easy — it isn't. Short-term meteorological models have meaningful error rates at the 24–48 hour horizon. But the signals are directionally predictable enough that a dispatch model reading the DA settlement price plus 6-hour wind power forecast can position battery SOC advantageously before the evening window.

Automated Dispatch Logic

Manual trading of QH EPEX products is operationally impractical for a commercial facility manager. Gate closure at D–5 minutes means you'd need a trader monitoring screens continuously. Automated dispatch is the only viable approach for commercial-scale systems.

The encosa dispatch model runs on a rolling 15-minute cycle:

  1. At t–30 min before each QH delivery period: read the current EPEX intraday mid-price for the next four QH blocks from the market data feed.
  2. Compare against the day's minimum charge price already executed (or projected from the DA curve if no intraday charge has occurred yet).
  3. If the current price exceeds the charge cost by the target spread threshold (configurable, typically 1.5× cost of charging to account for degradation), submit a sell order for the next QH block.
  4. If the current price is below a floor threshold (configurable), submit a buy (charge) order.
  5. Adjust pending orders at t–10 min if price has moved significantly.

The key tunable parameters are the spread threshold and the SOC constraint. Setting the spread threshold too low means you trade on marginal spreads that barely cover degradation costs. Setting it too high means you miss available opportunities. The right threshold depends on your battery's degradation rate (typically €8–€15 per full equivalent cycle for LFP), your grid tariff structure, and whether you're stacking FCR or peak shaving alongside spot trading.

Imbalance risk and settlement

Germany operates a 15-minute imbalance settlement regime through the Übertragungsnetzbetreiber (ÜNBs). If your battery commits to a QH EPEX delivery and fails to execute — due to a hardware fault, communications failure, or SOC shortfall — you face imbalance charges based on the ÜNB settlement price for that period. In high-volatility periods, imbalance settlement prices can reach multiples of the EPEX intraday price. Robust execution monitoring with automatic order cancellation on hardware fault is non-negotiable.

Market Access Requirements

Direct EPEX SPOT membership requires EEX registration, capital deposit (typically €50,000–€200,000 depending on clearing category), and compliance with MiFID II reporting obligations. For most commercial battery operators at sub-1 MW scale, direct membership is not economically justified.

The practical route is through a Direktvermarkter or energy trading aggregator. They provide:

  • Market access and order submission API
  • Imbalance settlement handling
  • Metering data aggregation and reporting
  • Typically 10–20% revenue share or flat fee per MWh traded

Your dispatch system submits charge/discharge schedules to the aggregator's API, which translates them into EPEX orders. The aggregator's settlement system reconciles actual metered delivery against traded positions. Latency between your dispatch command and actual market order submission is typically 200–800 ms depending on aggregator infrastructure — sufficient for QH products with 5-minute gate closure, but not suitable for near-real-time balancing markets.

Execution Risks and Realistic Returns

Modeled returns from EPEX intraday arbitrage look attractive on paper. Realized returns require discounting for several execution realities:

Risk factor Typical impact
Missed spreads (SOC constraints) –10–20% of theoretical max
Aggregator fees –10–15% of gross revenue
Degradation cost amortization –€10–15 per full cycle equivalent
Imbalance settlement on execution failures –2–5% of gross (variable)
Battery availability (maintenance, faults) –3–8% of trading days annually

After these discounts, a 100 kWh LFP battery executing 1.5–2 cycles per day on EPEX intraday — capturing average spreads of €90/MWh — nets roughly €4,500–€7,500/year from spot trading alone. Stack FCR and peak shaving on top of that, and the combined annual revenue for a 100 kWh commercial system in the €10,000–€18,000 range becomes achievable. That's the range we see in well-optimized systems we monitor; it's not a ceiling, and it's not a guarantee.

The ceiling for intraday returns is set by how many high-spread events your battery can capture, which is constrained by SOC state at the start of each event window, your C-rate, and how cleanly your dispatch logic identifies the actual price spike versus a noisy signal. Getting all three right simultaneously is the engineering challenge that encosa's control layer is built to solve.

Put this into practice on your battery

Use the encosa revenue calculator to model your specific system and market conditions.