From ae5ec23fd662309f294cef3b62e7b3c4113a778c Mon Sep 17 00:00:00 2001 From: Victor Lee Date: Tue, 19 Oct 2021 14:20:43 -0700 Subject: [PATCH] add ExchangeOrderResult.UpdateSequence - sequence that the order update was sent from the server, usually used to keep updates in order or for debugging purposes --- .../BinanceGroup/Models/UserDataStream.cs | 1 + .../Coinbase/Models/Response/Messages.cs | 18 +++++++++++------- src/ExchangeSharp/Model/ExchangeOrderResult.cs | 6 ++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/ExchangeSharp/API/Exchanges/BinanceGroup/Models/UserDataStream.cs b/src/ExchangeSharp/API/Exchanges/BinanceGroup/Models/UserDataStream.cs index c23c19a4..d4f2a440 100644 --- a/src/ExchangeSharp/API/Exchanges/BinanceGroup/Models/UserDataStream.cs +++ b/src/ExchangeSharp/API/Exchanges/BinanceGroup/Models/UserDataStream.cs @@ -94,6 +94,7 @@ public ExchangeOrderResult ExchangeOrderResult OrderDate = CryptoUtility.UnixTimeStampToDateTimeMilliseconds(OrderCreationTime), CompletedDate = status.IsCompleted() ? (DateTime?)CryptoUtility.UnixTimeStampToDateTimeMilliseconds(TransactionTime) : null, TradeDate = CryptoUtility.UnixTimeStampToDateTimeMilliseconds(TransactionTime), + UpdateSequence = EventTime, // in Binance, the sequence nymber is also the EventTime MarketSymbol = Symbol, // IsBuy is not provided here Fees = CommissionAmount, diff --git a/src/ExchangeSharp/API/Exchanges/Coinbase/Models/Response/Messages.cs b/src/ExchangeSharp/API/Exchanges/Coinbase/Models/Response/Messages.cs index 5e43f04f..c4b5d940 100644 --- a/src/ExchangeSharp/API/Exchanges/Coinbase/Models/Response/Messages.cs +++ b/src/ExchangeSharp/API/Exchanges/Coinbase/Models/Response/Messages.cs @@ -22,8 +22,6 @@ internal class BaseMessage internal class Activate : BaseMessage { - private ExchangeOrderResult exchangeOrderResult; - public Guid OrderId { get; set; } public StopType OrderType { get; set; } public decimal Size { get; set; } @@ -52,7 +50,8 @@ internal class Activate : BaseMessage MarketSymbol = ProductId, IsBuy = Side == OrderSide.Buy, Fees = null, // only TakerFeeRate is specified - no fees have been charged yet - TradeId = null // no trades have been made + TradeId = null, // no trades have been made + UpdateSequence = null, // unfortunately, the Activate event doesn't provide a sequence number }; } @@ -84,7 +83,8 @@ internal class Change : BaseMessage MarketSymbol = ProductId, IsBuy = Side == OrderSide.Buy, Fees = null, // only TakerFeeRate is specified - no fees have been charged yet - TradeId = null // not a trade msg + TradeId = null, // not a trade msg + UpdateSequence = Sequence, }; } @@ -116,7 +116,8 @@ internal class Done : BaseMessage MarketSymbol = ProductId, IsBuy = Side == OrderSide.Buy, Fees = null, // not specified here - TradeId = null // not a trade msg + TradeId = null, // not a trade msg + UpdateSequence = Sequence, }; } @@ -189,6 +190,7 @@ internal class Match : BaseMessage IsBuy = Side == OrderSide.Buy, Fees = (MakerFeeRate ?? TakerFeeRate) * Price * Size, TradeId = TradeId.ToString(), + UpdateSequence = Sequence, }; } @@ -218,7 +220,8 @@ internal class Open : BaseMessage MarketSymbol = ProductId, IsBuy = Side == OrderSide.Buy, Fees = null, // not specified here - TradeId = null // not a trade msg + TradeId = null, // not a trade msg + UpdateSequence = Sequence, }; } @@ -250,7 +253,8 @@ internal class Received : BaseMessage MarketSymbol = ProductId, IsBuy = Side == OrderSide.Buy, Fees = null, // not specified here - TradeId = null // not a trade msg + TradeId = null, // not a trade msg + UpdateSequence = Sequence, }; } diff --git a/src/ExchangeSharp/Model/ExchangeOrderResult.cs b/src/ExchangeSharp/Model/ExchangeOrderResult.cs index 6221eaa4..b8e0042d 100644 --- a/src/ExchangeSharp/Model/ExchangeOrderResult.cs +++ b/src/ExchangeSharp/Model/ExchangeOrderResult.cs @@ -91,6 +91,12 @@ public sealed class ExchangeOrderResult /// datetime in UTC of the trade. Null if not a trade. public DateTime? TradeDate { get; set; } + /// + /// sequence that the order update was sent from the server, usually used to keep updates in order or for debugging purposes. + /// Not all exchanges provide this value, so it may be null. + /// + public long? UpdateSequence { get; set; } + /// Append another order to this order - order id and type must match /// Order to append public void AppendOrderWithOrder(ExchangeOrderResult other)