diff --git a/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj b/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj index 7894ec5..a412cc5 100644 --- a/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj +++ b/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj @@ -6,7 +6,7 @@ false - + diff --git a/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt b/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt new file mode 100644 index 0000000..05987d2 --- /dev/null +++ b/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt @@ -0,0 +1,54 @@ +GET +/api/v3/trade/history-orders +true +UriParams: {"category": "SPOT"} +{ + "code": "00000", + "msg": "success", + "requestTime": 1730186730084, + "data": { + "list": [ + { + "orderId": "111111111111111111", + "clientOid": "111111111111111111", + "category": "USDT-FUTURES", + "symbol": "BTCUSDT", + "orderType": "limit", + "side": "sell", + "price": "49534.4", + "qty": "0.429", + "amount": "0", + "cumExecQty": "0.429", + "cumExecValue": "21250.2929", + "avgPrice": "49534.4", + "timeInForce": "gtc", + "orderStatus": "filled", + "posSide": "long", + "holdMode": "hedge_mode", + "delegateType": "normal", + "reduceOnly": "NO", + "marginMode": "crossed", + "stpMode": "none", + "takeProfit": "", + "stopLoss": "", + "tpTriggerBy": "", + "slTriggerBy": "", + "tpOrderType": "", + "slOrderType": "", + "tpLimitPrice": "", + "slLimitPrice": "", + "feeDetail": [ + { + "feeCoin": "USDT", + "fee": "4.2500586" + } + ], + "cancelReason": "normal_cancel", + "execType": "liquidation", + "createdTime": "1730181468493", + "updatedTime": "1730181468493" + } + ], + "cursor": "1233319323918499840" + } +} \ No newline at end of file diff --git a/Bitget.Net.UnitTests/RestRequestTests.cs b/Bitget.Net.UnitTests/RestRequestTests.cs index a9e0ccf..370562c 100644 --- a/Bitget.Net.UnitTests/RestRequestTests.cs +++ b/Bitget.Net.UnitTests/RestRequestTests.cs @@ -298,6 +298,7 @@ public async Task ValidateUnifiedTradingCalls() await tester.ValidateAsync(client => client.UnifiedApi.Trading.ClosePositionsAsync(ProductCategory.UsdtFutures), "ClosePositions", nestedJsonProperty: "data.list"); await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetOrderAsync(), "GetOrder", nestedJsonProperty: "data", ignoreProperties: ["reduceOnly"]); await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetOpenOrdersAsync(), "GetOpenOrders", nestedJsonProperty: "data", ignoreProperties: ["reduceOnly"]); + await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetClosedOrdersAsync(ProductCategory.Spot), "GetClosedOrders", nestedJsonProperty: "data"); await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetUserTradesAsync(), "GetUserTrades", nestedJsonProperty: "data", ignoreProperties: ["isRPI"]); await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetPositionsAsync(ProductCategory.UsdtFutures), "GetPositions", nestedJsonProperty: "data.list"); await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetPositionHistoryAsync(ProductCategory.UsdtFutures), "GetPositionHistory", nestedJsonProperty: "data"); diff --git a/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs b/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs index 9fc8601..b3123f2 100644 --- a/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs +++ b/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs @@ -205,6 +205,32 @@ public async Task> GetOpenOrdersAsync( #endregion + #region Get Closed Orders (history) + + /// + public async Task> GetClosedOrdersAsync( + ProductCategory category, + string? orderId = null, + DateTime? startTime = null, + DateTime? endTime = null, + int? limit = null, + string? cursor = null, + CancellationToken ct = default) + { + var parameters = new Parameters(BitgetExchange._parameterSerializationSettings); + parameters.Add("category", category); + parameters.Add("orderId", orderId); + parameters.Add("startTime", startTime); + parameters.Add("endTime", endTime); + parameters.Add("limit", limit); + parameters.Add("cursor", cursor); + var request = _definitions.GetOrCreate(HttpMethod.Get, _baseClient.BaseAddress, "/api/v3/trade/history-orders", BitgetExchange.RateLimiter.Overall, 1, true, limitGuard: new SingleLimitGuard(20, TimeSpan.FromSeconds(1), RateLimitWindowType.Sliding)); + var result = await _baseClient.SendAsync(request, parameters, ct).ConfigureAwait(false); + return result; + } + + #endregion + #region Get User Trades /// diff --git a/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs b/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs index 3ee8f12..dc593af 100644 --- a/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs +++ b/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs @@ -182,6 +182,31 @@ Task> GetOpenOrdersAsync( string? cursor = null, CancellationToken ct = default); + /// + /// Get order history + /// + /// Docs:
+ ///
+ /// Endpoint:
+ /// GET /api/v3/trade/history-orders
+ ///
+ ///
+ /// ["category"] Category + /// ["symbol"] Filter by symbol, for example `ETHUSDT` + /// ["startTime"] Filter by start time + /// ["endTime"] Filter by end time + /// ["limit"] Max number of results, max 100 + /// ["cursor"] Pagination cursor + /// Cancellation token + Task> GetClosedOrdersAsync( + ProductCategory category, + string? symbol = null, + DateTime? startTime = null, + DateTime? endTime = null, + int? limit = null, + string? cursor = null, + CancellationToken ct = default); + /// /// Get user trades ///