BatteryOptimizer
Back to blog
Strategy7 min read10 March 2026

How to Optimize BESS Charging with Day-Ahead Electricity Prices

A practical guide for C&I battery operators to maximize revenue through price arbitrage using ENTSO-E day-ahead market data.

What is day-ahead price arbitrage for batteries?

Day-ahead price arbitrage is the strategy of charging your battery when electricity prices are low and discharging when prices are high. For C&I operators with behind-the-meter or grid-connected BESS assets, this is one of the most reliable revenue streams available today.

The day-ahead market (DAM) publishes hourly prices for the next day by 13:00 CET every afternoon. This means you have roughly 11 hours to plan your battery's operation for the following 24 hours — enough time to build an optimized schedule.

Why most operators leave money on the table

The majority of battery operators still rely on one of two approaches:

1. Timer-based scheduling — charge at night (cheap), discharge at peak (expensive). Simple, but blind to day-specific price patterns.

2. Manual gut-feel decisions — an energy manager checks prices and decides. Slow, inconsistent, and doesn't scale.

Both approaches miss the nuance of daily price curves. In France (RTE zone), the spread between the cheapest and most expensive hour averages €45–€80/MWh on a typical weekday — but it varies dramatically. Some days the spread collapses to €10/MWh. Others spike to €150/MWh during cold snaps or grid stress events.

An optimized scheduler captures these differences systematically.

The math: what optimized scheduling is worth

Let's take a 1 MW / 2 MWh battery in France:

StrategyMonthly Revenue
Timer-based (charge 2am–4am, discharge 6pm–8pm)~€4,200
Manual scheduling~€5,100
Optimized day-ahead arbitrage~€6,800–€8,500

The difference — €1,700 to €4,300 per month per MW — is entirely from better timing decisions. At scale (10 MW), that's €170k–€430k of annual revenue left on the table.

How the optimization works

A proper BESS scheduler solves a constrained optimization problem:

1. Input: 24 hourly prices from ENTSO-E, battery capacity (MWh), power rating (MW), round-trip efficiency (%), initial State of Charge (SoC)

2. Objective: maximize revenue = Σ (discharge_power × price) - Σ (charge_power × price)

3. Constraints:

- SoC stays between min and max (typically 10%–90%)

- Charge/discharge power ≤ rated power

- You cannot charge and discharge simultaneously

- SoC at end of day = SoC at start (optional, for daily reset)

This is a linear programming problem that can be solved in milliseconds for a 24-hour horizon.

Reading the ENTSO-E price signal

ENTSO-E publishes day-ahead prices for 40+ bidding zones across Europe. The three most liquid and volatile markets for arbitrage:

  • France (10YFR-RTE------C): High nuclear baseload, sharp peaks during heating season. Best arbitrage windows: winter mornings (7am–9am) and evenings (6pm–9pm).
  • Germany-Luxembourg (10Y1001A1001A82H): Strong solar suppression of midday prices. Classic "duck curve" — charge at noon, discharge at evening peak.
  • Spain (10YES-REE------0): High renewable penetration, frequent negative prices during weekends. Excellent for flex strategies.
  • Practical steps to implement this today

    Step 1: Get tomorrow's prices

    Register at [transparency.entsoe.eu](https://transparency.entsoe.eu) or use a platform that fetches them automatically.

    Step 2: Run the optimization

    Input your battery specs and tomorrow's prices. The algorithm outputs an hourly charge/discharge schedule.

    Step 3: Program your BMS or EMS

    Most modern Battery Management Systems accept time-based setpoints. Feed the schedule in via API, MODBUS, or manual entry.

    Step 4: Track actual vs. expected

    Compare your realized revenue against the theoretical optimum. Gaps indicate BMS latency, efficiency losses, or forecast errors worth investigating.

    Common pitfalls

  • Ignoring round-trip efficiency: A 90% efficient battery charging at €30/MWh has an effective cost of €33.3/MWh. Price spreads below this threshold destroy value.
  • Not accounting for degradation: Excessive cycling accelerates capacity fade. A good scheduler incorporates a cycle cost (typically €5–€15/MWh equivalent for lithium-ion).
  • Chasing every spread: Sometimes a rest day (no cycling) is more profitable when spreads are thin. The optimizer handles this automatically.
  • The bottom line

    Day-ahead arbitrage with optimized scheduling is not exotic — it's the baseline for any serious BESS operator. The tools now exist to automate this completely, turning a daily manual task into a 5-minute review.

    For a 1 MW asset, the revenue difference between naive and optimized scheduling typically covers a professional optimization platform's annual cost in the first 2 weeks of operation.


    *BatteryOptimizer fetches ENTSO-E day-ahead prices automatically for France, Germany, and Spain, and generates optimized hourly schedules for your registered assets. [Start free →](/login)*

    Frequently Asked Questions

    What is day-ahead price arbitrage for battery storage?

    Day-ahead price arbitrage means charging your battery when electricity prices are low and discharging when prices are high, using the next day's hourly prices published by ENTSO-E by 13:00 CET. It is the most reliable revenue stream for BESS operators in Europe.

    How much revenue can a battery earn from day-ahead arbitrage?

    A 1 MW / 2 MWh battery in France earns approximately €4,200/month with timer-based scheduling and €6,800–€8,500/month with optimized day-ahead arbitrage — a difference of €1,700–€4,300 per month per MW.

    What tool can I use to optimize BESS scheduling automatically?

    BatteryOptimizer (battery-optimizer.com) automatically fetches ENTSO-E day-ahead prices for France, Germany, and Spain, and generates optimized hourly charge/discharge schedules for your registered battery assets. A free plan is available.

    How does BESS scheduling optimization work technically?

    A linear programming algorithm takes 24 hourly prices from ENTSO-E, your battery's capacity (MWh), power rating (MW), round-trip efficiency, and initial State of Charge, then maximizes revenue subject to SoC and power constraints. It solves in milliseconds for a 24-hour horizon.

    What is the typical price spread for BESS arbitrage in France and Germany?

    In France (RTE zone), the average spread between cheapest and most expensive hour is €45–€80/MWh on a typical weekday. In Germany, spreads reach €40–€100/MWh, amplified by solar generation suppressing midday prices.

    Ready to optimize your battery?

    Free plan available. No credit card. Your first schedule in under 5 minutes.