diff --git a/KLHZ.Trader.Core.Math/Declisions/Utils/MovingAverage.cs b/KLHZ.Trader.Core.Math/Declisions/Utils/MovingAverage.cs index 575c746..f879766 100644 --- a/KLHZ.Trader.Core.Math/Declisions/Utils/MovingAverage.cs +++ b/KLHZ.Trader.Core.Math/Declisions/Utils/MovingAverage.cs @@ -10,8 +10,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils var sum = values[values.Length - 1 - shift]; var count = 1m; var startTime = timestamps[timestamps.Length - 1 - shift]; - for (int i = 2; i < values.Length && startTime - timestamps[values.Length - i - shift] < TimeSpan.FromSeconds(window); i++) + for (int i = 2; i + shift < values.Length + && startTime - timestamps[values.Length - i - shift] < TimeSpan.FromSeconds(window); i++) { + var k = values.Length - i - shift; sum += values[values.Length - i - shift]; count++; } @@ -23,27 +25,31 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils var res = TradingEvent.None; var bigWindowAv = 0m; var smallWindowAv = 0m; - + var s = 0; try { var pricesForFinalComparison = new decimal[size]; var twavss = new decimal[size]; var twavbs = new decimal[size]; var times = new DateTime[size]; - - for (int shift = 0; shift < size; shift++) + + for (int shift = 0; shift < size-1 && shift < prices.Length -1; shift++) { + s = shift; + var i2 = size - 1 - shift; + var i1 = size - 2 - shift; + var twavs = CalcTimeWindowAverageValue(timestamps, prices, smallWindow, shift); var twavb = CalcTimeWindowAverageValue(timestamps, prices, bigWindow, shift); - pricesForFinalComparison[size - 1 - shift] = prices[prices.Length - 1 - shift]; + pricesForFinalComparison[i2] = prices[prices.Length - 1 - shift]; if (shift == 0) { bigWindowAv = twavb.value; smallWindowAv = twavs.value; } - twavss[size - 1 - shift] = twavs.value; - twavbs[size - 1 - shift] = twavb.value; - times[size - 1 - shift] = twavb.time; + twavss[i2] = twavs.value; + twavbs[i2] = twavb.value; + times[i2] = twavb.time; if (System.Math.Abs(twavb.value - prices[prices.Length - 1]) > 2 * meanfullStep) { res |= TradingEvent.StopBuy; @@ -51,15 +57,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils } if (shift > 0) { - var i1 = size - 1 - shift; - var i2 = size - shift; var isCrossing = Lines.IsLinesCrossing( - times[i1], - times[i2], - twavss[i1], - twavss[i2], - twavbs[i1], - twavbs[i2]); + times[i1 + 1], + times[i2 + 1], + twavss[i1 + 1], + twavss[i2 + 1], + twavbs[i1 + 1], + twavbs[i2 + 1]); if (shift == 1 && !isCrossing) //если нет пересечения скользящих средний с окном 120 и 15 секунд между //текущей и предыдущей точкой - можно не продолжать выполнение. @@ -71,7 +75,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils // если фильтрация окном 120 наползает на окно 15 сверху, потенциальное время открытия лонга и закрытия шорта if (twavbs[size - 1] <= twavss[size - 1] && twavbs[size - 2] > twavss[size - 2]) { - if (pricesForFinalComparison[size - 1 - shift] - pricesForFinalComparison[size - 1] >= meanfullStep) + if (pricesForFinalComparison[i2+1] - pricesForFinalComparison[size - 1] >= meanfullStep) { res |= TradingEvent.LongOpen; res |= TradingEvent.ShortClose; @@ -82,7 +86,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils // если фильтрация окном 15 наползает на окно 120 сверху, потенциальное время закрытия лонга и возможно открытия шорта if (twavss[size - 1] <= twavbs[size - 1] && twavss[size - 2] > twavbs[size - 2]) { - if (pricesForFinalComparison[size - 1 - shift] - pricesForFinalComparison[size - 1] <= -meanfullStep) + if (pricesForFinalComparison[i2+1] - pricesForFinalComparison[size - 1] <= -meanfullStep) { res |= TradingEvent.LongClose; res |= TradingEvent.ShortOpen; diff --git a/KLHZ.Trader.Core/Exchange/Services/Trader.cs b/KLHZ.Trader.Core/Exchange/Services/Trader.cs index c529ef9..dc79c6f 100644 --- a/KLHZ.Trader.Core/Exchange/Services/Trader.cs +++ b/KLHZ.Trader.Core/Exchange/Services/Trader.cs @@ -134,15 +134,9 @@ namespace KLHZ.Trader.Core.Exchange.Services } try { - var data = await unit.GetData(); - if (message.Figi == "FUTIMOEXF000") { - if (unit.Length < 100) - { - continue; - } - + var data = await unit.GetData(); if (BuyStops.TryGetValue(message.Figi, out var dt)) { if (dt > (message.IsHistoricalData ? message.Time : DateTime.UtcNow)) @@ -285,14 +279,9 @@ namespace KLHZ.Trader.Core.Exchange.Services } catch (Exception ex) { - + _logger.LogError(ex, "Ошибка при боработке новой цены IMOEXF"); } } - - if (_pricesChannel.Reader.Count == 0) - { - - } } }