Electricity Trading API client for Python The Frequenz Electricity Trading API client for Python is an easy-to-use Python interface built to interact with the Frequenz Electricity Trading API. It allows you to create orders, get market data, and manage your orders.
- Create and manage gridpool orders: Place new orders, update existing ones, and cancel orders when necessary.
- Stream live data: Get real-time updates on market data, including order books, trades, and market prices.
- Retrieve historical data: Access historical data on market trades.
The following platforms are officially supported (tested):
- Python: 3.11
- Operating System: Ubuntu Linux 20.04
- Architectures: amd64, arm64
You can install the Frequenz Electricity Trading API client via pip. Replace VERSION
with the specific version you wish to install.
# Choose the version you want to install
VERSION=0.2.3
pip install frequenz-client-electricity-trading==$VERSION
First, initialize the client with the appropriate server URL and API key.
from frequenz.client.electricity_trading import Client
# Change server address if needed
SERVICE_URL = "grpc://electricity-trading.api.frequenz.com:443?ssl=true"
API_KEY = open('/path/to/api_key.txt').read().strip()
client = Client(
server_url=SERVICE_URL,
auth_key=API_KEY
)
Here's an example of how one can create a limit order to buy energy.
from frequenz.client.electricity_trading import (
Currency,
DeliveryArea,
DeliveryPeriod,
Energy,
EnergyMarketCodeType,
MarketSide,
OrderType,
Price,
)
from datetime import datetime, timedelta
from decimal import Decimal
# Define order parameters
gridpool_id = 1
delivery_area = DeliveryArea(
code="10YDE-EON------1", # TenneT
code_type=EnergyMarketCodeType.EUROPE_EIC
)
delivery_period = DeliveryPeriod(
start=datetime.fromisoformat("2024-05-01T00:00:00+00:00"),
duration=timedelta(minutes=15)
)
price = Price(amount=Decimal("50.0"), currency=Currency.EUR)
quantity = Energy(mwh=Decimal("0.1"))
order = await client.create_gridpool_order(
gridpool_id=gridpool_id,
delivery_area=delivery_area,
delivery_period=delivery_period,
order_type=OrderType.LIMIT,
side=MarketSide.BUY,
price=price,
quantity=quantity,
)
Orders for a given gridpool can be listed using various filters.
from frequenz.client.electricity_trading import MarketSide
# List all orders for a given gridpool
orders = await self._client.list_gridpool_orders(
gridpool_id=gridpool_id,
)
# List only the buy orders for a given gridpool
buy_orders = await self._client.list_gridpool_orders(
gridpool_id=gridpool_id,
side=MarketSide.BUY,
)
To get real-time updates on market trades, one can use the following code snippet.
stream_public_trades = await client.stream_public_trades()
async for public_trade in stream_public_trades:
print(f"Received public trade: {public_trade}")
If you want to know how to build this project and contribute to it, please check out the Contributing Guide.