Serbia Electricity Market Intelligence
Prices, renewable capture, cross-border signals, project economics and CEA market intelligence in one workspace.
Data sources & status policy
- SEEPEX / ENTSO-E day-ahead data are the observed market-price inputs for Serbia. Regional ENTSO-E A44 series retain their published market time unit, including 15-minute intervals where applicable.
- ENTSO-E Transparency Platform also supplies actual generation by production type (A75), actual load, physical cross-border flows, outages and explicit allocation results.
- PVGIS (JRC, European Commission) is used for calculator PV profiles. Where Serbia B16 solar generation is unavailable for capture analytics, a clear-sky solar weighting proxy is used and explicitly labelled modelled.
- AERS, EMS, Ministry of Mining and Energy and Energy Community provide regulatory and policy context where stated.
- Statuses distinguish observed live data, cached observed data, partial coverage, modelled/estimated values and unavailable data. Synthetic/demo values must never silently replace an observed market KPI.
Market formulas
baseload = Σ price_interval × duration / Σ durationCalculated only from complete Europe/Belgrade delivery days. A complete hourly delivery day contains every expected interval: 23, 24 or 25 hours depending on DST.
peakload = mean(price[Mon–Fri & 08:00–20:00 Europe/Belgrade])Uses the same complete-day sample as baseload.
negative_intervals = count(observed_price < 0)Missing observations are not converted to zero.
spread_h = regional_price_h − Serbia_price_hMixed 15/60-minute markets are aligned to a common hourly comparison level using duration-weighted prices before spreads are calculated.
capture_solar = Σ(price_h × solar_h) / Σ(solar_h)Only matched price/generation timestamps enter observed-generation capture calculations. Missing ENTSO-E generation is not forward-filled.
capture_wind = Σ(price_h × wind_h) / Σ(wind_h)Onshore and offshore series are explicitly aggregated where both are published. Missing wind observations remain missing rather than 0 MW.
capture_rate = capture_price / baseloadBelow 100% indicates that the technology earns below the reference baseload price over the comparable sample.
merchant_revenue = Σ(generation_h × price_h)Coverage rules
- Complete means the selected range is covered without internal missing or incomplete days and without failed/capped source fetches.
- Partial is shown whenever range bounds are incomplete, an internal day is missing/incomplete, a source fetch failed or the fetch cap was reached.
- Cached data are labelled separately as cached-complete or cached-partial. An unavailable source is not represented as numeric zero.
- Physical-flow net positions require both directions for the same timestamp. If either direction is missing, net flow for that timestamp is unavailable rather than assumed 0 MW.
Project Economics methodology
expected_price_h = historical_shape_h + target_month − historical_month_averageMonth contracts take priority, then quarter, then calendar year. Later-year annual values are weighted by Europe/Belgrade delivery hours, including leap years and DST. Missing settlements are never fabricated.
revenue_h = PPA_settlement_h + merchant_settlement_hAnnual and monthly revenue use the same hourly settlement engine. Fixed/pay-as-produced, partial PPA and baseload PPA therefore reconcile exactly between monthly and annual views.
SOC_h = SOC_(h−1) + charge_h × η_charge − discharge_h / η_dischargeThe deterministic arbitrage heuristic enforces power, energy, SOC, availability, grid and local-day cycle limits. A cycle is dispatched only when the spread remains economic after round-trip losses and variable throughput cost. Local days may contain 23, 24 or 25 hours.
LCOS = discounted(CAPEX + OPEX + charging_cost + augmentation) / discounted_discharged_MWhLifetime discounted costs and discharged energy include degradation and augmentation assumptions.
revenue_y = renewable_market/PPA_y + battery_merchant_y + tolling_y + ancillary_yWholesale-price scenarios scale only market-linked revenue. Fixed battery tolling and ancillary revenue are not multiplied by power-price escalation or renewable degradation; battery merchant revenue follows battery capacity degradation.
renewable export → clipped-energy charging → optional grid charging → constrained dischargeAll exports share one interconnection limit. Renewable energy that would otherwise be clipped is charged first when recovery is enabled.
Assumptions & limitations
- Negative market prices are valid observations and are not treated as data errors.
- Capture analytics are only as complete as the matched price and generation coverage; coverage/source labels should be considered together with the KPI.
- Public ENTSO-E explicit-allocation quantities are auction results, not trader-owned or executable capacity. Route economics are expressed per MW unless executable capacity is supplied from a separately verified source.
- Project Economics is an indicative deterministic model, not a dispatch optimiser or bankable due-diligence model. Tax, detailed degradation engineering, financing covenants and market-access constraints may require project-specific modelling.
- This tool provides indicative analysis and is not financial or investment advice.
