@@ -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,17 @@ 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+ post_only : bool | None = None ,
510+ userref : int | None = None ,
511+ validate : bool = False ,
496512 * ,
497513 extra_params : dict | None = None ,
498514 ) -> dict :
@@ -504,22 +520,64 @@ def amend_order(
504520
505521 - https://docs.kraken.com/api/docs/rest-api/amend-order
506522
523+ :param txid: The txid of the order to edit
524+ :type txid: str, optional
525+ :param cl_ord_id: Client order id (optional)
526+ :type cl_ord_id: str, optional
527+ :param order_qty: Set a new order quantity
528+ :type order_qty: str | float, optional
529+ :param display_qty: Set a new display quantity
530+ :type display_qty: str | float, optional
531+ :param limit_price: Set a new limit price
532+ :type limit_price: str | float, optional
533+ :param trigger_price: Set a new trigger price
534+ :type trigger_price: str | float, optional
535+ :param post_only: Set post-only flag
536+ :type post_only: bool, optional
537+ :param userref: User reference id for example to group orders
538+ :type userref: int, optional
539+ :param validate: Validate the order without placing on the market (default: ``False``)
540+ :type validate: bool, optional
541+ :raises ValueError: If both ``txid`` and ``cl_ord_id`` are not set
542+ :return: Success or failure
543+ :rtype: dict
544+
507545 .. code-block:: python
508546 :linenos:
509547 :caption: Spot Trade: Amend order
510548
511549 >>> from kraken.spot import Trade
512550 >>> trade = Trade(key="api-key", secret="secret-key")
513551 >>> trade.amend_order(
514- ... extra_params={
515- ... "txid": "OVM3PT-56ACO-53SM2T",
516- ... "limit_price": "105636.9",
517- ... }
552+ ... txid="OVM3PT-56ACO-53SM2T",
553+ ... limit_price="105636.9"
518554 ... )
519555 """
556+ params : dict = {"validate" : validate }
557+ if defined (txid ):
558+ params ["txid" ] = txid
559+ if defined (cl_ord_id ):
560+ params ["cl_ord_id" ] = cl_ord_id
561+ if not defined (txid ) and not defined (cl_ord_id ):
562+ raise ValueError ("Either txid or cl_ord_id must be set!" )
563+
564+ if defined (order_qty ):
565+ params ["order_qty" ] = str (order_qty )
566+ if defined (display_qty ):
567+ params ["display_qty" ] = str (display_qty )
568+ if defined (limit_price ):
569+ params ["limit_price" ] = str (limit_price )
570+ if defined (trigger_price ):
571+ params ["trigger_price" ] = str (trigger_price )
572+ if defined (post_only ):
573+ params ["post_only" ] = post_only
574+ if defined (userref ):
575+ params ["userref" ] = userref
576+
520577 return self .request ( # type: ignore[return-value]
521578 "POST" ,
522579 uri = "/0/private/AmendOrder" ,
580+ params = params ,
523581 extra_params = extra_params ,
524582 )
525583
@@ -535,6 +593,7 @@ def edit_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
535593 deadline : str | None = None ,
536594 cancel_response : bool | None = None , # noqa: FBT001
537595 userref : int | None = None ,
596+ cl_ord_id : str | None = None ,
538597 * ,
539598 truncate : bool = False ,
540599 validate : bool = False ,
@@ -573,6 +632,8 @@ def edit_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
573632 :type validate: bool, optional
574633 :param userref: User reference id for example to group orders
575634 :type userref: int
635+ :param cl_ord_id: Client order id (optional)
636+ :type cl_ord_id: str, optional
576637 :return: Success or failure
577638 :rtype: dict
578639
@@ -602,6 +663,8 @@ def edit_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
602663 params : dict = {"txid" : txid , "pair" : pair , "validate" : validate }
603664 if defined (userref ):
604665 params ["userref" ] = userref
666+ if defined (cl_ord_id ):
667+ params ["cl_ord_id" ] = cl_ord_id
605668 if defined (volume ):
606669 params ["volume" ] = (
607670 str (volume )
@@ -632,21 +695,24 @@ def edit_order( # pylint: disable=too-many-arguments # noqa: PLR0913, PLR0917
632695 @ensure_string ("txid" )
633696 def cancel_order (
634697 self : Trade ,
635- txid : str ,
698+ txid : str | None = None ,
699+ cl_ord_id : str | None = None ,
636700 * ,
637701 extra_params : dict | None = None ,
638702 ) -> dict :
639703 """
640704 Cancel a specific order by ``txid``. Instead of a transaction id
641- a user reference id can be passed.
705+ a user reference id or client order id can be passed.
642706
643707 Requires the ``Cancel/close orders`` permission in
644708 the API key settings.
645709
646710 - https://docs.kraken.com/api/docs/rest-api/cancel-order
647711
648- :param txid: Transaction id or comma delimited list of user reference ids to cancel.
649- :type txid: str
712+ :param txid: Transaction id, client order id, or comma delimited list of user reference ids to cancel.
713+ :type txid: str, optional
714+ :param cl_ord_id: Client order id (optional)
715+ :type cl_ord_id: str, optional
650716 :return: Success or failure - Number of closed orders
651717 :rtype: dict
652718
@@ -659,10 +725,18 @@ def cancel_order(
659725 >>> trade.cancel_order(txid="OAUHYR-YCVK6-P22G6P")
660726 { 'count': 1 }
661727 """
728+ params : dict = {}
729+ if defined (txid ):
730+ params ["txid" ] = txid
731+ elif defined (cl_ord_id ):
732+ params ["txid" ] = cl_ord_id
733+ else :
734+ raise ValueError ("Either txid or cl_ord_id must be set!" )
735+
662736 return self .request ( # type: ignore[return-value]
663737 method = "POST" ,
664738 uri = "/0/private/CancelOrder" ,
665- params = { "txid" : txid } ,
739+ params = params ,
666740 extra_params = extra_params ,
667741 )
668742
@@ -742,7 +816,7 @@ def cancel_order_batch(
742816 extra_params : dict | None = None ,
743817 ) -> dict :
744818 """
745- Cancel a a list of orders by ``txid`` or ``userref``
819+ Cancel a list of orders by ``txid``, ``userref`` or ``cl_ord_id``.
746820
747821 Requires the ``Cancel/close orders`` permission in
748822 the API key settings.
0 commit comments