фиксация
parent
bfa3ef6605
commit
03b0f5582e
|
@ -4,5 +4,6 @@
|
|||
{
|
||||
public DateTime Time { get; init; }
|
||||
public decimal Value { get; init; }
|
||||
public decimal Value2 { get; init; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
|||
return values.Sum(x => x.Value)/ values.Length;
|
||||
}
|
||||
|
||||
public static decimal Mean2(this CachedValue[] values)
|
||||
{
|
||||
return values.Sum(x => x.Value2) / values.Length;
|
||||
}
|
||||
private static (decimal mean, decimal std) CaclSigma(decimal[] values)
|
||||
{
|
||||
var mean = values.Sum() / values.Length;
|
||||
|
|
|
@ -40,6 +40,9 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
private readonly ConcurrentDictionary<string, TradingMode> TradingModes = new();
|
||||
private readonly ConcurrentDictionary<string, IOrderbook> OrderBooks = new();
|
||||
|
||||
private readonly ConcurrentDictionary<string, (DateTime, decimal)> volumes = new();
|
||||
private readonly ConcurrentDictionary<string, (DateTime, decimal)> prices = new();
|
||||
|
||||
private readonly ConcurrentDictionary<string, DateTime> LongOpeningStops = new();
|
||||
private readonly ConcurrentDictionary<string, DateTime> ShortOpeningStops = new();
|
||||
private readonly ConcurrentDictionary<string, DateTime> LongClosingStops = new();
|
||||
|
@ -365,28 +368,36 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
|
||||
#region Подсчёт торгового баланса по сберу и IMOEXF
|
||||
if (message.Figi == "BBG004730N88" || message.Figi == "FUTIMOEXF000")
|
||||
{
|
||||
{
|
||||
if (message.Direction == 1)
|
||||
{
|
||||
|
||||
|
||||
await _tradeDataProvider.AddDataTo20SecondsWindowCache(message.Figi, "1", new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = message.Count
|
||||
Value = message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
|
||||
await _tradeDataProvider.AddDataTo5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
|
||||
await _tradeDataProvider.AddDataTo15MinuteWindowCache(message.Figi, Constants._15minBuyCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
await _tradeDataProvider.AddDataTo1MinuteWindowCache(message.Figi, Constants._1minBuyCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
}
|
||||
if (message.Direction == 2)
|
||||
|
@ -394,25 +405,34 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
await _tradeDataProvider.AddDataTo5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
await _tradeDataProvider.AddDataTo15MinuteWindowCache(message.Figi, Constants._15minSellCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
await _tradeDataProvider.AddDataTo1MinuteWindowCache(message.Figi, Constants._1minSellCacheKey, new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = (decimal)message.Count
|
||||
Value = (decimal)message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
await _tradeDataProvider.AddDataTo20SecondsWindowCache(message.Figi, "2", new Contracts.Declisions.Dtos.CachedValue()
|
||||
{
|
||||
Time = message.Time,
|
||||
Value = message.Count
|
||||
Value = message.Count,
|
||||
Value2 = message.Value,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//var buys = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "1");
|
||||
//var sells = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "2");
|
||||
|
||||
|
@ -478,6 +498,33 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
var currentTime = message.IsHistoricalData ? message.Time : DateTime.UtcNow;
|
||||
try
|
||||
{
|
||||
var buys = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minBuyCacheKey);
|
||||
var sells = await _tradeDataProvider.GetDataFrom5MinuteWindowCache(message.Figi, Constants._5minSellCacheKey);
|
||||
if (buys.Any() && sells.Any())
|
||||
{
|
||||
var shiftTimeB2 = buys.Last().Time - TimeSpan.FromSeconds(150);
|
||||
var shiftTimeS2 = sells.Last().Time - TimeSpan.FromSeconds(150);
|
||||
var shiftTimeB1 = buys.Last().Time - TimeSpan.FromSeconds(300);
|
||||
var shiftTimeS1 = sells.Last().Time - TimeSpan.FromSeconds(300);
|
||||
var buysOld = buys.Where(b => b.Time < shiftTimeB2 && b.Time >= shiftTimeB1).ToArray();
|
||||
var sellsOld = sells.Where(b => b.Time < shiftTimeS2 && b.Time >= shiftTimeS1).ToArray();
|
||||
|
||||
var buysNew = buys.Where(b => b.Time >= shiftTimeB2).ToArray();
|
||||
var sellsNew = sells.Where(b => b.Time >= shiftTimeS2).ToArray();
|
||||
|
||||
|
||||
if (buysOld.Any() && sellsOld.Any() && sellsNew.Any() && buysNew.Any())
|
||||
{
|
||||
var volume = buysNew.Sum(b => b.Value) + sellsNew.Sum(b => b.Value);
|
||||
var volumeOld = buysOld.Sum(b => b.Value) + sellsOld.Sum(b => b.Value);
|
||||
var price = buysNew.Mean2();
|
||||
var priceOld = buysOld.Mean2();
|
||||
|
||||
await LogPrice(message, "tradevolume", volume);
|
||||
await LogPrice(message, "privcesDiff", price- priceOld);
|
||||
await LogPrice(message, "tradevolume_diff", volume - volumeOld);
|
||||
}
|
||||
}
|
||||
if (timesCache.TryGetValue(message.Figi, out var dt))
|
||||
{
|
||||
if ((message.Time - dt).TotalSeconds > 10)
|
||||
|
@ -617,6 +664,8 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
Value = diff5min,
|
||||
});
|
||||
await LogPrice(message, "speed_diff_15min", diff5min);
|
||||
|
||||
|
||||
var orderBook = _tradeDataProvider.Orderbooks[message.Figi];
|
||||
if (orderBook.Asks.Length > 3 && orderBook.Bids.Length > 3)
|
||||
{
|
||||
|
@ -643,6 +692,8 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
await LogPrice(message, "changemode", changeModIndicator);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var sells20 = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "2");
|
||||
//var buys20 = await _tradeDataProvider.GetDataFrom20SecondsWindowCache(message.Figi, "1");
|
||||
|
||||
|
@ -700,6 +751,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
if (cached[cached.Length-1].Time - cached[0].Time > TimeSpan.FromMinutes(3.5))
|
||||
{
|
||||
diff2 = cached[cached.Length - 1].Value - cached[0].Value;
|
||||
await LogPrice(message, "changemode2", diff2.Value);
|
||||
}
|
||||
}
|
||||
if (diff5min < -0.2m || (diff2.HasValue && diff2<-0.3m))
|
||||
|
@ -877,13 +929,13 @@ INewPrice message, int windowMaxSize, decimal? uptrendStartingDetectionMeanfullS
|
|||
//var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, -2m, 2m,3);
|
||||
var resTask1 = GetWindowAverageStartData(data, (int)windows.smallWindow, (int)windows.bigWindow, message, windowMaxSize, steps.downtrendEndStep, steps.uptrendEndStep);
|
||||
////var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
|
||||
var getFFTModsTask = GetFFTMods(message);
|
||||
//var getFFTModsTask = GetFFTMods(message);
|
||||
//var getLocalTrendsModsTask = GetLocalTrendsMods(data, message);
|
||||
//var getSellsDiffsModsTask = GetSellsDiffsMods(message);
|
||||
var getTradingModeModsTask = GetTradingModeMods(message);
|
||||
//var getTradingModeModsTask = GetTradingModeMods(message);
|
||||
var getSpeedResultantModsTask = GetSpeedResultantMods(message);
|
||||
|
||||
await Task.WhenAll(resTask1, getFFTModsTask, getTradingModeModsTask, getSpeedResultantModsTask);
|
||||
await Task.WhenAll(resTask1, getSpeedResultantModsTask);
|
||||
//var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi);
|
||||
//if (resTask1.Result[TradingEvent.UptrendStart] >= 1)
|
||||
//{
|
||||
|
@ -898,7 +950,7 @@ INewPrice message, int windowMaxSize, decimal? uptrendStartingDetectionMeanfullS
|
|||
// result = MergeResultsMax(result, getLocalTrendsModsTask.Result);
|
||||
//result = MergeResultsMult(result, getFFTModsTask.Result);
|
||||
//result = MergeResultsMult(result, getSellsDiffsModsTask.Result);
|
||||
result = MergeResultsMult(result, getTradingModeModsTask.Result);
|
||||
//result = MergeResultsMult(result, getTradingModeModsTask.Result);
|
||||
//result = MergeResultsMult(result, getSpeedResultantModsTask.Result);
|
||||
|
||||
if (result[TradingEvent.UptrendStart] >= Constants.UppingCoefficient
|
||||
|
|
Loading…
Reference in New Issue