доработка кеша3
parent
ffc21531b5
commit
06cf8ddc19
|
@ -72,10 +72,11 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
return ValueTask.CompletedTask;
|
||||
}
|
||||
|
||||
public ValueTask<ITradeDataItem[]> GetData(TimeSpan? period = null, string? key = null)
|
||||
public ValueTask<ITradeDataItem[]> GetData(TimeSpan? period = null, string? key = null, Func<ITradeDataItem, bool>? selector = null)
|
||||
{
|
||||
key = key ?? string.Empty;
|
||||
var res = new List<ITradeDataItem>();
|
||||
selector = selector ?? defaultSelector;
|
||||
lock (_locker)
|
||||
{
|
||||
if (_items.TryGetValue(key, out var list) && list.First != null && list.Last != null)
|
||||
|
@ -85,7 +86,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
{
|
||||
foreach (var item in list)
|
||||
{
|
||||
if (startTime - item.Time < period.Value)
|
||||
if (startTime - item.Time < period.Value && selector(item))
|
||||
{
|
||||
res.Add(item);
|
||||
}
|
||||
|
@ -93,7 +94,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
}
|
||||
else
|
||||
{
|
||||
return ValueTask.FromResult(list.Reverse().ToArray());
|
||||
return ValueTask.FromResult(list.Where(selector).Reverse().ToArray());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -102,11 +103,12 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
return ValueTask.FromResult(res.ToArray());
|
||||
}
|
||||
|
||||
public ValueTask<ITradeDataItem[]> GetData(TimeSpan shift, TimeSpan period, string? key = null)
|
||||
public ValueTask<ITradeDataItem[]> GetData(TimeSpan shift, TimeSpan period, string? key = null, Func<ITradeDataItem, bool>? selector = null)
|
||||
{
|
||||
key = key ?? string.Empty;
|
||||
var res = new List<ITradeDataItem>();
|
||||
var maxPeriod = shift + period;
|
||||
selector = selector ?? defaultSelector;
|
||||
lock (_locker)
|
||||
{
|
||||
if (_items.TryGetValue(key, out var list) && list.First != null && list.Last != null)
|
||||
|
@ -116,7 +118,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
foreach (var item in list)
|
||||
{
|
||||
var dt = startTime - item.Time;
|
||||
if (dt > shift && dt < maxPeriod)
|
||||
if (dt > shift && dt < maxPeriod && selector(item))
|
||||
{
|
||||
res.Add(item);
|
||||
}
|
||||
|
@ -146,5 +148,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Services.Cache
|
|||
AddData(pc).AsTask().Wait();
|
||||
}
|
||||
}
|
||||
|
||||
private static bool defaultSelector(ITradeDataItem item) => true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,8 @@ namespace KLHZ.Trader.Core.Tests
|
|||
Ticker = figi + "_ticker",
|
||||
Id = i,
|
||||
Time = startDt,
|
||||
Price = (decimal)(i + 0.5)
|
||||
Price = (decimal)(i + 0.5),
|
||||
Value = i % 2 == 0 ? i : 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -152,5 +153,39 @@ namespace KLHZ.Trader.Core.Tests
|
|||
Assert.That(dt <= TimeSpan.FromMinutes(3));
|
||||
Assert.That(dt > TimeSpan.Zero);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Test9()
|
||||
{
|
||||
var count = 60 * 60 * 3 * 24 + 10;
|
||||
var figi = "figi";
|
||||
var hist = GetHistory(count, figi);
|
||||
var cacheUnit = new PriceHistoryCacheUnit3(figi);
|
||||
|
||||
for (int i = 0; i < hist.Length - 1; i++)
|
||||
{
|
||||
cacheUnit.AddData(hist[i], "kkk");
|
||||
}
|
||||
var data = cacheUnit.GetData(TimeSpan.FromMinutes(4), TimeSpan.FromMinutes(3), key: "kkk", (i) => i.Value != 0).Result;
|
||||
|
||||
Assert.That(data.All(d => d.Value != 0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Test10()
|
||||
{
|
||||
var count = 60 * 60 * 3 * 24 + 10;
|
||||
var figi = "figi";
|
||||
var hist = GetHistory(count, figi);
|
||||
var cacheUnit = new PriceHistoryCacheUnit3(figi);
|
||||
|
||||
for (int i = 0; i < hist.Length - 1; i++)
|
||||
{
|
||||
cacheUnit.AddData(hist[i], "kkk");
|
||||
}
|
||||
var data = cacheUnit.GetData(selector: (i) => i.Value != 0).Result;
|
||||
|
||||
Assert.That(data.All(d => d.Value != 0));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue