From 8c8327c905f64ff717d99978151775d3bdb18dfa Mon Sep 17 00:00:00 2001 From: vlad zverzhkhovskiy Date: Mon, 29 Sep 2025 16:23:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B2=D0=BD=D0=BE=D0=B4=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KLHZ.Trader.Core/Exchange/Constants.cs | 2 ++ KLHZ.Trader.Core/Exchange/Services/Trader.cs | 18 ++++++++++++++---- .../Exchange/Services/TraderDataProvider.cs | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/KLHZ.Trader.Core/Exchange/Constants.cs b/KLHZ.Trader.Core/Exchange/Constants.cs index 2b10187..9561705 100644 --- a/KLHZ.Trader.Core/Exchange/Constants.cs +++ b/KLHZ.Trader.Core/Exchange/Constants.cs @@ -3,8 +3,10 @@ internal static class Constants { internal const string _1minCacheKey = "1min"; + internal const string _15minSellCacheKey = "5min_sell"; internal const string _5minSellCacheKey = "5min_sell"; internal const string _5minBuyCacheKey = "5min_buy"; + internal const string _15minBuyCacheKey = "5min_buy"; internal const string _1minSellCacheKey = "1min_sell"; internal const string _1minBuyCacheKey = "1min_buy"; diff --git a/KLHZ.Trader.Core/Exchange/Services/Trader.cs b/KLHZ.Trader.Core/Exchange/Services/Trader.cs index 0090d3e..d597abe 100644 --- a/KLHZ.Trader.Core/Exchange/Services/Trader.cs +++ b/KLHZ.Trader.Core/Exchange/Services/Trader.cs @@ -338,6 +338,11 @@ namespace KLHZ.Trader.Core.Exchange.Services Time = message.Time, Value = (decimal)message.Count }); + await _tradeDataProvider.AddDataTo15MinuteWindowCache(message.Figi, Constants._15minBuyCacheKey, new Contracts.Declisions.Dtos.CachedValue() + { + Time = message.Time, + Value = (decimal)message.Count + }); await _tradeDataProvider.AddDataTo1MinuteWindowCache(message.Figi, Constants._1minBuyCacheKey, new Contracts.Declisions.Dtos.CachedValue() { Time = message.Time, @@ -351,6 +356,11 @@ namespace KLHZ.Trader.Core.Exchange.Services Time = message.Time, Value = (decimal)message.Count }); + await _tradeDataProvider.AddDataTo15MinuteWindowCache(message.Figi, Constants._15minSellCacheKey, new Contracts.Declisions.Dtos.CachedValue() + { + Time = message.Time, + Value = (decimal)message.Count + }); await _tradeDataProvider.AddDataTo1MinuteWindowCache(message.Figi, Constants._1minSellCacheKey, new Contracts.Declisions.Dtos.CachedValue() { Time = message.Time, @@ -531,12 +541,12 @@ namespace KLHZ.Trader.Core.Exchange.Services private async Task> GetSpeedResultantMods(INewPrice message) { var res = GetInitDict(1); - var buys5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey); - var sells5min = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey); + var buys5min = await _tradeDataProvider.GetDataFrom15MinuteWindowCache(message.Figi, Constants._15minBuyCacheKey); + var sells5min = await _tradeDataProvider.GetDataFrom15MinuteWindowCache(message.Figi, Constants._15minSellCacheKey); var buysSpeed5min = buys5min.Sum(p => p.Value) / 300; var sellsSpeed5min = sells5min.Sum(p => p.Value) / 300; var diff5min = buysSpeed5min - sellsSpeed5min; - await LogPrice(message, "speed_diff_5min", diff5min); + await LogPrice(message, "speed_diff_15min", diff5min); if (diff5min < 0) { @@ -967,7 +977,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt } if (mode == TradingMode.SlowDropping && type == PositionType.Short) { - takeProfitShift = 4m; + } if (mode == TradingMode.SlowDropping && type == PositionType.Long) { diff --git a/KLHZ.Trader.Core/Exchange/Services/TraderDataProvider.cs b/KLHZ.Trader.Core/Exchange/Services/TraderDataProvider.cs index 69a437c..eea3fa3 100644 --- a/KLHZ.Trader.Core/Exchange/Services/TraderDataProvider.cs +++ b/KLHZ.Trader.Core/Exchange/Services/TraderDataProvider.cs @@ -146,6 +146,16 @@ namespace KLHZ.Trader.Core.Exchange.Services await _historyCash[figi].AddDataToTimeWindowCache(key, data, TimeWindowCacheType._5_Minutes); } + public async ValueTask AddDataTo15MinuteWindowCache(string figi, string key, CachedValue data) + { + if (!_historyCash.TryGetValue(figi, out var unit)) + { + unit = new PriceHistoryCacheUnit2(figi); + _historyCash.TryAdd(figi, unit); + } + await _historyCash[figi].AddDataToTimeWindowCache(key, data, TimeWindowCacheType._15_Minutes); + } + public ValueTask GetDataFrom20SecondsWindowCache(string figi, string key) { if (_historyCash.TryGetValue(figi, out var cahcheItem)) @@ -173,6 +183,15 @@ namespace KLHZ.Trader.Core.Exchange.Services return ValueTask.FromResult(Array.Empty()); } + public ValueTask GetDataFrom15MinuteWindowCache(string figi, string key) + { + if (_historyCash.TryGetValue(figi, out var cahcheItem)) + { + return cahcheItem.GetDataFromTimeWindowCache(key, TimeWindowCacheType._15_Minutes); + } + return ValueTask.FromResult(Array.Empty()); + } + public async ValueTask AddOrderbook(IOrderbook orderbook) { if (!_historyCash.TryGetValue(orderbook.Figi, out var unit))