PTEN
Fuso:

Dados disponíveis desde 01/01/2018 — Valores nas horas locais de cada zona

Preços Médios de Eletricidade Day-Ahead

Preço médio diário por zona de licitação (€/MWh) — Mercado Day-Ahead

A carregar dados...

Valores nas horas locais de cada zona

Fonte: ENTSO-E Transparency Platform | tiagofelicia.pt

Preços por zona de licitação

A carregar dados...

Comparar com:
Máx. 4 comparações · Dica: clica numa zona no mapa para mudar

Curva intradiária

Evolução de preços

Heatmap horário

Perfil semanal (24h × dia da semana)

Heatmap anual de preços

Sobre este mapa

O que mostra este mapa?What does this map show?

Este mapa apresenta o preço médio diário de eletricidade (mercado day-ahead) para cada zona de licitação europeia, expresso em €/MWh.

As cores variam do roxo (preços negativos, evento raro de excesso de renovável) e azul (preços baixos), passando por amarelo e laranja, até ao vermelho escuro (preços mais altos). Esta paleta foi escolhida para boa acessibilidade a utilizadores daltónicos e para destacar visualmente eventos de preços negativos.

This map shows the daily average electricity price (day-ahead market) for each European bidding zone, expressed in €/MWh.

Colours range from purple (negative prices, a rare event of renewable oversupply) and blue (low prices), through yellow and orange, up to dark red (highest prices). This palette was chosen for good accessibility to colour-blind users and to visually highlight negative-price events.

Os valores são nas horas locais ou na hora de mercado?Are the values in local time or market time?

Pode escolher entre dois modos através do toggle Fuso no topo da página:

  • 🌍 Hora local (default): os preços médios diários são calculados na hora local de cada zona de licitação. Por exemplo, um dia em Portugal (UTC+0/+1) não corresponde exatamente ao mesmo período UTC que um dia na Finlândia (UTC+2/+3). Esta é a forma como os preços são publicados pelas bolsas locais e pelo ENTSO-E.
  • 🇪🇺 Hora de mercado (CET): todas as zonas são apresentadas alinhadas ao market day day-ahead europeu (CET 00:00 → 24:00). Isto permite comparar zonas no mesmo intervalo de mercado e elimina o aviso "(parcial até 23h)" para Portugal/Irlanda. Tecnicamente:
    • 39 zonas em fuso CET (ES, FR, DE-LU, IT, NL, SE, NO, PL, etc.) não mudam — já estão alinhadas.
    • PT e IE(SEM) (CET-1h) → recolhem a última hora do dia local anterior para completar o market day.
    • BG, EE, FI, GR, LT, LV, RO (CET+1h) → recolhem a primeira hora do dia local seguinte para completar o market day.

A escolha é guardada localmente (localStorage) e mantém-se entre visitas.

You can choose between two modes via the Time zone toggle at the top of the page:

  • 🌍 Local time (default): daily average prices are computed in each bidding zone's local time. For example, a day in Portugal (UTC+0/+1) does not match exactly the same UTC period as a day in Finland (UTC+2/+3). This is how prices are published by the local exchanges and by ENTSO-E.
  • 🇪🇺 Market time (CET): all zones are shown aligned to the European day-ahead market day (CET 00:00 → 24:00). This lets you compare zones over the same market interval and removes the "(partial until 23:00)" note for Portugal/Ireland. Technically:
    • 39 zones in the CET time zone (ES, FR, DE-LU, IT, NL, SE, NO, PL, etc.) do not change — they are already aligned.
    • PT and IE(SEM) (CET-1h) → pull the last hour of the previous local day to complete the market day.
    • BG, EE, FI, GR, LT, LV, RO (CET+1h) → pull the first hour of the next local day to complete the market day.

The choice is stored locally (localStorage) and persists across visits.

Porque é que o último dia pode ter valores provisórios?Why can the last day have provisional values?

O OMIE negoceia em Hora Central Europeia (CET), que é a hora de Espanha.

Como Portugal está uma hora "atrás" de Espanha (hora local PT = hora CET - 1), quando olhamos para os resultados do mercado diário (Day-Ahead) que são divulgados para o dia seguinte, o intervalo correspondente a 23:00 - 24:00 (hora de Portugal) é conhecido apenas no dia seguinte.

Quando tal acontece, é apresentado o aviso "até às 23h de PT" no título.

OMIE trades in Central European Time (CET), which is Spain's time.

Because Portugal is one hour "behind" Spain (PT local time = CET - 1), when we look at the day-ahead market results published for the next day, the interval corresponding to 23:00 - 24:00 (Portugal time) is only known the following day.

When this happens, the note "until 23:00 PT" is shown in the title.

O que são zonas de licitação?What are bidding zones?

A Europa está dividida em zonas de licitação (bidding zones) para o mercado de eletricidade. A maioria dos países tem uma única zona, mas alguns estão divididos em várias:

  • Noruega: 5 zonas (NO1-NO5)
  • Suécia: 4 zonas (SE1-SE4)
  • Itália: 6 zonas (Norte, Centro-Norte, Centro-Sul, Sul, Sicília, Sardenha)
  • Dinamarca: 2 zonas (DK1 Oeste, DK2 Este)

Europe is divided into bidding zones for the electricity market. Most countries have a single zone, but some are split into several:

  • Norway: 5 zones (NO1-NO5)
  • Sweden: 4 zones (SE1-SE4)
  • Italy: 6 zones (North, Centre-North, Centre-South, South, Sicily, Sardinia)
  • Denmark: 2 zones (DK1 West, DK2 East)
Visualizações disponíveisAvailable visualizations
  • Mapa coroplético europeu: 47 zonas de licitação coloridas pelo preço médio. Etiquetas numéricas sobre cada zona (asterisco se dados parciais).
  • Tabela ordenável: clica nos cabeçalhos para ordenar por preço, mín, máx, amplitude, ΔPT, variação vs ontem. Mostra hora local do mín/máx por zona.
  • Curva intradiária: gráfico de barras com a curva 24h da zona selecionada. Cores na mesma escala do mapa. Resolução adapta-se ao publicado pela bolsa (15 min, 30 min ou horário). Em modos agregados mostra a média horária do período. Linha vermelha tracejada em y=0 quando há valores negativos.
  • Curva intradiária por linha da tabela: clica no nome de uma zona (ou no chevron ) para abrir/fechar a curva 24h logo por baixo. Várias zonas em simultâneo para comparar.
  • Gráfico de evolução de preços: barras coloridas pela escala do mapa para a zona selecionada. Mín, máx e amplitude sempre visíveis no tooltip. Suporta até 4 comparações simultâneas (linhas sobrepostas com cores distintas). A legenda abaixo do gráfico permite ativar/ocultar séries adicionais (default ocultas):
    • MA7 — média móvel a 7 dias (ciclo semanal, requer ≥14 dias)
    • MA30 — média móvel a 30 dias (ciclo mensal, requer ≥30 dias)
    • Médias diárias (linha) — os mesmos valores das barras, em formato de linha grossa na cor da média do período (útil para sobrepor com comparações ou ver a tendência)
    • Médias diárias — ano anterior — linha tracejada roxa com os valores diários do mesmo período há um ano (alinhados dia-a-dia)
  • Heatmap horário (24h × ~30 dias): grelha de horas vs dias, em modo "mês deslizante" terminado no Dia final escolhido (entre 28 e 31 dias consoante o mês). Inclui coluna lateral com média por hora, linha inferior com média por dia e canto com média global. Em modo "↔ Largura total" mostra valores com 2 casas decimais.
  • Perfil semanal (24h × 7 dias da semana): agrega todos os dias do período (30/60/90/365 dias) por dia da semana. Permite identificar padrões recorrentes ("sextas à noite são consistentemente mais caras", "domingos têm vale mais profundo de manhã"). Inclui as mesmas médias laterais e global.
  • Heatmap anual: calendário 12 meses × 31 dias, células coloridas pelo preço — clica num dia para abrir esse dia no mapa.
  • Sparkline no mapa (info-control): ao passar o rato (desktop) ou tocar (mobile) numa zona, mini-curva intradiária com marcadores mín/máx e barras coloridas.
  • European choropleth map: 47 bidding zones coloured by the average price. Numeric labels over each zone (asterisk if data is partial).
  • Sortable table: click the headers to sort by price, min, max, range, ΔPT, change vs yesterday. Shows the local time of the min/max per zone.
  • Intraday curve: bar chart with the 24h curve of the selected zone. Colours on the same scale as the map. Resolution adapts to what the exchange publishes (15 min, 30 min or hourly). In aggregated modes it shows the period's hourly average. Dashed red line at y=0 when there are negative values.
  • Intraday curve per table row: click a zone's name (or the chevron ) to open/close the 24h curve right below it. Several zones at once for comparison.
  • Price evolution chart: bars coloured by the map scale for the selected zone. Min, max and range always visible in the tooltip. Supports up to 4 simultaneous comparisons (overlaid lines in distinct colours). The legend below the chart lets you toggle extra series (hidden by default):
    • MA7 — 7-day moving average (weekly cycle, requires ≥14 days)
    • MA30 — 30-day moving average (monthly cycle, requires ≥30 days)
    • Daily averages (line) — the same values as the bars, as a thick line in the period-average colour (useful to overlay with comparisons or see the trend)
    • Daily averages — previous year — purple dashed line with the daily values of the same period a year ago (aligned day by day)
  • Hourly heatmap (24h × ~30 days): grid of hours vs days, in "rolling month" mode ending on the chosen End day (between 28 and 31 days depending on the month). Includes a side column with the average per hour, a bottom row with the average per day and a corner with the overall average. In "↔ Full width" mode it shows values with 2 decimals.
  • Weekly profile (24h × 7 weekdays): aggregates every day in the period (30/60/90/365 days) by weekday. Helps identify recurring patterns ("Friday evenings are consistently more expensive", "Sundays have a deeper morning trough"). Includes the same side and overall averages.
  • Annual heatmap: a 12-month × 31-day calendar, cells coloured by price — click a day to open it on the map.
  • Map sparkline (info-control): hovering (desktop) or tapping (mobile) a zone shows a mini intraday curve with min/max markers and coloured bars.
Interatividade e navegaçãoInteractivity and navigation
  • Modos temporais: Diário (um dia), Semanal (7 dias), Mensal (mês deslizante terminado no dia selecionado — 28 a 31 dias conforme o mês) e Personalizado (intervalo à escolha). Médias agregadas no mapa, tabela, gráfico e curva intradiária.
  • Selector único de zona: um só dropdown "Zona" controla simultaneamente Evolução, Curva intradiária, Heatmap horário e Heatmap anual. Clicar numa zona do mapa atualiza tudo.
  • Comparação multi-zona: chips com até 4 zonas adicionais comparadas no gráfico de evolução e na curva intradiária — cada uma com cor própria e linha distinta sobre as barras da zona principal. Cada chip mostra também o desfasamento de fuso horário face à zona principal (ex: +1h para ES quando a principal é PT). Os valores são apresentados em hora local de cada zona.
  • Pesquisa de zona: campo "🔍 Procurar zona" filtra a tabela, destaca a zona no mapa e faz auto-zoom se for um único resultado. Procura por código, nome PT, e ignora acentos.
  • Toque no mapa (mobile): tap único mostra o info-control (com curva intradiária); segundo tap na mesma zona seleciona-a em todas as visualizações. Toque no fundo do mapa fecha o info-control.
  • Validação do intervalo personalizado: datas inválidas (início > fim, fora do intervalo de dados, >366 dias) ficam com borda vermelha e mensagem inline; o botão "Aplicar" desativa-se até o erro ser resolvido.
  • ΔPT (diferença vs Portugal): opcional na tabela, em €/MWh e %. Útil para avaliar custo de importar/exportar.
  • Variação vs ontem: opcional na tabela em modo Diário, mostra como cada zona evoluiu face ao dia anterior.
  • Indicador de dados parciais: zonas cujos últimos slots não foram ainda publicados (ex: PT antes do leilão CET de amanhã) ficam com asterisco no mapa e badge "parcial" na tabela/tooltip. Média/mín/máx usam só os slots conhecidos.
  • Resumo dinâmico: texto contextual com a data (Hoje/Ontem/Amanhã/data), com zona mais barata e mais cara em destaque, e variação vs PT.
  • Time modes: Daily (one day), Weekly (7 days), Monthly (rolling month ending on the selected day — 28 to 31 days depending on the month) and Custom (range of your choice). Aggregated averages on the map, table, chart and intraday curve.
  • Single zone selector: a single "Zone" dropdown simultaneously controls Evolution, Intraday curve, Hourly heatmap and Annual heatmap. Clicking a zone on the map updates everything.
  • Multi-zone comparison: chips with up to 4 additional zones compared on the evolution chart and the intraday curve — each with its own colour and a distinct line over the main zone's bars. Each chip also shows the time-zone offset relative to the main zone (e.g. +1h for ES when the main one is PT). Values are shown in each zone's local time.
  • Zone search: the "🔍 Search zone" field filters the table, highlights the zone on the map and auto-zooms if there is a single result. Searches by code and name (PT and EN), ignoring accents.
  • Map tap (mobile): a single tap shows the info-control (with the intraday curve); a second tap on the same zone selects it across all visualizations. Tapping the map background closes the info-control.
  • Custom range validation: invalid dates (start > end, outside the data range, >366 days) get a red border and an inline message; the "Apply" button is disabled until the error is resolved.
  • ΔPT (difference vs Portugal): optional in the table, in €/MWh and %. Useful to assess the cost of importing/exporting.
  • Change vs yesterday: optional in the table in Daily mode, shows how each zone moved compared with the previous day.
  • Partial-data indicator: zones whose last slots have not been published yet (e.g. PT before tomorrow's CET auction) get an asterisk on the map and a "partial" badge in the table/tooltip. Average/min/max use only the known slots.
  • Dynamic summary: contextual text with the date (Today/Yesterday/Tomorrow/date), highlighting the cheapest and most expensive zone, and the change vs PT.
Personalização e atalhosCustomization and shortcuts
  • Zonas favoritas: clica na estrela ao lado do nome para adicionar uma zona aos favoritos. Aparecem num painel "⭐ Favoritas" no topo da tabela com o preço atual e cor da escala. Click num chip seleciona a zona em todas as visualizações; × remove. Em desktop, podes arrastar os chips (⋮⋮) para reordenar. Persistidas no browser.
  • Largura total (↔): botão no painel de zona faz com que as 4 visualizações (Curva intradiária, Evolução, Heatmap horário, Heatmap anual) ocupem toda a largura do ecrã. No heatmap horário, ativa formatação com 2 casas decimais nas células.
  • Modo escuro: respeita a preferência do site (toggle no menu).
  • Ecrã inteiro do mapa: botão no canto superior do mapa para visualização imersiva.
  • Preferências persistidas: escolhas de zona, comparações, favoritas, modo, toggles, largura total — tudo guardado em localStorage.
  • Atalhos de teclado:
    • — dia anterior / seguinte
    • T — saltar para a data mais recente disponível
    • / — focar campo de pesquisa de zona
    • Esc — limpar pesquisa de zona
  • Favorite zones: click the star next to a name to add a zone to favorites. They appear in a "⭐ Favorites" panel at the top of the table with the current price and scale colour. Clicking a chip selects the zone across all visualizations; × removes it. On desktop you can drag the chips (⋮⋮) to reorder. Persisted in the browser.
  • Full width (↔): a button in the zone panel makes the 4 visualizations (Intraday curve, Evolution, Hourly heatmap, Annual heatmap) span the full screen width. In the hourly heatmap it enables 2-decimal formatting in the cells.
  • Dark mode: follows the site preference (toggle in the menu).
  • Map fullscreen: a button in the top corner of the map for an immersive view.
  • Persisted preferences: zone choices, comparisons, favorites, mode, toggles, full width — all stored in localStorage.
  • Keyboard shortcuts:
    • — previous / next day
    • T — jump to the most recent available date
    • / — focus the zone search field
    • Esc — clear the zone search
Atualização e partilhaUpdates and sharing
  • Indicador de frescura: badge ao lado do subtítulo mostra quão recente é a última atualização do dataset (verde <26h, amarelo 26-48h, vermelho >48h). O tooltip mostra a hora exata em UTC.
  • Auto-refresh: ao voltar à tab depois de mais de 5 minutos sem foco, a página verifica silenciosamente se há dados mais recentes e refresca se necessário.
  • Link de partilha: botão "🔗 Copiar link de partilha" gera URL com a data, modo e zona ativa — partilha com 1 clique.
  • Instalável (PWA): a página pode ser instalada como aplicação no telemóvel (Adicionar ao ecrã principal) ou desktop (ícone na barra do browser). Funciona com cache offline para conteúdo estático e visitas recentes.
  • Freshness indicator: a badge next to the subtitle shows how recent the dataset's last update is (green <26h, yellow 26-48h, red >48h). The tooltip shows the exact time in UTC.
  • Auto-refresh: when you return to the tab after more than 5 minutes unfocused, the page silently checks for newer data and refreshes if needed.
  • Share link: the "🔗 Copy share link" button generates a URL with the active date, mode and zone — share it in 1 click.
  • Installable (PWA): the page can be installed as an app on mobile (Add to Home Screen) or desktop (icon in the browser bar). It works with an offline cache for static content and recent visits.
De onde vêm os dados?Where does the data come from?

Os dados são obtidos diretamente da ENTSO-E Transparency Platform — a fonte oficial dos operadores de redes elétricas europeus (TSOs). Os preços day-ahead provêm das bolsas de eletricidade europeias (EPEX SPOT, Nord Pool, GME, OMIE, etc.) e são disponibilizados na resolução publicada pela respetiva bolsa (15 minutos para a maioria das zonas, horário para algumas).

Os dados são atualizados diariamente de forma automática.

Fronteiras das zonas: Electricity Maps (MIT License)

The data is obtained directly from the ENTSO-E Transparency Platform — the official source of the European electricity transmission system operators (TSOs). Day-ahead prices come from the European power exchanges (EPEX SPOT, Nord Pool, GME, OMIE, etc.) and are provided at the resolution published by each exchange (15 minutes for most zones, hourly for some).

The data is updated automatically every day.

Zone borders: Electricity Maps (MIT License)

Porque é que alguns países não têm dados?Why do some countries have no data?

Zonas a cinzento indicam ausência de dados para o dia selecionado. Isto pode acontecer porque:

  • Os dados ainda não foram publicados
  • A zona não participou no mercado nesse dia
  • Houve uma falha temporária na recolha de dados

Zones in grey indicate no data for the selected day. This can happen because:

  • The data has not been published yet
  • The zone did not take part in the market that day
  • There was a temporary failure in data collection