2121 Power ,
2222 Price ,
2323 PublicTrade ,
24+ Trade ,
2425)
2526
2627
@@ -54,7 +55,7 @@ async def list_trades(url: str, key: str, *, delivery_start: datetime) -> None:
5455 """
5556 client = Client (server_url = url , auth_key = key )
5657
57- print_trade_header ()
58+ print_public_trade_header ()
5859
5960 delivery_period = None
6061 # If delivery period is selected, list historical trades also
@@ -67,12 +68,50 @@ async def list_trades(url: str, key: str, *, delivery_start: datetime) -> None:
6768 lst = client .list_public_trades (delivery_period = delivery_period )
6869
6970 async for trade in lst :
70- print_trade (trade )
71+ print_public_trade (trade )
7172
7273 if delivery_start <= datetime .now (timezone .utc ):
7374 return
7475
7576 stream = await client .stream_public_trades (delivery_period = delivery_period )
77+ async for trade in stream :
78+ print_public_trade (trade )
79+
80+
81+ async def list_gridpool_trades (
82+ url : str , key : str , gid : int , * , delivery_start : datetime
83+ ) -> None :
84+ """List gridpool trades and stream new gridpool trades.
85+
86+ Optionally a delivery_start can be provided to filter the trades by delivery period.
87+
88+ Args:
89+ url: URL of the trading API.
90+ key: API key.
91+ gid: Gridpool ID.
92+ delivery_start: Start of the delivery period or None.
93+ """
94+ client = Client (server_url = url , auth_key = key )
95+
96+ print_trade_header ()
97+
98+ delivery_period = None
99+ # If delivery period is selected, list historical trades also
100+ if delivery_start is not None :
101+ check_delivery_start (delivery_start )
102+ delivery_period = DeliveryPeriod (
103+ start = delivery_start ,
104+ duration = timedelta (minutes = 15 ),
105+ )
106+ lst = client .list_gridpool_trades (gid , delivery_period = delivery_period )
107+
108+ async for trade in lst :
109+ print_trade (trade )
110+
111+ if delivery_start and delivery_start <= datetime .now (timezone .utc ):
112+ return
113+
114+ stream = await client .stream_gridpool_trades (gid , delivery_period = delivery_period )
76115 async for trade in stream :
77116 print_trade (trade )
78117
@@ -197,7 +236,7 @@ async def cancel_order(
197236 await client .cancel_gridpool_order (gridpool_id , order_id )
198237
199238
200- def print_trade_header () -> None :
239+ def print_public_trade_header () -> None :
201240 """Print trade header in CSV format."""
202241 header = (
203242 "public_trade_id,"
@@ -216,7 +255,7 @@ def print_trade_header() -> None:
216255 print (header )
217256
218257
219- def print_trade (trade : PublicTrade ) -> None :
258+ def print_public_trade (trade : PublicTrade ) -> None :
220259 """Print trade details to stdout in CSV format."""
221260 values = (
222261 trade .public_trade_id ,
@@ -235,6 +274,44 @@ def print_trade(trade: PublicTrade) -> None:
235274 print ("," .join (v .name if isinstance (v , Enum ) else str (v ) for v in values ))
236275
237276
277+ def print_trade_header () -> None :
278+ """Print trade header in CSV format."""
279+ header = (
280+ "trade_id,"
281+ "order_id,"
282+ "execution_time,"
283+ "delivery_period_start,"
284+ "delivery_period_duration,"
285+ "delivery_area_code,"
286+ "delivery_area_code_type,"
287+ "side,"
288+ "quantity_mw,"
289+ "currency,"
290+ "price,"
291+ "state "
292+ )
293+ print (header )
294+
295+
296+ def print_trade (trade : Trade ) -> None :
297+ """Print trade details to stdout in CSV format."""
298+ values = (
299+ trade .id ,
300+ trade .order_id ,
301+ trade .execution_time .isoformat (),
302+ trade .delivery_period .start .isoformat (),
303+ trade .delivery_period .duration ,
304+ trade .delivery_area .code ,
305+ trade .delivery_area .code_type ,
306+ trade .side ,
307+ trade .quantity .mw ,
308+ trade .price .currency ,
309+ trade .price .amount ,
310+ trade .state ,
311+ )
312+ print ("," .join (v .name if isinstance (v , Enum ) else str (v ) for v in values ))
313+
314+
238315def print_order_header () -> None :
239316 """Print order header in CSV format."""
240317 header = (
0 commit comments