boncourant

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.