Skip to content

Commit 86f7d4f

Browse files
committed
Adds cl_ord_id spot endpoints
1 parent 65be039 commit 86f7d4f

5 files changed

Lines changed: 149 additions & 24 deletions

File tree

src/kraken/spot/trade.py

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def create_order( # pylint: disable=too-many-branches,too-many-arguments # noqa
9696
close_price2: str | float | None = None,
9797
deadline: str | None = None,
9898
userref: int | None = None,
99+
cl_ord_id: str | None = None,
99100
*,
100101
truncate: bool = False,
101102
reduce_only: bool | None = False,
@@ -190,6 +191,8 @@ def create_order( # pylint: disable=too-many-branches,too-many-arguments # noqa
190191
:type validate: bool, optional
191192
:param userref: User reference id for example to group orders
192193
:type userref: int, optional
194+
:param cl_ord_id: Client order id (optional)
195+
:type cl_ord_id: str, optional
193196
:raises ValueError: If input is not correct
194197
:return: The transaction id
195198
:rtype: dict
@@ -400,6 +403,8 @@ def create_order( # pylint: disable=too-many-branches,too-many-arguments # noqa
400403
params["deadline"] = deadline
401404
if defined(userref):
402405
params["userref"] = userref
406+
if defined(cl_ord_id):
407+
params["cl_ord_id"] = cl_ord_id
403408
if defined(displayvol):
404409
params["displayvol"] = str(displayvol)
405410

@@ -456,6 +461,7 @@ def create_order_batch(
456461
... "timeinforce": "GTC",
457462
... "type": "buy",
458463
... "userref": 16861348843,
464+
... "cl_ord_id": "my-client-order-id-1",
459465
... "volume": 1,
460466
... },
461467
... {
@@ -464,6 +470,7 @@ def create_order_batch(
464470
... "timeinforce": "GTC",
465471
... "type": "sell",
466472
... "userref": 16861348843,
473+
... "cl_ord_id": "my-client-order-id-2",
467474
... "volume": 2,
468475
... },
469476
... ],
@@ -491,8 +498,19 @@ def create_order_batch(
491498
extra_params=extra_params,
492499
)
493500

494-
def amend_order(
501+
def amend_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
495502
self: Trade,
503+
txid: str | None = None,
504+
cl_ord_id: str | None = None,
505+
order_qty: str | float | None = None,
506+
display_qty: str | float | None = None,
507+
limit_price: str | float | None = None,
508+
trigger_price: str | float | None = None,
509+
pair: str | None = None,
510+
post_only: bool | None = None,
511+
deadline: str | None = None,
512+
nonce: int | None = None,
513+
validate: bool = False,
496514
*,
497515
extra_params: dict | None = None,
498516
) -> dict:
@@ -504,22 +522,69 @@ def amend_order(
504522
505523
- https://docs.kraken.com/api/docs/rest-api/amend-order
506524
525+
:param txid: The txid of the order to edit
526+
:type txid: str, optional
527+
:param cl_ord_id: Client order id (optional)
528+
:type cl_ord_id: str, optional
529+
:param order_qty: Set a new order quantity
530+
:type order_qty: str | float, optional
531+
:param display_qty: Set a new display quantity
532+
:type display_qty: str | float, optional
533+
:param limit_price: Set a new limit price
534+
:type limit_price: str | float, optional
535+
:param trigger_price: Set a new trigger price
536+
:type trigger_price: str | float, optional
537+
:param pair: Pair of the order, required on amends for non-crypto orders
538+
:type pair: str, optional
539+
:param post_only: Set post-only flag
540+
:type post_only: bool, optional
541+
:param deadline: RFC3339 timestamp
542+
:type deadline: str, optional
543+
:param nonce: Nonce used in construction of API-Sign header
544+
:type nonce: int, optional
545+
:param validate: Validate the order without placing on the market (default: ``False``)
546+
:type validate: bool, optional
547+
:raises ValueError: If both ``txid`` and ``cl_ord_id`` are not set
548+
:return: Success or failure
549+
:rtype: dict
550+
507551
.. code-block:: python
508552
:linenos:
509553
:caption: Spot Trade: Amend order
510554
511555
>>> from kraken.spot import Trade
512556
>>> trade = Trade(key="api-key", secret="secret-key")
513557
>>> trade.amend_order(
514-
... extra_params={
515-
... "txid": "OVM3PT-56ACO-53SM2T",
516-
... "limit_price": "105636.9",
517-
... }
558+
... txid="OVM3PT-56ACO-53SM2T",
559+
... limit_price="105636.9"
518560
... )
519561
"""
562+
params: dict = {"validate": validate}
563+
if defined(txid):
564+
params["txid"] = txid
565+
if defined(cl_ord_id):
566+
params["cl_ord_id"] = cl_ord_id
567+
if defined(order_qty):
568+
params["order_qty"] = str(order_qty)
569+
if defined(display_qty):
570+
params["display_qty"] = str(display_qty)
571+
if defined(limit_price):
572+
params["limit_price"] = str(limit_price)
573+
if defined(trigger_price):
574+
params["trigger_price"] = str(trigger_price)
575+
if defined(pair):
576+
params["pair"] = pair
577+
if defined(post_only):
578+
params["post_only"] = post_only
579+
if defined(deadline):
580+
params["deadline"] = deadline
581+
if defined(nonce):
582+
params["nonce"] = nonce
583+
520584
return self.request( # type: ignore[return-value]
521585
"POST",
522586
uri="/0/private/AmendOrder",
587+
params=params,
523588
extra_params=extra_params,
524589
)
525590

@@ -632,21 +697,24 @@ def edit_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
632697
@ensure_string("txid")
633698
def cancel_order(
634699
self: Trade,
635-
txid: str,
700+
txid: str | None = None,
701+
cl_ord_id: str | None = None,
636702
*,
637703
extra_params: dict | None = None,
638704
) -> dict:
639705
"""
640706
Cancel a specific order by ``txid``. Instead of a transaction id
641-
a user reference id can be passed.
707+
a user reference id or client order id can be passed.
642708
643709
Requires the ``Cancel/close orders`` permission in
644710
the API key settings.
645711
646712
- https://docs.kraken.com/api/docs/rest-api/cancel-order
647713
648-
:param txid: Transaction id or comma delimited list of user reference ids to cancel.
649-
:type txid: str
714+
:param txid: Transaction id, client order id, or comma delimited list of user reference ids to cancel.
715+
:type txid: str, optional
716+
:param cl_ord_id: Client order id (optional)
717+
:type cl_ord_id: str, optional
650718
:return: Success or failure - Number of closed orders
651719
:rtype: dict
652720
@@ -659,10 +727,17 @@ def cancel_order(
659727
>>> trade.cancel_order(txid="OAUHYR-YCVK6-P22G6P")
660728
{ 'count': 1 }
661729
"""
730+
params: dict = {}
731+
if defined(txid):
732+
params["txid"] = txid
733+
if defined(cl_ord_id):
734+
params["cl_ord_id"] = cl_ord_id
735+
736+
662737
return self.request( # type: ignore[return-value]
663738
method="POST",
664739
uri="/0/private/CancelOrder",
665-
params={"txid": txid},
740+
params=params,
666741
extra_params=extra_params,
667742
)
668743

@@ -742,7 +817,7 @@ def cancel_order_batch(
742817
extra_params: dict | None = None,
743818
) -> dict:
744819
"""
745-
Cancel a a list of orders by ``txid`` or ``userref``
820+
Cancel a list of orders by ``txid``, ``userref`` or ``cl_ord_id``.
746821
747822
Requires the ``Cancel/close orders`` permission in
748823
the API key settings.

src/kraken/spot/user.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ def get_trade_balance(
252252
def get_open_orders(
253253
self: User,
254254
userref: int | None = None,
255+
cl_ord_id: str | None = None,
255256
*,
256257
trades: bool | None = False,
257258
extra_params: dict | None = None,
@@ -266,6 +267,8 @@ def get_open_orders(
266267
267268
:param userref: Filter the results by user reference id
268269
:type userref: int, optional
270+
:param cl_ord_id: Filter the results by client order id
271+
:type cl_ord_id: str, optional
269272
:param trades: Include trades related to position or not into the
270273
response (default: ``False``)
271274
:type trades: bool
@@ -316,6 +319,8 @@ def get_open_orders(
316319
params: dict = {"trades": trades}
317320
if defined(userref):
318321
params["userref"] = userref
322+
if defined(cl_ord_id):
323+
params["cl_ord_id"] = cl_ord_id
319324
return self.request( # type: ignore[return-value]
320325
method="POST",
321326
uri="/0/private/OpenOrders",
@@ -326,6 +331,7 @@ def get_open_orders(
326331
def get_closed_orders(
327332
self: User,
328333
userref: int | None = None,
334+
cl_ord_id: str | None = None,
329335
start: int | None = None,
330336
end: int | None = None,
331337
ofs: int | None = None,
@@ -344,6 +350,8 @@ def get_closed_orders(
344350
345351
:param userref: Filter the results by user reference id
346352
:type userref: int, optional
353+
:param cl_ord_id: Filter the results by client order id
354+
:type cl_ord_id: str, optional
347355
:param start: Unix timestamp to start the search from
348356
:type start: int, optional
349357
:param end: Unix timestamp to define the last result to include
@@ -404,6 +412,8 @@ def get_closed_orders(
404412
params: dict = {"trades": trades, "closetime": closetime}
405413
if defined(userref):
406414
params["userref"] = userref
415+
if defined(cl_ord_id):
416+
params["cl_ord_id"] = cl_ord_id
407417
if defined(start):
408418
params["start"] = start
409419
if defined(end):
@@ -423,6 +433,7 @@ def get_orders_info(
423433
self: User,
424434
txid: list[str] | str,
425435
userref: int | None = None,
436+
cl_ord_id: str | None = None,
426437
*,
427438
trades: bool | None = False,
428439
consolidate_taker: bool | None = True,
@@ -441,6 +452,8 @@ def get_orders_info(
441452
:type txid: str | list[str]
442453
:param userref: Filter results by user reference id
443454
:type userref: int, optional
455+
:param cl_ord_id: Filter results by client order id
456+
:type cl_ord_id: str, optional
444457
:param trades: Include trades in the result or not (default: ``False``)
445458
:type trades: bool, optional
446459
:param consolidate_taker: Consolidate trades by individual taker trades
@@ -524,6 +537,8 @@ def get_orders_info(
524537
}
525538
if defined(userref):
526539
params["userref"] = userref
540+
if defined(cl_ord_id):
541+
params["cl_ord_id"] = cl_ord_id
527542
return self.request( # type: ignore[return-value]
528543
method="POST",
529544
uri="/0/private/QueryOrders",

src/kraken/spot/ws_client.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ async def send_message( # noqa: C901 # pylint: disable=arguments-differ
253253
... "order_qty": 1.0,
254254
... "side": "buy",
255255
... "symbol": "BTC/USD",
256+
... "cl_ord_id": "my-client-order-id"
256257
... },
257258
... }
258259
... )
@@ -275,13 +276,15 @@ async def send_message( # noqa: C901 # pylint: disable=arguments-differ
275276
... "order_qty": 1,
276277
... "order_type": "limit",
277278
... "order_userref": 123456789,
279+
... "cl_ord_id": "my-client-order-id-1",
278280
... "side": "buy",
279281
... },
280282
... {
281283
... "limit_price": 500.21,
282284
... "order_qty": 2.12345,
283285
... "order_type": "limit",
284286
... "order_userref": 212345679,
287+
... "cl_ord_id": "my-client-order-id-2",
285288
... "side": "sell",
286289
... "stp_type": "cancel_both",
287290
... },
@@ -307,7 +310,8 @@ async def send_message( # noqa: C901 # pylint: disable=arguments-differ
307310
... "orders": [
308311
... "123456789",
309312
... "212345679",
310-
... "ORDER-ID123-4567890"
313+
... "ORDER-ID123-4567890",
314+
... "my-client-order-id"
311315
... ],
312316
... },
313317
... }
@@ -356,25 +360,26 @@ async def send_message( # noqa: C901 # pylint: disable=arguments-differ
356360
... message={
357361
... "method": "cancel_order",
358362
... "params": {
359-
... "order_id": ["ORDER-ID123-456789", "ORDER-ID123-987654"],
363+
... "order_id": ["ORDER-ID123-456789", "my-client-order-id"],
360364
... },
361365
... }
362366
... )
363367
364-
**Editing orders** can be done as shown in the example below. See
365-
https://docs.kraken.com/api/docs/websocket-v2/edit_order for more information.
368+
**Amending orders** can be done as shown in the example below. See
369+
https://docs.kraken.com/api/docs/websocket-v2/amend_order for more information.
366370
367371
.. code-block:: python
368372
:linenos:
369-
:caption: Spot Websocket: Cancel order(s)
373+
:caption: Spot Websocket: Amend order
370374
371375
>>> await client_auth.send_message(
372376
... message={
373-
... "method": "edit_order",
377+
... "method": "amend_order",
374378
... "params": {
375379
... "order_id": "ORDER-ID123-456789",
376380
... "order_qty": 2.5,
377381
... "symbol": "BTC/USD",
382+
... "cl_ord_id": "my-client-order-id"
378383
... },
379384
... }
380385
... )
@@ -586,7 +591,7 @@ def private_methods(self: SpotWSClient) -> list[str]:
586591
June 2023):
587592
588593
- `add_order <https://docs.kraken.com/api/docs/websocket-v2/add_order>`_
589-
- `amend_order` <https://docs.kraken.com/api/docs/websocket-v2/amend_order>`_
594+
- `amend_order <https://docs.kraken.com/api/docs/websocket-v2/amend_order>`_
590595
- `cancel_order <https://docs.kraken.com/api/docs/websocket-v2/cancel_order>`_
591596
- `cancel_all <https://docs.kraken.com/api/docs/websocket-v2/cancel_all>`_
592597
- `cancel_all_orders_after <https://docs.kraken.com/api/docs/websocket-v2/cancel_after>`_

0 commit comments

Comments
 (0)