Skip to content

Arbitrage on a dynamic contract: when the spread beats the losses

On a supply contract that follows the day-ahead market, a battery earns by charging in cheap quarter-hours and discharging in expensive ones. A cycle pays only when the discharge price is above the charge price divided by the round-trip efficiency, plus the network charges on the losses and any wear cost. Market spreads look large — on average €118–153 per MWh between the best two hours of each day in the Netherlands, Germany and Romania in the year to July 2026 — but a battery with real forecasts, a peak to guard and a warranty to respect captures only part of them.

6 min read · Updated 2026-10-30

What you need first

  • A dynamic contract: the price per quarter-hour (or hour) is the day-ahead price times a factor plus the supplier's markup, then taxes. The formula is contract-specific; enter it from the contract.
  • Day-ahead prices in 15-minute periods: the European day-ahead market moved to a 15-minute market time unit for delivery from 1 October 2025 (OKTE).
  • Availability: in the Netherlands fewer than 10% of non-household customers had a dynamic contract (SolarPower Europe 2026); in Germany suppliers must offer dynamic tariffs to customers with a smart meter since 1 January 2025 (§41a EnWG); in Romania suppliers with more than 200,000 customers must offer them to smart-meter customers on request (economica.net).
  • On a fixed single-rate contract there is no price difference to capture.

The threshold rule

Per kWh discharged, a cycle earns the discharge price minus the charge price divided by the round-trip efficiency, minus the wear cost. It pays only if: discharge price > charge price ÷ efficiency + wear cost.

Worked example — illustrative: 200 kWh discharged, a charge price of €60 per MWh, a discharge price of €140 per MWh, 88% round trip (all assumptions).

  1. Energy to charge: 200 ÷ 0.88 ≈ 227.27 kWh, costing 227.27 × €0.060 ≈ €13.64.
  2. Value of the discharge, used on site in place of imports: 200 × €0.140 = €28.00.
  3. Spread earned: 28.00 − 13.64 = €14.36.
  4. Network charges on the losses: the 227.27 − 200 = 27.27 kWh lost pay the per-kWh transport charge and energy tax. On Liander's medium-voltage tariff and the 50,001 kWh to 10 million tax bracket (assumption): 27.27 × (€0.0226 + €0.03735) ≈ €1.63 (Liander 2026; Belastingdienst).
  5. Net before wear: 14.36 − 1.63 = €12.73 for the cycle.

The discharge only saves the import price if the site is drawing at least that much at the time. Discharging into export earns the export price, which on a dynamic contract follows the same market but usually without the taxes and network charges.

Wear: the cost of a cycle

A rough wear cost is the replacement cost spread over the battery's warranted cycles. Illustrative: replacing at 60% of an installed cost of €450 per kWh is €270 per kWh of capacity; over 6,000 warranted full cycles that is 270 ÷ 6,000 = €0.045 per kWh discharged, €45 per MWh (assumptions).

  • With that wear cost, the example's cycle needs a discharge price above 60 ÷ 0.88 + 45 ≈ €113.2 per MWh — a spread of at least about €53 per MWh over the €60 charge price.
  • Use the wear cost in the dispatch rule, to stop low-value cycles. In an NPV that already includes the replacement, do not count it a second time.
  • A municipal utility analysing a battery on the SAM forum concluded that arbitrage alone with high cycle rates is hard to justify on the economics (SAM forum).

What the market offered

  • Average 2-hour daily day-ahead spread, 1 July 2025 to 1 July 2026: €118.12 per MWh in the Netherlands, €121.16 in Germany and €153.43 in Romania (Synertics, updated 29 Jul 2026).
  • Average daily price swing in 2025: €124 per MWh in the Netherlands, €125 in Germany and €165 in Romania (Electricity Maps: NL, DE, RO). A daily swing is an upper bound; one or two cycles a day capture only part of it.
  • Perfect-foresight bound: the Dutch 2-hour spread was worth €83,000 per MW a year in 2025 (Modo Energy); for a 2-hour battery that is 83,000 ÷ 2,000 kWh = €41.5 per kWh a year, before network costs.
  • A model of a UK supermarket battery found £9,900 a year for 500 kWh on day-ahead exposure with perfect foresight (Gridcog, 26 Feb 2025): 9,900 ÷ 500 = £19.8 per kWh a year.

What a study should assume

Zorowatt's scenario notes assume 300 cycles a year and half the average 2-hour spread after losses and forecast error. Per kWh of capacity a year:

  • Netherlands: 0.11812 × 0.5 × 300 ≈ €17.72.
  • Germany: 0.12116 × 0.5 × 300 ≈ €18.17.
  • Romania: 0.15343 × 0.5 × 300 ≈ €23.01.
  • For comparison, the Dutch figure is 17.72 ÷ 41.5 ≈ 43% of the perfect-foresight bound.

These are assumptions to state and vary, not forecasts. Spreads change year to year, and they may narrow as more grid-scale batteries connect — about 2 GW were expected in Romania in 2026 (Curs de Guvernare).

Arbitrage alongside other jobs

  • Energy kept back for the afternoon peak cannot also be sold at the evening price. A rule-based controller trades only above a reserve for the next risky window.
  • Charging must not create a new peak: cheap hours with a high site load may be off limits.
  • Illustrative, from Zorowatt's scenario notes: for a Dutch office battery at €450 per kWh, even the perfect-foresight €41.5 per kWh a year would give 250 × 41.5 = €10,375 a year — dynamic tariffs alone are not the case there today.

The Workspace runs arbitrage on the contract's own price formula, after the peak guard, and re-bills the result. Dispatch modes are compared in Rule-based vs optimal dispatch.

Frequently asked questions

Can a battery do arbitrage on a fixed-price contract?
No. With one price at every hour there is no spread to capture. A time-of-use contract with fixed day and night rates gives a small, predictable spread; a dynamic contract gives the market's.
How many cycles a day make sense?
As many as pay after losses, network charges on the losses and wear. Zorowatt's default assumption is 300 cycles a year; warranties set their own limits — one assumes two cycles a day — so check the battery's terms.
What about negative prices?
Charging at a negative price earns money, but the losses still pay network charges and tax. A simulation must stop the battery from charging and discharging at once just to burn energy.
Is arbitrage income guaranteed?
No. It depends on future prices, which nobody knows. Show it as a separate line with its assumption, and show the case without it.

Related guides

Sources

Last checked: 2026-10-30. Every figure in this guide comes from the source linked next to it, with the retrieval date Zorowatt's research recorded (28–30 October 2026), or from arithmetic shown step by step. The cycle, wear-cost and office figures are illustrative; the 50% capture and 300 cycles are Zorowatt's assumptions.

Stuck on something else? Ask the community.

Fazer uma pergunta

Novos guias na sua caixa de entrada

Cerca de um e-mail por mês: guias e vídeos novos, soluções para os problemas sobre os quais o pessoal pergunta e novidades da Zorowatt.

Cerca de um e-mail por mês com novos guias, vídeos e novidades da Zorowatt. Primeiro enviamos um link de confirmação para o seu e-mail, e você pode cancelar a inscrição quando quiser. Política de privacidade

Size it right with Zorowatt

Upload a site's meter data and bill. Zorowatt checks the data, rebuilds the bill, sizes a battery and writes the report. Your first site analysis is free.