Skip to content
Battery Arbitrage Lab (home)

Bonus task · test window 1 Jul 2021 – 11 Aug 2021

Six weeks, six strategies

The brief scored algorithms on a six-week test window in winter 2021. Here the battery starts empty on 1 July and carries its charge from day to day. Perfect foresight sets the ceiling; the four practical strategies only ever see past and current prices.

Results

Revenue over the test window

Test-window revenue for each strategy
StrategyTest revenueShare of perfect
Perfect foresightforesight$5,926,534
100%
Perfect foresight, daily resetforesight$5,921,103
100%
Rolling persistence (MPC)no foresight$2,443,858
41%
Day-ahead persistenceno foresight$2,254,116
38%
Fixed price thresholdsno foresight$1,594,771
27%
Time-of-day scheduleno foresightbest practical$3,748,713
63%

Revenue is before fixed O&M ($279,616 over 42 days). Cycles count full 580 MWh discharges. The perfect-foresight daily-reset row restarts empty every midnight, as the Dispatch Lab does.

Cumulative revenue

Where the gap opens up

$0$1M$2M$3M$4M$5M$6M1 Jul8 Jul15 Jul22 Jul29 Jul5 Aug11 Aug
Perfect foresightPerfect foresight, daily resetRolling persistence (MPC)Day-ahead persistenceFixed price thresholdsTime-of-day schedule

The perfect battery out-earns every practical strategy on 41 of the 42 days, and pulls ahead fastest on spiky evenings it saw coming: its five best days alone earn 25% of its total. Day-ahead persistence trades about as much as perfect foresight (122.7 against 123.9 cycles) but at the wrong times, because yesterday's timing is often off: it buys at $55.30 on average against $30.22, and sells at $103.78 against $129.76. It ends only 2 of 42 days holding energy. Rolling persistence trades less (73.5 cycles) and ends 21 of 42 days still holding energy, which it carries into the next morning. The time-of-day schedule simply trades the usual morning and evening peaks every day, which proves the most robust of the four.

Is the gap real or a few lucky days? Day by day, with 95% intervals and paired tests, on this window, the cross-validation half-year and 2025: regret with uncertainty.

Inspect a day

Any day of the window, any strategy

Strategy

Day · shade = perfect revenue

Rolling persistence (MPC)

Tue 6 Jul 2021

-$15,886 vs perfect $569,627 · -3%

Rolling persistence (MPC) on Tue 6 Jul 2021: 48 half-hour periods. Prices $101.24 to $2,618.09 per MWh. Charging in 9 periods, discharging in 6. Revenue -$15,886.0301003001k$/MWh · log scaleMW-3000+300MWh580000:0003:0006:0009:0012:0015:0018:0021:0024:00
Spot priceCharging (buy)Discharging (sell)Stored energy

Continuous run: the battery carries its charge overnight, so a day can start part-full. Re-solve this day in the Lab (each Lab day starts empty).

Calibrated on 2018–2020

Fixed price thresholds

A grid search over training-period price quantiles picked the levels that earned the most on 2018–2020:

Charge at or below
$88.81
68th percentile
Discharge at or above
$116.33
88th percentile

The rule fills up at the first price under the line rather than the cheapest one, then sits full on days that never cross the sell line: 38 full cycles in six weeks against the perfect battery's 124.

Calibrated on 2018–2020

Time-of-day schedule

The optimiser applied to the average 2018–2020 day gives one fixed schedule, replayed every day:

00:0006:0012:0018:0024:00

Two cycles a day: fill overnight, sell the morning peak, refill in the solar trough, sell the evening peak. Crude, but the shape of a winter day barely changes. How each policy works.