Skip to content
Battery Arbitrage Lab (home)

Evaluation · added in 2026

How sure are these numbers?

The other pages report one total for one six-week window. Here every number comes with a 95% interval over market days, comparisons are paired day by day, and every seed is printed. The original results on the other pages are unchanged.

Evaluation design

How every number below is made

Evaluation design

Unit of analysis
The market day. Every number is built from per-day results, so every interval is over days.
Protocol
Daily reset: each day starts empty and is solved on its own. Energy left at midnight is worth nothing, so every policy that plans ahead plans only to midnight (DR-005).
Samples
Brief test window (n = 42), Cross-validation window (n = 181), Calendar 2025 (n = 365)
Intervals
95% percentile intervals from a circular block bootstrap: blocks of 7 consecutive days, B = 4,000 resamples, seed 20210701.
Proportions
Wilson score intervals (shares of days a policy wins, or loses money). They treat days as independent, so they are a little optimistic.
Comparisons
Paired by day: mean difference with its interval, the standardised effect d_z, the share of days won, and a Wilcoxon signed-rank test, Holm-adjusted across the three questions.

Per-day revenues: web/data/evaluation.json, written by scripts/build_evaluation.py with the Python reference optimiser (scipy.optimize.milp (HiGHS), SciPy 1.18.1) on the same prices as every other page. In the test suite the TypeScript optimiser reproduces every sensitivity design on every day (to $0.02), and the policies 2,350 of 2,352 strategy-days (to $0.05; the other two are ties between equally good plans). Intervals are computed at build time by the tested helpers in web/src/lib/stats, checked against SciPy, statsmodels and R.

01 · Sensitivity

Which knob matters most?

Perfect-foresight revenue for every day of a sample, re-solved with one battery setting changed at a time around the brief's 300 MW / 580 MWh / 81% design. Changes are paired: the same days are resampled for both designs, so an interval says how consistently the change pays, not how much daily revenue varies.

Mean per day

$140,979

95% CI $121k to $168k

Market days

42

Brief test window

Largest elasticity

0.99

Round-trip efficiency

+$10/MWh wear

−9.8%

95% CI −11.3% to −8.3%

Tornado

Change in revenue from the brief's design

Change in total perfect-foresight revenue over 42 days for each parameter change, with 95% intervals
  • Power−10% (270 MW)−4.9% [−5.8%, −4.2%]
  • Power+10% (330 MW)+4.5% [+3.7%, +5.4%]
  • Energy capacity−10% (522 MWh)−5.5% [−6.3%, −4.6%]
  • Energy capacity+10% (638 MWh)+5.1% [+4.2%, +5.8%]
  • Round-trip efficiency−10% (72.9%)−9.6% [−12.7%, −6.2%]
  • Round-trip efficiency+10% (89.1%)+10.2% [+6.5%, +13.4%]
  • Degradation cost+$5/MWh ($5/MWh)−5.1% [−5.9%, −4.3%]
  • Degradation cost+$10/MWh ($10/MWh)−9.8% [−11.3%, −8.3%]

Dots are estimates, bars 95% intervals. The line marks no change.

Elasticities

Revenue gained per 1% more

Arc elasticities of revenue at the brief's design, with 95% intervals
ParameterElasticity
Round-trip efficiency72.9% to 89.1%0.990.63 to 1.30
Energy capacity522 MWh to 638 MWh0.530.44 to 0.61
Power270 MW to 330 MW0.470.40 to 0.56

An elasticity of 0.5 means a 1% larger value earns about 0.5% more. It comes from the designs 10% either side of the brief's.

Round-trip efficiency against energy capacity: the difference in elasticity is 0.46 (95% CI 0.04 to 0.85), so round-trip efficiency is the more valuable knob in this sample.

Power

Mean revenue per day

$0$50k$100k$150k$200k$250k75150300450600

Power (MW); filled dot: the brief's design

Energy capacity

Mean revenue per day

$0$50k$100k$150k$200k1452905808701160

Energy capacity (MWh); filled dot: the brief's design

Round-trip efficiency

Mean revenue per day

$0$50k$100k$150k$200k60%70%81%89%95%100%

Round-trip efficiency; filled dot: the brief's design

Degradation cost

Mean revenue per day

$0$50k$100k$150k$0$10$20$30$50

Degradation cost ($/MWh); filled dot: the brief's design

Every designFull table: 27 designs × 42 daysshow table
Mean daily revenue and change from the brief's design for every design
DesignMean per dayChange vs briefCycles / day
Power 75 MW$56,070$49k to $63k−60.2%−63.4% to −56.9%1.20
Power 150 MW$97,129$85k to $111k−31.1%−34.6% to −28.0%2.01
Power 270 MW$134,043$115k to $158k−4.9%−5.8% to −4.2%2.77
Power 300 MWbrief$140,979$121k to $168k–2.93
Power 330 MW$147,302$126k to $177k+4.5%+3.7% to +5.4%3.11
Power 450 MW$168,542$141k to $208k+19.6%+15.8% to +24.1%3.74
Power 600 MW$190,160$155k to $242k+34.9%+27.4% to +44.0%4.52
Energy capacity 145 MWh$61,838$48k to $83k−56.1%−61.0% to −50.3%7.08
Energy capacity 290 MWh$95,080$78k to $121k−32.6%−36.3% to −28.0%4.52
Energy capacity 522 MWh$133,169$113k to $160k−5.5%−6.3% to −4.6%3.12
Energy capacity 580 MWhbrief$140,979$121k to $168k–2.93
Energy capacity 638 MWh$148,171$127k to $175k+5.1%+4.2% to +5.8%2.78
Energy capacity 870 MWh$172,630$150k to $200k+22.5%+18.5% to +25.7%2.37
Energy capacity 1,160 MWh$194,259$171k to $221k+37.8%+30.8% to +43.9%2.01
Round-trip efficiency 60%$107,445$95k to $121k−23.8%−31.0% to −15.5%2.28
Round-trip efficiency 70%$122,871$108k to $141k−12.8%−16.9% to −8.3%2.51
Round-trip efficiency 72.9%$127,458$111k to $148k−9.6%−12.7% to −6.2%2.60
Round-trip efficiency 81%brief$140,979$121k to $168k–2.93
Round-trip efficiency 89.1%$155,337$131k to $190k+10.2%+6.5% to +13.4%3.29
Round-trip efficiency 95%$166,710$139k to $207k+18.3%+11.7% to +24.0%3.64
Round-trip efficiency 100%$177,307$145k to $223k+25.8%+16.4% to +34.1%4.13
Degradation cost $0/MWhbrief$140,979$121k to $168k–2.93
Degradation cost $5/MWh$133,744$114k to $160k−5.1%−5.9% to −4.3%2.63
Degradation cost $10/MWh$127,127$107k to $154k−9.8%−11.3% to −8.3%2.41
Degradation cost $20/MWh$115,560$96k to $142k−18.0%−20.4% to −15.4%2.09
Degradation cost $30/MWh$105,109$86k to $131k−25.4%−28.6% to −21.9%1.92
Degradation cost $50/MWh$86,417$68k to $111k−38.7%−43.4% to −33.5%1.68

Daily reset, so these differ slightly from the six-week joint optimisation on Sizing, which lets energy carry over midnight. Round-trip efficiency is split evenly between charging and discharging. On 1 of 42 days the battery 10% more efficient earned less than the brief's: at negative prices the battery is paid to take energy, and conversion losses let a less efficient battery take more of it.

02 · Regret

What does not seeing the future cost?

Each day, regret is what perfect foresight earned minus what a policy that sees only past prices earned. The policies were tuned on 2018–2020, so all three samples are out of sample. The two persistence policies are the forecast-based ones: they plan with the optimiser on the forecast “today repeats yesterday”.

Time-of-day schedule captured 63.3% of the perfect-foresight revenue (95% CI 52.7% to 73.0%). Re-planning every half-hour on the persistence forecast was not clearly different from planning once at midnight: $7,212 a day (95% CI −$4,517 to $20,118).

Per strategy

Revenue, regret and share captured

Daily-reset revenue, regret against perfect foresight, share captured, days losing money and days ending with energy still stored, with 95% intervals, over 42 days
StrategyTotalPer dayRegret per dayShare capturedDays losing moneyHolding energy at midnight
Perfect foresightforesight$5.92M$140,979$121k to $168k–100%0 of 420% to 8%2 of 42mean 20 MWh
Rolling persistence (MPC)forecast$2.56M$61,064$52k to $71k$79,915$56k to $111k43.3%33.1% to 54.7%2 of 421% to 16%3 of 42mean 27 MWh
Day-ahead persistenceforecast$2.26M$53,852$34k to $72k$87,127$56k to $123k38.2%23.0% to 55.3%3 of 422% to 19%2 of 42mean 20 MWh
Fixed price thresholdsrule$1.17M$27,886$18k to $38k$113,093$97k to $141k19.8%12.9% to 26.9%10 of 4213% to 39%34 of 42mean 407 MWh
Time-of-day schedulerule$3.75M$89,255$72k to $107k$51,724$35k to $71k63.3%52.7% to 73.0%1 of 420% to 12%0 of 42mean 0 MWh

Share captured is total policy revenue ÷ total perfect-foresight revenue, resampled by day. Regret per day is never negative under daily reset. Days losing money carry Wilson intervals. Holding energy at midnight: days ending with more than 1 MWh stored, energy bought and never sold, which daily reset values at nothing.

Share captured

Out of the perfect-foresight revenue

Share of perfect-foresight revenue captured by each no-foresight policy, with 95% intervals
  • Rolling43% [33%, 55%]
  • Day-ahead38% [23%, 55%]
  • Thresholds20% [13%, 27%]
  • Time of day63% [53%, 73%]

Dots are estimates, bars 95% intervals. 100% would match perfect foresight.

Paired by day

Three questions

  • Does a fixed daily schedule beat re-planning on yesterday's prices?

    Time of day minus Rolling: $28,191 a day (95% CI $13,441 to $46,854). Time of day earned more on 31 of 42 days (74%, 95% CI 59% to 85%).

    Time of day higherd_z 0.41r_rb 0.58Wilcoxon p (Holm) 0.002

  • Does re-planning every half hour beat planning once at midnight?

    Rolling minus Day-ahead: $7,212 a day (95% CI −$4,517 to $20,118). Rolling earned more on 21 of 42 days (50%, 95% CI 36% to 64%).

    no clear differenced_z 0.17r_rb 0.14Wilcoxon p (Holm) 0.43

  • Is trading on the clock better than trading on price levels?

    Time of day minus Thresholds: $61,369 a day (95% CI $38,368 to $83,446). Time of day earned more on 38 of 42 days (90%, 95% CI 78% to 96%).

    Time of day higherd_z 0.89r_rb 0.90Wilcoxon p (Holm) < 0.001

d_z is the mean daily difference divided by its standard deviation; r_rb is the matched-pairs rank-biserial correlation (−1 to 1). Questions: 3, Holm-adjusted together.

Horizon check

Planning to midnight, or past it

Under daily reset, energy still stored at midnight earns nothing, so the rolling policy above plans only to midnight. The original rolling policy (Benchmark, Dispatch Lab) plans 24 hours ahead from every half-hour, so from the afternoon on it buys energy to sell tomorrow morning, which this protocol never pays for. Same days, both versions:

Rolling persistence planning to midnight against the original 24-hour plan, over 42 days
Rolling plansShare capturedDays losing moneyHolding energy at midnight
To midnightevaluated above43.3%33.1% to 54.7%2 of 423 of 42mean 27 MWh
24 hours aheadoriginal policy35.3%20.9% to 50.4%4 of 4221 of 42mean 176 MWh

Planning to midnight earned $11,348 a day more (95% CI $4,625 to $20,853). The questions that involve rolling persistence, both ways:

  • Time of day minus Rolling a day: $28,191 (95% CI $13,441 to $46,854) planning to midnight; $39,539 (95% CI $22,197 to $64,514) with the 24-hour plan.
  • Rolling minus Day-ahead a day: $7,212 (95% CI −$4,517 to $20,118) planning to midnight; −$4,136 (95% CI −$15,813 to $8,150) with the 24-hour plan.

Forecast error

Does a worse forecast cost more?

Regret on the day ($, symmetric-log scale)

$0$10k$100k$0$10$30$100
Persistence forecast error: mean |today − yesterday| per half-hour ($/MWh)
Spearman correlation between forecast error and regret, with 95% intervals
PolicySpearman ρ
Rollingplans on the forecast0.730.56 to 0.83
Day-aheadplans on the forecast0.740.40 to 0.83
Thresholdsignores it0.20−0.18 to 0.55
Time of dayignores it0.550.20 to 0.71

Volatile days are both hard to forecast and lucrative to trade, so regret can rise with forecast error even for a policy that never looks at the forecast. The rule-based policies are the control: the correlation for rolling persistence minus the one for time of day is 0.18 (95% CI 0.02 to 0.45), so forecast error hurts the policy that plans on the forecast more. Median forecast error: $42/MWh.

Reconciliation

Daily reset against the original six-week benchmark

Test-window totals under daily reset and with charge carried between days
StrategyDaily reset Carried
Perfect foresight$5,921,103$5,926,534
Rolling persistence (MPC)$2,564,692$2,443,858
Day-ahead persistence$2,261,777$2,254,116
Fixed price thresholds$1,171,197$1,594,771
Time-of-day schedule$3,748,713$3,748,713

The benchmark lets each strategy carry stored energy past midnight, which helps the threshold rule most. The time-of-day plan ends every day empty, so its total is the same under both protocols. Rolling persistence plans only to midnight here and 24 hours ahead on the Benchmark. Perfect foresight's carried figure is the joint six-week optimum.

03 · AI explanations

Does the optional AI get the facts right?

The Dispatch Lab's “Explain this schedule” is tested on its own page: 24 fixed schedules, the Lab's prompt, six automatic checks against the optimiser's numbers (tested first on planted faults), Wilson intervals, and paired comparisons between runs decided by an exact test. It runs with your own key; this site publishes no AI results of its own.

Evaluate the explanations

04 · Reading these numbers

What the intervals do and do not cover

  • They describe sampling variability across days: how much the result could move with a different run of similar days. They do not cover the model being wrong (a price taker with perfect availability and no FCAS income, see limitations).
  • Neighbouring days are not independent (heat waves, outages and windless weeks last several days). Resampling whole weeks keeps that structure; an ordinary bootstrap would give intervals that are too narrow. The Wilson intervals on shares of days and the Wilcoxon p-values do treat days as independent, so they are optimistic: the block-bootstrap intervals are the primary evidence.
  • Each sample is one stretch of history. The 2021 test window is only six winter weeks, and 2025 is a different market, with negative midday prices most spring days.
  • The three paired comparisons in each sample are adjusted together (Holm); the comparisons are not adjusted across samples or across the many other numbers on this page. Read the p-values as a guide alongside the effect sizes and intervals, not as verdicts.
  • The daily-reset protocol starts every day empty and values energy left at midnight at nothing, so it does not credit a policy for carrying cheap energy into the next morning. Every policy that plans ahead therefore plans only to midnight here (see the horizon check under Regret), and the threshold rule, which plans nothing, still ends many days holding energy. The six-week totals on Benchmark carry charge over and remain the brief's official comparison.