From d2dafe963f37081507d0d83aba357ca51f317226 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 19 Nov 2025 04:45:17 -0500 Subject: [PATCH 1/2] Implemented AmendOrderAsync method in Kraken API --- .../API/Exchanges/Kraken/ExchangeKrakenAPI.cs | 41 +++++++++++++++++++ .../API/Exchanges/_Base/ExchangeAPI.cs | 4 ++ .../API/Exchanges/_Base/IExchangeAPI.cs | 7 ++++ 3 files changed, 52 insertions(+) mode change 100644 => 100755 src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs mode change 100644 => 100755 src/ExchangeSharp/API/Exchanges/_Base/IExchangeAPI.cs diff --git a/src/ExchangeSharp/API/Exchanges/Kraken/ExchangeKrakenAPI.cs b/src/ExchangeSharp/API/Exchanges/Kraken/ExchangeKrakenAPI.cs index 6a2c8576..9644e19d 100644 --- a/src/ExchangeSharp/API/Exchanges/Kraken/ExchangeKrakenAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/Kraken/ExchangeKrakenAPI.cs @@ -964,6 +964,47 @@ await GetNoncePayloadAsync(), return balances; } + protected override async Task OnAmendOrderAsync( + ExchangeOrderRequest order + ) + { + IEnumerable markets = await OnGetMarketSymbolsMetadataAsync(); + ExchangeMarket market = markets + .Where(m => m.MarketSymbol == order.MarketSymbol) + .First(); + + object nonce = await GenerateNonceAsync(); + Dictionary payload = new Dictionary( + StringComparer.OrdinalIgnoreCase + ) + { + { "cl_ord_id", order.ClientOrderId }, + { "order_qty", order.RoundAmount().ToStringInvariant() }, + { "limit_price", order.Price }, + { "post_only", order.IsPostOnly }, + { "nonce", nonce } + }; + + JToken token = await MakeJsonRequestAsync("/0/private/AmendOrder", null, payload, "POST"); + ExchangeOrderResult result = new ExchangeOrderResult + { + OrderDate = CryptoUtility.UtcNow, + Result = ExchangeAPIOrderResult.Open + }; + if (token["txid"] is JArray array) + { + result.OrderId = array[0].ToStringInvariant(); + } + if (token["descr"] is JObject descrArray) + { + result = ExtendResultsWithOrderDescr( + result, + descrArray["order"].ToStringInvariant() + ); + } + return result; + } + protected override async Task OnPlaceOrderAsync( ExchangeOrderRequest order ) diff --git a/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs b/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs old mode 100644 new mode 100755 index fe07e57b..8dac6cf7 --- a/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs @@ -259,6 +259,10 @@ protected virtual Task> OnGetAmountsAvailableToTrade ExchangeOrderRequest order ) => throw new NotImplementedException(); + protected virtual Task OnAmendOrderAsync( + ExchangeOrderRequest order + ) => throw new NotImplementedException(); + protected virtual Task OnPlaceOrdersAsync( params ExchangeOrderRequest[] order ) => throw new NotImplementedException(); diff --git a/src/ExchangeSharp/API/Exchanges/_Base/IExchangeAPI.cs b/src/ExchangeSharp/API/Exchanges/_Base/IExchangeAPI.cs old mode 100644 new mode 100755 index e9d6ad48..aa86a5cf --- a/src/ExchangeSharp/API/Exchanges/_Base/IExchangeAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/_Base/IExchangeAPI.cs @@ -217,6 +217,13 @@ Task> GetMarginAmountsAvailableToTradeAsync( /// Order result and message string if any Task PlaceOrderAsync(ExchangeOrderRequest order); + /// + /// Amend an order + /// + /// Amend request + /// Amend result and message string if any + Task AmendOrderAsync(ExchangeOrderRequest order); + /// /// Place bulk orders /// From e99147a6e453f3b5c2061bf0b8514bea63908be8 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 19 Nov 2025 05:07:33 -0500 Subject: [PATCH 2/2] Missed including AmendOrderAsync in ExchangeAPI.cs --- src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs b/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs index 8dac6cf7..cc33ad55 100755 --- a/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/_Base/ExchangeAPI.cs @@ -1311,6 +1311,13 @@ public virtual async Task PlaceOrderAsync(ExchangeOrderRequ return await OnPlaceOrderAsync(order); } + public virtual async Task AmendOrderAsync(ExchangeOrderRequest order) + { + await new SynchronizationContextRemover(); + order.MarketSymbol = NormalizeMarketSymbol(order.MarketSymbol); + return await OnAmendOrderAsync(order); + } + /// /// Place bulk orders ///