|
20 | 20 | OrderType, |
21 | 21 | Power, |
22 | 22 | Price, |
| 23 | + PublicOrder, |
23 | 24 | PublicTrade, |
24 | 25 | Trade, |
25 | 26 | ) |
@@ -81,6 +82,47 @@ async def receive_public_trades( # pylint: disable=too-many-arguments |
81 | 82 | print_public_trade(trade) |
82 | 83 |
|
83 | 84 |
|
| 85 | +async def receive_public_orders( # pylint: disable=too-many-arguments |
| 86 | + url: str, |
| 87 | + auth_key: str, |
| 88 | + *, |
| 89 | + delivery_start: datetime | None = None, |
| 90 | + start: datetime | None = None, |
| 91 | + end: datetime | None = None, |
| 92 | + sign_secret: str | None = None, |
| 93 | +) -> None: |
| 94 | + """List trades and stream new public trades. |
| 95 | +
|
| 96 | + Args: |
| 97 | + url: URL of the trading API. |
| 98 | + auth_key: API key. |
| 99 | + delivery_start: Start of the delivery period or None. |
| 100 | + start: First execution time to list trades from. |
| 101 | + end: Last execution time to list trades until. |
| 102 | + sign_secret: The cryptographic secret to use for HMAC generation. |
| 103 | + """ |
| 104 | + client = Client(server_url=url, auth_key=auth_key, sign_secret=sign_secret) |
| 105 | + |
| 106 | + print_public_orders_header() |
| 107 | + |
| 108 | + delivery_period = None |
| 109 | + # If delivery period is selected, list historical trades also |
| 110 | + if delivery_start is not None: |
| 111 | + check_delivery_start(delivery_start) |
| 112 | + delivery_period = DeliveryPeriod( |
| 113 | + start=delivery_start, |
| 114 | + duration=timedelta(minutes=15), |
| 115 | + ) |
| 116 | + stream = client.receive_public_order_book( |
| 117 | + delivery_period=delivery_period, |
| 118 | + start_time=start, |
| 119 | + end_time=end, |
| 120 | + ) |
| 121 | + async for orders in stream.new_receiver(): |
| 122 | + for order in orders: |
| 123 | + print_public_order(order) |
| 124 | + |
| 125 | + |
84 | 126 | async def list_gridpool_trades( |
85 | 127 | url: str, |
86 | 128 | auth_key: str, |
@@ -301,6 +343,44 @@ def print_public_trade(trade: PublicTrade) -> None: |
301 | 343 | print(",".join(v.name if isinstance(v, Enum) else str(v) for v in values)) |
302 | 344 |
|
303 | 345 |
|
| 346 | +def print_public_orders_header() -> None: |
| 347 | + """Print public order header in CSV format.""" |
| 348 | + header = ( |
| 349 | + "public_order_id," |
| 350 | + "create_time," |
| 351 | + "update_time," |
| 352 | + "delivery_period_start," |
| 353 | + "delivery_period_duration," |
| 354 | + "delivery_area_code," |
| 355 | + "quantity_mw," |
| 356 | + "side," |
| 357 | + "price_amount," |
| 358 | + "price_currency," |
| 359 | + "type," |
| 360 | + "execution_option" |
| 361 | + ) |
| 362 | + print(header) |
| 363 | + |
| 364 | + |
| 365 | +def print_public_order(order: PublicOrder) -> None: |
| 366 | + """Print public order details to stdout in CSV format.""" |
| 367 | + values = ( |
| 368 | + order.public_order_id, |
| 369 | + order.create_time.isoformat(), |
| 370 | + order.update_time.isoformat(), |
| 371 | + order.delivery_period.start.isoformat(), |
| 372 | + order.delivery_period.duration, |
| 373 | + order.delivery_area.code, |
| 374 | + order.quantity.mw, |
| 375 | + order.side, |
| 376 | + order.price.amount, |
| 377 | + order.price.currency, |
| 378 | + order.type, |
| 379 | + order.execution_option, |
| 380 | + ) |
| 381 | + print(",".join(v.name if isinstance(v, Enum) else str(v) for v in values)) |
| 382 | + |
| 383 | + |
304 | 384 | def print_trade_header() -> None: |
305 | 385 | """Print trade header in CSV format.""" |
306 | 386 | header = ( |
|
0 commit comments