Сократил объем информации по стаканам

main
vlad zverzhkhovskiy 2025-09-02 14:43:00 +03:00
parent 45b34b4509
commit 62de4169b8
8 changed files with 43 additions and 59 deletions

View File

@ -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; }
}
}

View File

@ -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; }

View File

@ -2,7 +2,7 @@
{
public interface IOrderbookItem
{
public decimal Count { get; }
public long Count { get; }
public decimal Price { get; }
}
}

View File

@ -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; }
}
}

View File

@ -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];

View File

@ -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)
{

View File

@ -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; }

View File

@ -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);
}