using System; using System.Diagnostics; namespace CryptoExchange.Net.SharedApis { /// /// Spot order info /// [DebuggerDisplay("{DebugView,nq}")] public record SharedSpotOrder : SharedSymbolModel { private string DebugView => $"[{CreateTime}] {OrderId} {Symbol} - " + $"{OrderType} {Side} {OrderQuantity}{(OrderPrice != null ? " @ " + OrderPrice : "")}, " + $"{Status}{(QuantityFilled != null && Status != SharedOrderStatus.Canceled ? $" {QuantityFilled}" : "")}{(AveragePrice != null ? " @ " + AveragePrice : "")}"; /// /// The id of the order /// public string OrderId { get; set; } /// /// The type of the order /// public SharedOrderType OrderType { get; set; } /// /// The side of the order /// public SharedOrderSide Side { get; set; } /// /// Status of the order /// public SharedOrderStatus Status { get; set; } /// /// Time in force for the order /// public SharedTimeInForce? TimeInForce { get; set; } /// /// Order quantity /// public SharedOrderQuantity? OrderQuantity { get; set; } /// /// Filled quantity /// public SharedOrderQuantity? QuantityFilled { get; set; } /// /// Order price /// public decimal? OrderPrice { get; set; } private decimal? _averagePrice; /// /// Average fill price /// public decimal? AveragePrice { get => _averagePrice > 0 ? _averagePrice : (QuantityFilled?.QuantityInBaseAsset > 0 && QuantityFilled?.QuantityInQuoteAsset > 0 ? QuantityFilled.QuantityInQuoteAsset / QuantityFilled.QuantityInBaseAsset : null); set => _averagePrice = value; } /// /// Client order id /// public string? ClientOrderId { get; set; } /// /// Asset the fee is in /// [Obsolete("FeeAsset on order level is deprecated and will be removed in a futures version, use FeeAsset on trade level instead")] public string? FeeAsset { get; set; } /// /// Fee paid for the order /// [Obsolete("Fee on order level is deprecated and will be removed in a futures version, use Fee on trade level instead")] public decimal? Fee { get; set; } /// /// Timestamp the order was created /// public DateTime? CreateTime { get; set; } /// /// Last update timestamp /// public DateTime? UpdateTime { get; set; } /// /// Only available for order updates, contains the info on the executed trade /// [Obsolete("Use SharedSpotOrderUpdate.LastTrade instead, LastTrade is never filled on non websocket updates")] public SharedUserTrade? LastTrade { get; set; } /// /// Trigger price for a trigger order /// public decimal? TriggerPrice { get; set; } /// /// Whether or not the is order is a trigger order /// public bool IsTriggerOrder { get; set; } /// /// ctor /// public SharedSpotOrder( SharedSymbol? sharedSymbol, string symbol, string orderId, SharedOrderType orderType, SharedOrderSide orderSide, SharedOrderStatus orderStatus, DateTime? createTime) : base(sharedSymbol, symbol) { OrderId = orderId; OrderType = orderType; Side = orderSide; Status = orderStatus; CreateTime = createTime; } } }