Beta — Data under validation. Values may contain errors.

ED.OMIE.BIDS

Raw OMIE day-ahead bidding behavior by technology — offered + cleared volumes, prices, clearing rate, marginal. Companion to ED.CURTAIL.ECON, no curtailment claim.

Capture price

Signature

ED.OMIE.BIDS([tech], [start], [end], [agg], [zone], [headers])

Description

Returns raw OMIE day-ahead market behavior per (bucket, tech): how much volume was offered, how much cleared, weighted-average prices on both sides, clearing rate, and the slot marginal — without any 'curtailment' interpretation. Use it for asset-management research on bid strategy across the full tech spectrum (renewables + flexible thermal + interconnects), where the strict-curtailment claim of ED.CURTAIL.ECON doesn't apply.

**Why this exists**: ED.CURTAIL.ECON deliberately rejects flexible techs (thermal_gas/nuclear/hydro/coal/cogen/bombeo/bess) because their unmatched offered reflects strategic bidding (safety bids near the price-cap), not curtailment in the APPA sense. ED.OMIE.BIDS surfaces the raw numbers anyway, so users can analyse market behavior across all techs and judge for themselves.

**Tech enum (18 accepted values)**:

- *Renewables*: solar, wind, vre (= solar+wind+renewable_other+vre_unspecified), hydro, bombeo, bess, hybrid. - *Thermal*: nuclear, coal, thermal_gas, thermal_fueloil, thermal (alias for thermal_gas + thermal_fueloil), biomass, cogen. - *Other*: autoprod. - *Aggregator*: all (default) — every classified real tech, ex interconnects + non-generation labels. - *Special*: interconnect — INVERTED filter; returns only MIEU/MIP/MIE with the tech bucket as the literal string 'interconnect'.

Rejected with 400 (with explanatory hints): placeholder, unknown, representation, venta_generica, and any other unrecognised string. These are uof_tech_map.tech labels for UOFs awaiting classification, aggregator wholesalers, or generic clearing entries — not real generating techs.

**Expansion semantics**: vre/all/thermal cause the output to spill ONE row per sub-tech (solar, wind, renewable_other, vre_unspecified for vre; the underlying real-tech set for all; thermal_gas+thermal_fueloil for thermal). Single-tech values keep the literal you asked for as the row label.

**Marginal column**: marginal_eur_mwh_avg is the AVG over the bucket's slots of MAX(price WHERE side='V', status='C'), computed ex-interconnects. It is **slot-weighted** — one entry per slot (averaged over slots with eligible volume > 0), not row-weighted — so a slot with many bids counts once. For tech=interconnect the marginal column is informative — the slot's real clearing price, NOT an interconnection-specific price.

Parameters

NameTypeDefaultDescription
techstring"all"Tech filter. Default "all" (= every classified real tech). Accepted: "solar", "wind", "vre", "hydro", "bombeo", "bess", "hybrid", "nuclear", "coal", "thermal_gas", "thermal_fueloil", "thermal" (alias), "biomass", "cogen", "autoprod", "all", "interconnect" (special).
startdateYYYY-MM-DD. Omit for end − 1 year.
enddateYYYY-MM-DD. Omit for the first day after the last available month (OMIE publishes monthly with ~90-day lag).
agg1..761=hourly, 2=daily, 3=monthly, 4=quarterly, 5=semiannual, 6=annual (default), 7=total. String aliases H/D/M/Q/S/Y/T also accepted.
zone"es" | "pt" | "iberian""es"Geographic filter. espais IN ('ES','MI') (default), ptpais IN ('PT','MI'), iberianpais IN ('ES','PT','MI') (includes the MIBEL pais='MI' bucket).
headers0 | 10Set 1 for a header row.

Valid values for `tech`

CodeDescription
allDefault. Every classified real tech via uof_tech_map, excluding interconnects, placeholder, unknown, representation, venta_generica. Output spills one row per real tech per bucket.
solarSolar PV only. Filters uof_tech_map.tech = 'solar'.
windWind only. Filters uof_tech_map.tech = 'wind'.
vreCombined must-run renewables: solar, wind, renewable_other, vre_unspecified (Régimen Especial aggregator UOFs). Output spills one row per sub-tech.
hydroConventional hydro (run-of-river + reservoirs). Excludes pumped storage.
bombeoPumped storage (turbinación + bombeo).
bessBattery energy storage.
hybridHybrid plants (solar + storage, wind + storage, …).
nuclearNuclear baseload. Safety-bids ~35% of volume → clearing_rate typically < 100%.
coalCoal-fired thermal.
thermal_gasCCGT and other gas-fired thermal. Safety-bids ~48% of volume → clearing_rate well below 100% in typical hours.
thermal_fueloilFuel-oil thermal (mainland insular).
thermalAlias for thermal_gas + thermal_fueloil. Output spills both sub-techs.
biomassBiomass thermal.
cogenIndustrial cogeneration.
autoprodSelf-producer UOFs.
interconnect**Special case**: INVERTED filter. Returns only MIEU/MIP/MIE (interconnect UOFs); tech bucket = literal 'interconnect'. mwh_offered is typically 0 (interconnects appear only as status='C' in OMIE data), mwh_cleared reflects net imports. n_uofs ∈ {1,2,3}.

Returns

Spill matrix — 10 columns: [bucket, tech, mwh_offered, mwh_cleared, clearing_rate_pct, offered_price_avg_eur_mwh, cleared_price_avg_eur_mwh, marginal_eur_mwh_avg, n_slots, n_uofs]. One row per (bucket, tech) pair. For agg=7 (total) bucket is the literal string "TOTAL". For tech=interconnect the tech column is always the literal 'interconnect'.

Examples

=ED.OMIE.BIDS()Last 12 months raw bidding all techs ES, yearly (all defaults)
=ED.OMIE.BIDS("thermal_gas", "2024-10-01", "2025-01-01", 6, "es")Annual thermal_gas Q4-2024 ES (clearing_rate likely < 100% — safety bidding)
=ED.OMIE.BIDS("vre", "2024-01-01", "2024-12-31", 3, "iberian")Monthly VRE 2024 Iberian (4 sub-techs spilling separately)
=ED.OMIE.BIDS("interconnect", "2024-12-01", "2025-01-01")Annual interconnect 2024 — tech bucket = 'interconnect', n_uofs ∈ {1,2,3}
=ED.OMIE.BIDS("nuclear", "2024-01-01", "2024-12-31", 6, "es", 1)Annual nuclear 2024 ES with header row

Notes

  • **Raw vs strict curtailment**: this function makes NO curtailment claim. ED.CURTAIL.ECON is the strict definition (offered ≤ slot_marginal − cleared) restricted to renewables; ED.OMIE.BIDS returns the raw numbers across the full tech spectrum so the user can analyse without an econometric prior. Comparing mwh_offered − mwh_cleared here to curtailment-in-the-APPA-sense for flexible techs would be misleading (their unmatched offered is strategic bidding).
  • **Special case tech=interconnect**: filter is INVERTED — keeps only MIEU/MIP/MIE (the three OMIE interconnect aggregator codes). Tech bucket is the literal string 'interconnect'. mwh_offered is usually 0 (OMIE doesn't surface explicit status='O' rows for these UOFs); mwh_cleared reflects net imports. n_uofs ∈ {1,2,3}.
  • **Marginal column semantics**: marginal_eur_mwh_avg is the AVG over the bucket's slots of MAX(price WHERE side='V', status='C') computed ex-interconnects. For tech=interconnect this column shows the slot's REAL clearing price, not the import-specific price (informative — interconnects don't set the marginal).
  • **Publication lag**: OMIE publishes monthly bid-curve data with ~90-day confidentiality lag. Queries for too-recent dates return 404 with the last-available month in the body (last_available_mes).
  • **Expansion semantics**: vre/all/thermal cause the output to spill ONE row per sub-tech. Single-tech literals (e.g. solar, wind, nuclear) keep that literal as the row label.
  • **Bucket format**: YYYY-MM for monthly, YYYY-MM-DD for daily, YYYY-MM-DD HH:MM for hourly, YYYY-Qn for quarterly, YYYY-Hn for semiannual, YYYY for annual, literal 'TOTAL' for agg=7.
  • **Column semantics**: n_slots is the count of distinct hourly slots that had any offered or cleared volume for the (bucket, tech); n_uofs is the count of distinct UOFs that contributed (useful for sizing the tech pool).
  • **Rejected tech values**: placeholder, unknown, representation, venta_generica, or any other string → 400 with an explanatory message. These are uof_tech_map.tech labels for UOFs awaiting classification, aggregator wholesalers, or generic clearing entries — not real generating techs.

Related functions