Evaluación diaria del benchmark · 2 septiembre 2026

OLEA MARKETS El benchmark global del precio del aceite de oliva

Versión vigente: v1.4.0

Olea Price — Metodología v1.4.0

Publicada: 2026-08-18. Vigente. Changelog al final.

El Olea Price es un índice compuesto diario del precio en origen del aceite de oliva europeo, calculado exclusivamente a partir de fuentes oficiales y semi-oficiales identificadas públicamente. Esta página es la especificación normativa: el código de IndexCalculator implementa exactamente estas fórmulas, y cada valor publicado almacena sus insumos exactos (ids de observaciones y pesos aplicados) junto con la versión de metodología, de modo que cualquier valor histórico es reproducible bit a bit.

Índices publicados

Código Calidad Ámbito
OLEA-EVOO-ES Virgen extra España
OLEA-VIRGIN-ES Virgen España
OLEA-LAMP-ES Lampante España
OLEA-EVOO-IT Virgen extra Italia
OLEA-EVOO-EU Virgen extra Compuesto UE (ES, IT, EL, PT)

Unidad: EUR/kg, 3 decimales. Publicación: diaria (también cuando las fuentes subyacentes son semanales).

Ventana y elegibilidad

Para el índice del día D se consideran todas las observaciones de precio no cuarentenadas con observed_date en la ventana [D−13, D] (14 días naturales) para la combinación (calidad, país). Las observaciones en cuarentena (fuera de rango plausible [0.5, 20] €/kg, fecha futura, o desviación > 4σ y > 12% frente a la media de 90 días de su serie fuente) nunca entran al cálculo sin revisión humana.

Corroboración cruzada (desde v1.1.0)

Un movimiento real de mercado es indistinguible de un error si solo se lo compara contra la media histórica de su propia serie. Y como las observaciones cuarentenadas no entran a esa media, un precio nuevo rechazado deja la media anclada en el nivel viejo, que vuelve a rechazar el siguiente precio real: un trinquete que congela el índice fuera del mercado.

Por eso, una observación que dispara la prueba sigma se publica igual si otra fuente distinta cotiza la misma calidad y región a un precio comparable:

misma (calidad, región) · otra fuente · |Δ fecha| ≤ 10 días · |Δ precio| ≤ 5%

Un movimiento genuino queda corroborado por fuentes independientes; un error de parseo o de unidad, no. Los errores de rango y de fecha futura siguen siendo cuarentena incondicional.

Ponderación por observación

w = w_recencia × w_tier × w_volumen

w_recencia = exp(−0.15 × días_antigüedad)      # días entre observed_date y D
w_tier     = official: 1.0 | semi_official: 0.8 | cooperative: 0.7 | press: 0.5
w_volumen  = 1 + log10(1 + volumen_toneladas)  # 1.0 si la fuente no reporta volumen

Valor del índice = media ponderada de price_eur_kg, redondeada a 3 decimales.

Filtro de cola alta (desde v1.2.0, umbral revisado en v1.3.0)

ISMEA cotiza extravergine de plazas boutique (Abruzzo, Sicilia interior) al doble del nivel commodity de Puglia y no reporta volumen, así que un w_volumen = 1 deja que esas plazas dominen el print italiano. Con 3 o más observaciones en la ventana se descartan las cotizaciones cuyo precio supera P25 × 1,25 (solo cola alta: la prima de origen siempre encarece, nunca abarata). Si el filtro vaciara el cesto, se ignora. El umbral es 3 y no 4 porque el sesgo boutique es máximo, no mínimo, cuando el cesto es fino: con 4 el filtro se apagaba justo en el caso que debía corregir. Las observaciones excluidas se guardan en inputs.excluded_outliers para auditoría. /v1/regional sigue mostrando todas las plazas.

Índice compuesto UE (OLEA-EVOO-EU)

Media de los valores nacionales EVOO (calculados con la fórmula anterior) ponderada por la cuota de producción de la última campaña:

ES 0.62 · IT 0.15 · EL 0.13 · PT 0.10

(Valores iniciales según cuotas de producción de campaña; se verificarán contra datos COI en cada revisión de metodología.) Si un país no tiene datos en la ventana —o desde v1.4.0 su canasta queda por debajo del piso de 3 observaciones— sale del cálculo y los pesos restantes se renormalizan; la cobertura perdida penaliza la confianza (ver abajo).

Confianza (0–1)

Cada valor publica una medida explícita de confianza:

confidence = C_fuentes × C_frescura × C_dispersión      (× 0.5 si degradado)

C_fuentes    = min(1, nº_fuentes_distintas / 3)
C_frescura   = exp(−0.10 × antigüedad_media_ponderada_en_días)
C_dispersión = 1 / (1 + 2 × CV),  CV = desviación_típica_ponderada / media

Degradación: con menos de 2 fuentes el valor se publica igualmente pero la confianza se multiplica por 0.5. Desde v1.4.0 una canasta con menos de 3 observaciones ya no se publica como print fresco: se arrastra (ver «Canasta insuficiente»). Si la confianza resultante queda por debajo de 0,30, el print se marca degraded en la API y en la UI (no es un print commodity de alta convicción). stale sigue reservado al arrastre por ventana vacía.

Para el compuesto UE: confidence = (Σ conf_país × peso_país / Σ pesos) × cobertura, donde cobertura = Σ pesos_disponibles / Σ pesos_totales.

Continuidad de la serie (stale)

Si la ventana de 14 días queda vacía, el índice repite el último valor publicado marcado stale=true, con confianza decaída (confidence_anterior × 0.8). La serie diaria nunca tiene huecos; los consumidores deben tratar stale=true como "sin información nueva". Si no hay ningún valor previo que arrastrar, la serie todavía no ha empezado en esa fecha y no se publica nada: un cero no es una observación de mercado.

Canasta insuficiente (desde v1.4.0)

Una canasta demasiado fina se trata igual que una vacía. Si tras aplicar el filtro de cola alta quedan menos de 3 observaciones, el índice no publica un print fresco: arrastra el último valor con stale=true y confianza decaída, exactamente como con ventana vacía.

Una sola cotización no tiene dispersión ni corroboración posible, así que su confianza no es medible: no es un benchmark, es un precio. El 18 de agosto de 2026 el índice italiano publicó 11,500 €/kg — la única cotización que quedaba en ventana, una plaza boutique — porque la Borsa Merci di Bari suspende durante el parón de agosto y sus precios commodity habían envejecido fuera de los 14 días. Una agencia de reporte de precios que no puede observar el mercado repite su última evaluación y lo señala; no la inventa con lo que quede en pantalla.

Reproducibilidad y auditoría

Cada fila de index_values almacena:

  • inputs: ids de observaciones con su precio y peso aplicado (o valores nacionales y pesos, para el compuesto),
  • methodology_version: la versión semver de este documento,
  • confidence, observations_count, sources_count, stale.

El endpoint interno de auditoría reconstruye cualquier valor desde sus inputs y verifica la coincidencia. Un cambio de fórmula, ventana, pesos o fuentes exige nueva versión de metodología; las series históricas de versiones anteriores no se reescriben.

Fuentes (v1)

Los índices se calculan exclusivamente sobre categorías de fuentes oficiales y semi-oficiales identificadas:

Categoría Tier Cadencia Cobertura
Ministerio de agricultura nacional (ES) official semanal precios medios nacionales por calidad
Observatorio de precios autonómico (ES) official semanal precios en origen por provincia
Datos de mercado de la UE official semanal ES/IT/EL/PT por calidad, histórico >20 años
Instituto de mercado nacional (IT) official semanal EVOO por plaza
Agencia de información alimentaria (ES) official mensual existencias/salidas/producción (no entra al índice de precios)

El registro operativo completo de fuentes (organismos, endpoints, pesos por tier) se documenta para suscriptores y auditores bajo solicitud: [email protected].

Changelog

  • 1.4.0 (2026-08-18) — Piso de canasta: con menos de 3 observaciones tras el filtro de cola alta, el índice arrastra el último valor como stale en vez de publicar un print fresco. Motivado por OLEA-EVOO-IT a 11,500 €/kg sobre una única cotización boutique (Chieti), con la Borsa Merci di Bari en parón de agosto y sus plazas commodity fuera de la ventana. Las series anteriores no se reescriben.

  • 1.3.0 (2026-08-17) — El tope de canasta al alza se aplica desde 3 observaciones (antes 4): con 4 se desactivaba justo cuando la canasta era fina, que es cuando dos o tres cotizaciones boutique constituyen todo el cálculo. El índice italiano llegó a 9,244 €/kg (+47,7% semanal) sobre Chieti 11,50, Trapani 7,50 y Palermo 7,45, mientras Bari y Taranto operaban entre 4,55 y 4,80 fuera de la ventana. Además, un arrastre sin valor previo ya no publica 0,000 €/kg: no se publica nada. Las series anteriores no se reescriben.

  • 1.2.0 (2026-08-14) — Filtro de cola alta en el cesto commodity: con ≥4 observaciones se excluyen cotizaciones por encima de P25 × 1,25 (plazas boutique ISMEA que, sin toneladas, sesgaban OLEA-EVOO-IT un 40%+ sobre el print nacional UE). Confianza < 0,30 se publica con flag degraded. Las series de 1.1.0 no se reescriben; el cálculo diario a partir de esta versión usa el cesto filtrado (Italia y el compuesto UE hay que recalcularlos).

  • 1.1.0 (2026-07-30) — Corroboración cruzada en la cuarentena: una observación que supera 4σ y 12% se publica si otra fuente independiente cotiza la misma calidad y región dentro de ±10 días y ±5%. Corrige un trinquete por el que un movimiento real de mercado quedaba cuarentenado de forma permanente (los valores rechazados no entran a la media que los juzga). Las series anteriores no se reescriben; las observaciones ya cuarentenadas se reevalúan con la regla nueva y se liberan las que la cumplen.

  • 1.0.0 (2026-07-14) — Versión inicial.