> For the complete documentation index, see [llms.txt](https://docs.voltmasters.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.voltmasters.io/voltmasters-platform/10.-project-settings/10.8-energy-price-calculation.md).

# Energy price calculation

The EMS never bases its decisions on the raw EPEX spot price directly. It first converts EPEX into the **net injection price** and the **net consumption price** using the contract parameters you configured. These net prices drive every price-based decision in the system, including [curtailment](/voltmasters-platform/10.-project-settings/10.3-curtailment.md) and [cost optimization](/control-algorithms/cost-optimization.md).

{% hint style="info" %}
The formulas below apply to a **dynamic** contract. Fixed, flexible and Spanish time-of-use contracts set the net prices differently — see [Energy contracts](/voltmasters-platform/10.-project-settings/10.11-energy-contracts.md) for how each contract type is priced.
{% endhint %}

### Supported countries and price source

Day-ahead spot prices are sourced from the **ENTSO-E Transparency Platform** for the project's **bidding zone**. The zone is derived automatically from the project's country. The following countries are supported:

| Country       | Bidding zone | Local time       |
| ------------- | ------------ | ---------------- |
| Belgium       | BE           | Europe/Brussels  |
| Netherlands   | NL           | Europe/Amsterdam |
| Luxembourg    | LU           | Europe/Brussels  |
| France        | FR           | Europe/Paris     |
| Germany       | DE           | Europe/Berlin    |
| Austria       | AT           | Europe/Vienna    |
| Switzerland   | CH           | Europe/Zurich    |
| Great Britain | GB           | Europe/London    |
| Poland        | PL           | Europe/Warsaw    |
| Spain         | ES           | Europe/Madrid    |
| Italy         | IT           | Europe/Rome      |

{% hint style="info" %}
Prices are retrieved in 15-minute resolution. If a project's country is not in this list, the EMS falls back to the Belgian bidding zone for its day-ahead prices.
{% endhint %}

### The formulas

Both prices are expressed in €/MWh:

```
Injection price   = (B × EPEX) − injection cost − injection distribution cost
Consumption price = (A × EPEX) + consumption cost + consumption distribution cost
```

Where:

* **A** = consumption scaling factor
* **B** = injection scaling factor
* The costs are your fixed per-MWh contract components.

The **injection price** is what you actually earn (or pay) per MWh when you inject: it is the EPEX price *minus* the costs that come with injecting. Because those costs are subtracted, the injection price turns negative before EPEX itself does. The **consumption price** is what you actually pay per MWh imported: the EPEX price *plus* your consumption costs.

### Contract parameters

You configure the following parameters for your project. They correspond one-to-one with the terms in the formulas above:

| Parameter                     | Symbol | Effect                                   |
| ----------------------------- | ------ | ---------------------------------------- |
| Consumption scaling factor    | A      | Multiplies EPEX in the consumption price |
| Consumption cost              | —      | Added to the consumption price           |
| Consumption distribution cost | —      | Added to the consumption price           |
| Injection scaling factor      | B      | Multiplies EPEX in the injection price   |
| Injection cost                | —      | Subtracted from the injection price      |
| Injection distribution cost   | —      | Subtracted from the injection price      |

### The break-even point

{% hint style="warning" %}
The injection and consumption costs are **already included** in the net prices — you do not set a separate threshold anywhere. The break-even EPEX price for injection is simply the sum of your injection costs:

```
Break-even EPEX = injection cost + injection distribution cost
```

Above that EPEX price the net injection price is positive (injecting pays); below it the net injection price is negative.
{% endhint %}

### Worked example

With an injection scaling factor **B = 1**, injection cost **€5/MWh** and injection distribution cost **€1/MWh**:

```
Injection price = (1 × EPEX) − 5 − 1 = EPEX − 6
```

* The break-even EPEX price is **6 €/MWh** (5 + 1). At exactly EPEX 6 the net injection price is 0.
* At an EPEX price of **4.01 €/MWh**, the net injection price is `4.01 − 6 = −1.99 €/MWh`. This is negative — injecting would cost you €1.99 per MWh.
* The injection price only becomes positive once EPEX rises **above 6 €/MWh**.

The `−1.99` in this example is not a setting or a threshold — it is the net injection price *at that moment's EPEX*. The value that price-based decisions compare against is the injection price crossing **zero**, which for this contract corresponds exactly to EPEX crossing **6 €/MWh**.

### Where these prices are used

* [**Curtailment**](/voltmasters-platform/10.-project-settings/10.3-curtailment.md): PV production is limited when the net injection price is negative.
* [**Cost optimization**](/control-algorithms/cost-optimization.md): the battery is charged and discharged based on the net consumption and injection prices across the forecast.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.voltmasters.io/voltmasters-platform/10.-project-settings/10.8-energy-price-calculation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
