From e7eb559074bb61dfd2ef409accadde4f0e93826c Mon Sep 17 00:00:00 2001 From: Jkorf Date: Fri, 21 Aug 2026 09:51:17 +0200 Subject: [PATCH] Updated remaining quantity/volumes to SharedOrderQuantity model in Shared APIs, added QuantityType to SharedOrderBook, added auto calculated quote quantity where for SharedOrderQuantity where it makes sense --- .../ResponseModels/SharedBookTicker.cs | 31 +++++++++++++++---- .../ResponseModels/SharedOpenInterest.cs | 15 ++++++--- .../ResponseModels/SharedOrderBook.cs | 7 ++++- .../ResponseModels/SharedPosition.cs | 11 +++++-- .../ResponseModels/SharedPositionHistory.cs | 11 +++++-- .../SharedApis/ResponseModels/SharedTrade.cs | 2 +- .../ResponseModels/SharedUserTrade.cs | 12 +++++-- 7 files changed, 68 insertions(+), 21 deletions(-) diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedBookTicker.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedBookTicker.cs index de7901ae..d2174318 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedBookTicker.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedBookTicker.cs @@ -1,4 +1,5 @@ -using System.Diagnostics; +using System; +using System.Diagnostics; namespace CryptoExchange.Net.SharedApis { @@ -15,26 +16,44 @@ namespace CryptoExchange.Net.SharedApis /// /// Quantity of the best ask /// - public decimal BestAskQuantity { get; set; } + [Obsolete("Use `BestAskQuantities` instead")] + public decimal BestAskQuantity => BestAskQuantities.QuantityInBaseAsset ?? BestAskQuantities.QuantityInContracts ?? 0; + /// + /// Quantities of the best ask + /// + public SharedOrderQuantity BestAskQuantities { get; set; } + /// /// Price of the best bid /// public decimal BestBidPrice { get; set; } + /// /// Quantity of the best bid /// - public decimal BestBidQuantity { get; set; } + [Obsolete("Use `BestBidQuantities` instead")] + public decimal BestBidQuantity => BestBidQuantities.QuantityInBaseAsset ?? BestBidQuantities.QuantityInContracts ?? 0; + /// + /// Quantities of the best bid + /// + public SharedOrderQuantity BestBidQuantities { get; set; } /// /// ctor /// - public SharedBookTicker(SharedSymbol? sharedSymbol, string symbol, decimal bestAskPrice, decimal bestAskQuantity, decimal bestBidPrice, decimal bestBidQuantity) + public SharedBookTicker( + SharedSymbol? sharedSymbol, + string symbol, + decimal bestAskPrice, + SharedOrderQuantity bestAskQuantity, + decimal bestBidPrice, + SharedOrderQuantity bestBidQuantity) : base(sharedSymbol, symbol) { BestAskPrice = bestAskPrice; - BestAskQuantity = bestAskQuantity; + BestAskQuantities = bestAskQuantity.WithCalculatedQuantities(bestAskPrice, null); BestBidPrice = bestBidPrice; - BestBidQuantity = bestBidQuantity; + BestBidQuantities = bestBidQuantity.WithCalculatedQuantities(bestBidPrice, null); } } } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedOpenInterest.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedOpenInterest.cs index b25b173c..2ab68c31 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedOpenInterest.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedOpenInterest.cs @@ -1,4 +1,6 @@ -namespace CryptoExchange.Net.SharedApis +using System; + +namespace CryptoExchange.Net.SharedApis { /// /// Open interest @@ -8,14 +10,19 @@ /// /// Current open interest /// - public decimal OpenInterest { get; set; } + [Obsolete("Use `OpenInterests` instead")] + public decimal OpenInterest => OpenInterests.QuantityInBaseAsset ?? OpenInterests.QuantityInContracts ?? 0; + /// + /// Current open interest + /// + public SharedOrderQuantity OpenInterests { get; set; } /// /// ctor /// - public SharedOpenInterest(decimal openInterest) + public SharedOpenInterest(SharedOrderQuantity openInterest) { - OpenInterest = openInterest; + OpenInterests = openInterest; } } } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedOrderBook.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedOrderBook.cs index 7057c414..37e517b2 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedOrderBook.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedOrderBook.cs @@ -7,6 +7,10 @@ namespace CryptoExchange.Net.SharedApis /// public record SharedOrderBook { + /// + /// The quantity notation the order book is in, either BaseAsset or Contract + /// + public SharedQuantityType QuantityType { get; set; } /// /// Asks list /// @@ -19,8 +23,9 @@ namespace CryptoExchange.Net.SharedApis /// /// ctor /// - public SharedOrderBook(ISymbolOrderBookEntry[] asks, ISymbolOrderBookEntry[] bids) + public SharedOrderBook(SharedQuantityType quantityType, ISymbolOrderBookEntry[] asks, ISymbolOrderBookEntry[] bids) { + QuantityType = quantityType; Asks = asks; Bids = bids; } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedPosition.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedPosition.cs index 29588d27..b6406c6f 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedPosition.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedPosition.cs @@ -16,7 +16,12 @@ namespace CryptoExchange.Net.SharedApis /// /// Current size of the position /// - public decimal PositionSize { get; set; } + [Obsolete("Use `PositionSizes` instead")] + public decimal PositionSize => PositionSizes.QuantityInContracts ?? PositionSizes.QuantityInBaseAsset ?? 0; + /// + /// Current size of the position + /// + public SharedOrderQuantity PositionSizes { get; set; } /// /// Side of the position /// @@ -57,10 +62,10 @@ namespace CryptoExchange.Net.SharedApis /// /// ctor /// - public SharedPosition(SharedSymbol? sharedSymbol, string symbol, decimal positionSize, DateTime? updateTime) + public SharedPosition(SharedSymbol? sharedSymbol, string symbol, SharedOrderQuantity positionSize, DateTime? updateTime) : base(sharedSymbol, symbol) { - PositionSize = positionSize; + PositionSizes = positionSize; UpdateTime = updateTime; } } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedPositionHistory.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedPositionHistory.cs index 94b8ccf5..cebb3f67 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedPositionHistory.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedPositionHistory.cs @@ -24,7 +24,12 @@ namespace CryptoExchange.Net.SharedApis /// /// Position size /// - public decimal Quantity { get; set; } + [Obsolete("Use `Quantities` instead")] + public decimal Quantity => Quantities.QuantityInContracts ?? Quantities .QuantityInBaseAsset ?? 0; + /// + /// Position size + /// + public SharedOrderQuantity Quantities { get; set; } /// /// Realized profit/loss /// @@ -55,7 +60,7 @@ namespace CryptoExchange.Net.SharedApis SharedPositionSide side, decimal openPrice, decimal closePrice, - decimal quantity, + SharedOrderQuantity quantity, decimal realizedPnl, DateTime timestamp) : base(sharedSymbol, symbol) @@ -63,7 +68,7 @@ namespace CryptoExchange.Net.SharedApis PositionSide = side; AverageOpenPrice = openPrice; AverageClosePrice = closePrice; - Quantity = quantity; + Quantities = quantity; RealizedPnl = realizedPnl; Timestamp = timestamp; } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedTrade.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedTrade.cs index 162e7360..47f5c4e8 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedTrade.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedTrade.cs @@ -36,7 +36,7 @@ namespace CryptoExchange.Net.SharedApis /// public SharedTrade(SharedSymbol? sharedSymbol, string symbol, SharedOrderQuantity quantities, decimal price, DateTime timestamp) : base(sharedSymbol, symbol) { - Quantities = quantities; + Quantities = quantities.WithCalculatedQuantities(price, null); Price = price; Timestamp = timestamp; } diff --git a/CryptoExchange.Net/SharedApis/ResponseModels/SharedUserTrade.cs b/CryptoExchange.Net/SharedApis/ResponseModels/SharedUserTrade.cs index 86ed621e..1032db8d 100644 --- a/CryptoExchange.Net/SharedApis/ResponseModels/SharedUserTrade.cs +++ b/CryptoExchange.Net/SharedApis/ResponseModels/SharedUserTrade.cs @@ -16,7 +16,13 @@ namespace CryptoExchange.Net.SharedApis /// /// Traded quantity /// - public decimal Quantity { get; set; } + [Obsolete("Use `Quantities` instead")] + public decimal Quantity => Quantities.QuantityInBaseAsset ?? Quantities.QuantityInQuoteAsset ?? 0; + /// + /// Traded quantity + /// + public SharedOrderQuantity Quantities { get; set; } + /// /// Trade price /// @@ -53,14 +59,14 @@ namespace CryptoExchange.Net.SharedApis /// /// ctor /// - public SharedUserTrade(SharedSymbol? sharedSymbol, string symbol, string orderId, string id, SharedOrderSide? side, decimal quantity, decimal price, DateTime timestamp) + public SharedUserTrade(SharedSymbol? sharedSymbol, string symbol, string orderId, string id, SharedOrderSide? side, SharedOrderQuantity quantity, decimal price, DateTime timestamp) : base(sharedSymbol, symbol) { Symbol = symbol; OrderId = orderId; Id = id; Side = side; - Quantity = quantity; + Quantities = quantity.WithCalculatedQuantities(price, null); Price = price; Timestamp = timestamp; }