PZU arbitrage
Chronological, SOC-aware dispatch over the day-ahead curve. We brute-force the optimal (charge_start, discharge_start) pair across all 24×24 candidates, respecting battery capacity and SOC bounds. AC round-trip losses are split symmetrically as √η on both charge and discharge legs.
profit = Σ (P_disch · √η · price_disch) − Σ (P_charge / √η · price_charge)
optimal = argmax over (h_charge, h_discharge) ∈ {0..23}²