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..cc33ad55 --- 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(); @@ -1307,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 /// 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 ///