From 62de4169b8196b21e234f94601f21dd3945aab41 Mon Sep 17 00:00:00 2001 From: vlad zverzhkhovskiy Date: Tue, 2 Sep 2025 14:43:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=BA=D1=80=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BC=20=D0=B8=D0=BD=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BA=D0=B0=D0=BD=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interfaces/IPriceHistoryCacheUnit.cs | 4 +- .../Messaging/Dtos/Interfaces/IOrderbook.cs | 4 +- .../Dtos/Interfaces/IOrderbookItem.cs | 2 +- .../Messaging/Dtos/NewOrderbookMessage.cs | 4 +- .../Services/Cache/PriceHistoryCacheUnit.cs | 4 +- .../Services/Cache/PriceHistoryCacheUnit2.cs | 20 +++--- .../Entities/Orders/OrderbookItem.cs | 2 +- .../Exchange/Services/ExchangeDataReader.cs | 62 +++++++------------ 8 files changed, 43 insertions(+), 59 deletions(-) diff --git a/KLHZ.Trader.Core.Contracts/Declisions/Interfaces/IPriceHistoryCacheUnit.cs b/KLHZ.Trader.Core.Contracts/Declisions/Interfaces/IPriceHistoryCacheUnit.cs index 5ba349d..ad6232c 100644 --- a/KLHZ.Trader.Core.Contracts/Declisions/Interfaces/IPriceHistoryCacheUnit.cs +++ b/KLHZ.Trader.Core.Contracts/Declisions/Interfaces/IPriceHistoryCacheUnit.cs @@ -9,7 +9,7 @@ namespace KLHZ.Trader.Core.Contracts.Declisions.Interfaces public ValueTask AddData(INewPrice priceChange); public ValueTask<(DateTime[] timestamps, float[] prices)> GetData(); public ValueTask AddOrderbook(IOrderbook orderbook); - public int AsksCount { get; } - public int BidsCount { get; } + public long AsksCount { get; } + public long BidsCount { get; } } } diff --git a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbook.cs b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbook.cs index d83e9c0..0e6c591 100644 --- a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbook.cs +++ b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbook.cs @@ -4,8 +4,8 @@ { public string Ticker { get; } public string Figi { get; } - public int AsksCount {get;} - public int BidsCount {get;} + public long AsksCount { get; } + public long BidsCount { get; } public DateTime Time { get; } public IOrderbookItem[] Asks { get; } public IOrderbookItem[] Bids { get; } diff --git a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbookItem.cs b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbookItem.cs index 7b763ea..e194926 100644 --- a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbookItem.cs +++ b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/Interfaces/IOrderbookItem.cs @@ -2,7 +2,7 @@ { public interface IOrderbookItem { - public decimal Count { get; } + public long Count { get; } public decimal Price { get; } } } diff --git a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/NewOrderbookMessage.cs b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/NewOrderbookMessage.cs index e3fac91..bc9e31a 100644 --- a/KLHZ.Trader.Core.Contracts/Messaging/Dtos/NewOrderbookMessage.cs +++ b/KLHZ.Trader.Core.Contracts/Messaging/Dtos/NewOrderbookMessage.cs @@ -9,7 +9,7 @@ namespace KLHZ.Trader.Core.Contracts.Messaging.Dtos public DateTime Time { get; init; } public IOrderbookItem[] Asks { get; init; } = []; public IOrderbookItem[] Bids { get; init; } = []; - public int AsksCount { get; init; } - public int BidsCount { get; init; } + public long AsksCount { get; init; } + public long BidsCount { get; init; } } } diff --git a/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit.cs b/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit.cs index c1c2550..aa801ba 100644 --- a/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit.cs +++ b/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit.cs @@ -20,8 +20,8 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache } } - public int AsksCount => 1; - public int BidsCount => 1; + public long AsksCount => 1; + public long BidsCount => 1; private readonly object _locker = new(); private readonly float[] Prices = new float[CacheMaxLength]; diff --git a/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit2.cs b/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit2.cs index a48dc0c..9023d77 100644 --- a/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit2.cs +++ b/KLHZ.Trader.Core.Math/Declisions/Services/Cache/PriceHistoryCacheUnit2.cs @@ -21,18 +21,18 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache } } - public int AsksCount - { - get + public long AsksCount + { + get + { + lock (_locker) { - lock (_locker) - { - return _asksCount; - } + return _asksCount; } } + } - public int BidsCount + public long BidsCount { get { @@ -50,8 +50,8 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache private int _length = 0; private int _pointer = -1; - private int _asksCount = 1; - private int _bidsCount = 1; + private long _asksCount = 1; + private long _bidsCount = 1; public ValueTask AddData(INewPrice priceChange) { diff --git a/KLHZ.Trader.Core/DataLayer/Entities/Orders/OrderbookItem.cs b/KLHZ.Trader.Core/DataLayer/Entities/Orders/OrderbookItem.cs index b1b024f..a69d3ec 100644 --- a/KLHZ.Trader.Core/DataLayer/Entities/Orders/OrderbookItem.cs +++ b/KLHZ.Trader.Core/DataLayer/Entities/Orders/OrderbookItem.cs @@ -17,7 +17,7 @@ namespace KLHZ.Trader.Core.DataLayer.Entities.Orders public decimal Price { get; set; } [Column("count")] - public decimal Count { get; set; } + public long Count { get; set; } [Column("figi")] public required string Figi { get; set; } diff --git a/KLHZ.Trader.Core/Exchange/Services/ExchangeDataReader.cs b/KLHZ.Trader.Core/Exchange/Services/ExchangeDataReader.cs index c52246d..526d71d 100644 --- a/KLHZ.Trader.Core/Exchange/Services/ExchangeDataReader.cs +++ b/KLHZ.Trader.Core/Exchange/Services/ExchangeDataReader.cs @@ -109,17 +109,17 @@ namespace KLHZ.Trader.Core.Exchange.Services foreach (var f in _instrumentsFigis) { - //request.Instruments.Add( - // new LastPriceInstrument() - // { - // InstrumentId = f - // }); + request.Instruments.Add( + new LastPriceInstrument() + { + InstrumentId = f + }); - //tradesRequest.Instruments.Add( - // new TradeInstrument() - // { - // InstrumentId = f - // }); + tradesRequest.Instruments.Add( + new TradeInstrument() + { + InstrumentId = f + }); bookRequest.Instruments.Add( new OrderBookInstrument() @@ -176,51 +176,35 @@ namespace KLHZ.Trader.Core.Exchange.Services } if (response.Orderbook != null) { - var asks = response.Orderbook.Asks.Select(a => new OrderbookItem() + var asksSummary = new OrderbookItem() { Figi = response.Orderbook.Figi, Ticker = GetTickerByFigi(response.Orderbook.Figi), - ItemType = DataLayer.Entities.Orders.Enums.OrderbookItemType.Ask, + Count = response.Orderbook.Asks.Sum(a => (int)a.Quantity), + ItemType = DataLayer.Entities.Orders.Enums.OrderbookItemType.AsksSummary, Time = response.Orderbook.Time.ToDateTime().ToUniversalTime(), - Price = a.Price, - Count = a.Quantity, - }).ToArray(); - orderbookItemsBuffer.AddRange(asks); - var bids = response.Orderbook.Bids.Select(a => new OrderbookItem() + }; + + var bidsSummary = new OrderbookItem() { Figi = response.Orderbook.Figi, Ticker = GetTickerByFigi(response.Orderbook.Figi), - ItemType = DataLayer.Entities.Orders.Enums.OrderbookItemType.Bid, - Time = response.Orderbook.Time.ToDateTime().ToUniversalTime(), - Price = a.Price, - Count = a.Quantity, - }).ToArray(); - orderbookItemsBuffer.AddRange(bids); - orderbookItemsBuffer.Add(new OrderbookItem() - { - Figi = response.Orderbook.Figi, - Ticker = GetTickerByFigi(response.Orderbook.Figi), - Count = bids.Sum(a => (int)a.Count), + Count = response.Orderbook.Bids.Sum(a => (int)a.Quantity), ItemType = DataLayer.Entities.Orders.Enums.OrderbookItemType.BidsSummary, Time = response.Orderbook.Time.ToDateTime().ToUniversalTime(), - }); + }; + + orderbookItemsBuffer.Add(asksSummary); + orderbookItemsBuffer.Add(bidsSummary); var message = new NewOrderbookMessage() { Ticker = GetTickerByFigi(response.Orderbook.Figi), Figi = response.Orderbook.Figi, Time = response.Orderbook.Time.ToDateTime().ToUniversalTime(), - Asks = asks, - Bids = bids, + AsksCount = asksSummary.Count, + BidsCount = bidsSummary.Count, }; - orderbookItemsBuffer.Add(new OrderbookItem() - { - Figi = response.Orderbook.Figi, - Ticker = GetTickerByFigi(response.Orderbook.Figi), - Count = asks.Sum(a => (int)a.Count), - ItemType = DataLayer.Entities.Orders.Enums.OrderbookItemType.AsksSummary, - Time = response.Orderbook.Time.ToDateTime().ToUniversalTime(), - }); await _eventBus.Broadcast(message); }