Backtest d'une offre indexée spot — « ce que vous auriez payé »
Pourquoi
Préparer une offre indexée spot ne nécessite pas le prix spot : le forward
CAL est l'espérance risque-neutre du spot moyen, donc on price l'offre sur cette
ancre + une bande de risque de volatilité (voir offer-pricing).
Le backtest répond à la question inverse : rejouée sur les **prix day-ahead
réels passés et la courbe de charge** réelle du client, combien l'offre
aurait-elle effectivement coûté ? C'est le seul calcul qui exige les données
ENTSO-E day-ahead réelles.
Calcul
Prix réalisé pondéré par l'énergie :
```
prix_réalisé (€/MWh) = Σ_t kWh(t) · prix(t) / Σ_t kWh(t)
```
Le prix par créneau dépend de l'archétype :
spot_indexe : prix(t) = spot_réel(t) + spread
spot_plus_future : prix(t) = part_spot · spot_réel(t) + (1 − part_spot) · (CAL_verrouillé + spread_hedge)
La série spot est horaire (ENTSO-E A44, €/MWh) ; la courbe est semi-horaire (kWh).
Chaque créneau est valorisé au prix spot de son heure (créneau >> 1).
Sorties
realized_energy_eur_mwh — prix réalisé pondéré
vs_forecast_eur_mwh — réalisé − prévisionnel (positif = plus cher que prévu)
monthly_eur_mwh — prix réalisé pondéré par mois (révèle les pics hivernaux)
Source des données
ENTSO-E day-ahead (zone FR 10YFR-RTE------C), via lib/ingestion/entsoe
(parseur A44). L'historique est alimenté par backfill.ts ; le jeton est vérifié
en production via /api/admin/entsoe/health. La préparation de l'offre n'en
dépend pas — seul le backtest le requiert.
Déterminisme
Fonction pure, rejouable depuis (method_id, method_version, input_hash) :
mêmes courbe + série réalisée + offre → sortie identique.