Skip to content

Commit a598d94

Browse files
Add a notebook containing example usage of the client
Signed-off-by: camille-bouvy-frequenz <[email protected]>
1 parent dcc299e commit a598d94

File tree

1 file changed

+205
-0
lines changed

1 file changed

+205
-0
lines changed

example/example.ipynb

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Example Notebook\n",
8+
"\n",
9+
"This notebook demonstrates the implementation of an API Client and shows a couple examples of how to use it. \n"
10+
]
11+
},
12+
{
13+
"cell_type": "code",
14+
"execution_count": null,
15+
"metadata": {},
16+
"outputs": [],
17+
"source": [
18+
"#VERSION=\"0.3.1\"\n",
19+
"#!pip install frequenz-client-electricity-trading==$VERSION"
20+
]
21+
},
22+
{
23+
"cell_type": "code",
24+
"execution_count": 1,
25+
"metadata": {},
26+
"outputs": [],
27+
"source": [
28+
"import asyncio\n",
29+
"from datetime import datetime, timedelta, timezone\n",
30+
"from decimal import Decimal\n",
31+
"from frequenz.client.electricity_trading import (\n",
32+
" Client, \n",
33+
" Currency,\n",
34+
" DeliveryArea,\n",
35+
" DeliveryPeriod,\n",
36+
" EnergyMarketCodeType,\n",
37+
" MarketSide,\n",
38+
" OrderType,\n",
39+
" Power,\n",
40+
" Price,\n",
41+
")"
42+
]
43+
},
44+
{
45+
"cell_type": "code",
46+
"execution_count": null,
47+
"metadata": {},
48+
"outputs": [],
49+
"source": [
50+
"# Change server address if needed (default is the testing server)\n",
51+
"SERVICE_URL = \"grpc://electricity-trading-testing.api.frequenz.com:443?ssl=true\"\n",
52+
"\n",
53+
"# with open('/path/to/api_key.txt', 'r', encoding='utf-8') as f:\n",
54+
"with open('api_key.txt', 'r', encoding='utf-8') as f:\n",
55+
" API_KEY = f.read().strip()\n",
56+
"\n",
57+
"# with open('/path/to/gridpool_id.txt', 'r', encoding='utf-8') as f:\n",
58+
"with open('gridpool_id.txt', 'r', encoding='utf-8') as f:\n",
59+
" GRIDPOOL_ID = int(f.read().strip())"
60+
]
61+
},
62+
{
63+
"cell_type": "code",
64+
"execution_count": 4,
65+
"metadata": {},
66+
"outputs": [],
67+
"source": [
68+
"# Initialize the client\n",
69+
"client = Client(\n",
70+
" server_url=SERVICE_URL,\n",
71+
" auth_key=API_KEY\n",
72+
")"
73+
]
74+
},
75+
{
76+
"cell_type": "code",
77+
"execution_count": null,
78+
"metadata": {},
79+
"outputs": [],
80+
"source": [
81+
"# Define some order parameters\n",
82+
"delivery_area = DeliveryArea(\n",
83+
" code=\"10YDE-EON------1\", # TenneT\n",
84+
" code_type=EnergyMarketCodeType.EUROPE_EIC\n",
85+
")\n",
86+
"delivery_period = DeliveryPeriod(\n",
87+
" start=datetime.fromisoformat(\"2026-05-01T00:00:00+00:00\"),\n",
88+
" duration=timedelta(minutes=15)\n",
89+
")\n",
90+
"price = Price(amount=Decimal(\"50.0\"), currency=Currency.EUR)\n",
91+
"quantity = Power(mw=Decimal(\"0.1\"))\n",
92+
"\n",
93+
"# Create a new limit order to buy energy.\n",
94+
"order = await client.create_gridpool_order(\n",
95+
" gridpool_id=GRIDPOOL_ID,\n",
96+
" delivery_area=delivery_area,\n",
97+
" delivery_period=delivery_period,\n",
98+
" order_type=OrderType.LIMIT,\n",
99+
" side=MarketSide.BUY,\n",
100+
" price=price,\n",
101+
" quantity=quantity,\n",
102+
")\n",
103+
"\n",
104+
"print(f\"Created order: {order}\")"
105+
]
106+
},
107+
{
108+
"cell_type": "markdown",
109+
"metadata": {},
110+
"source": [
111+
"#### List Orders for a Gridpool\n",
112+
"\n",
113+
"Orders for a given gridpool can be listed using various filters."
114+
]
115+
},
116+
{
117+
"cell_type": "code",
118+
"execution_count": null,
119+
"metadata": {},
120+
"outputs": [],
121+
"source": [
122+
"# List all orders for a given gridpool\n",
123+
"async for order in client.list_gridpool_orders(gridpool_id=GRIDPOOL_ID):\n",
124+
" print(f\"Order: {order}\")\n"
125+
]
126+
},
127+
{
128+
"cell_type": "code",
129+
"execution_count": null,
130+
"metadata": {},
131+
"outputs": [],
132+
"source": [
133+
"# List only the buy orders for a given gridpool\n",
134+
"async for order in client.list_gridpool_orders(gridpool_id=GRIDPOOL_ID, side=MarketSide.BUY):\n",
135+
" print(f\"Buy order: {order}\")"
136+
]
137+
},
138+
{
139+
"cell_type": "markdown",
140+
"metadata": {},
141+
"source": [
142+
"#### Streaming Public Trades\n",
143+
"\n",
144+
"To get real-time updates on market trades, use the following code:"
145+
]
146+
},
147+
{
148+
"cell_type": "code",
149+
"execution_count": null,
150+
"metadata": {},
151+
"outputs": [
152+
{
153+
"name": "stderr",
154+
"output_type": "stream",
155+
"text": [
156+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
157+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
158+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
159+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
160+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
161+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
162+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
163+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
164+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
165+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
166+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
167+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
168+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
169+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
170+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
171+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
172+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n",
173+
"Broadcast receiver [Broadcast:GrpcStreamBroadcaster-electricity-trading-PublicTradeFilter(states=None, delivery_period=None, buy_delivery_area=None, sell_delivery_area=None):_Receiver] is full. Oldest message was dropped.\n"
174+
]
175+
}
176+
],
177+
"source": [
178+
"stream_public_trades = await client.stream_public_trades()\n",
179+
"async for public_trade in stream_public_trades:\n",
180+
" print(f\"Received public trade: {public_trade}\")\n"
181+
]
182+
}
183+
],
184+
"metadata": {
185+
"kernelspec": {
186+
"display_name": ".venv",
187+
"language": "python",
188+
"name": "python3"
189+
},
190+
"language_info": {
191+
"codemirror_mode": {
192+
"name": "ipython",
193+
"version": 3
194+
},
195+
"file_extension": ".py",
196+
"mimetype": "text/x-python",
197+
"name": "python",
198+
"nbconvert_exporter": "python",
199+
"pygments_lexer": "ipython3",
200+
"version": "3.11.0"
201+
}
202+
},
203+
"nbformat": 4,
204+
"nbformat_minor": 2
205+
}

0 commit comments

Comments
 (0)