дебаг алгоритма принятия решений
test / deploy_trader_prod (push) Successful in 41s Details

main
vlad zverzhkhovskiy 2025-09-03 15:39:57 +03:00
parent d15281f67e
commit 59c777172e
2 changed files with 24 additions and 31 deletions

View File

@ -10,8 +10,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var sum = values[values.Length - 1 - shift]; var sum = values[values.Length - 1 - shift];
var count = 1m; var count = 1m;
var startTime = timestamps[timestamps.Length - 1 - shift]; 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]; sum += values[values.Length - i - shift];
count++; count++;
} }
@ -23,7 +25,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var res = TradingEvent.None; var res = TradingEvent.None;
var bigWindowAv = 0m; var bigWindowAv = 0m;
var smallWindowAv = 0m; var smallWindowAv = 0m;
var s = 0;
try try
{ {
var pricesForFinalComparison = new decimal[size]; var pricesForFinalComparison = new decimal[size];
@ -31,19 +33,23 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var twavbs = new decimal[size]; var twavbs = new decimal[size];
var times = new DateTime[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 twavs = CalcTimeWindowAverageValue(timestamps, prices, smallWindow, shift);
var twavb = CalcTimeWindowAverageValue(timestamps, prices, bigWindow, 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) if (shift == 0)
{ {
bigWindowAv = twavb.value; bigWindowAv = twavb.value;
smallWindowAv = twavs.value; smallWindowAv = twavs.value;
} }
twavss[size - 1 - shift] = twavs.value; twavss[i2] = twavs.value;
twavbs[size - 1 - shift] = twavb.value; twavbs[i2] = twavb.value;
times[size - 1 - shift] = twavb.time; times[i2] = twavb.time;
if (System.Math.Abs(twavb.value - prices[prices.Length - 1]) > 2 * meanfullStep) if (System.Math.Abs(twavb.value - prices[prices.Length - 1]) > 2 * meanfullStep)
{ {
res |= TradingEvent.StopBuy; res |= TradingEvent.StopBuy;
@ -51,15 +57,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
} }
if (shift > 0) if (shift > 0)
{ {
var i1 = size - 1 - shift;
var i2 = size - shift;
var isCrossing = Lines.IsLinesCrossing( var isCrossing = Lines.IsLinesCrossing(
times[i1], times[i1 + 1],
times[i2], times[i2 + 1],
twavss[i1], twavss[i1 + 1],
twavss[i2], twavss[i2 + 1],
twavbs[i1], twavbs[i1 + 1],
twavbs[i2]); twavbs[i2 + 1]);
if (shift == 1 && !isCrossing) //если нет пересечения скользящих средний с окном 120 и 15 секунд между if (shift == 1 && !isCrossing) //если нет пересечения скользящих средний с окном 120 и 15 секунд между
//текущей и предыдущей точкой - можно не продолжать выполнение. //текущей и предыдущей точкой - можно не продолжать выполнение.
@ -71,7 +75,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
// если фильтрация окном 120 наползает на окно 15 сверху, потенциальное время открытия лонга и закрытия шорта // если фильтрация окном 120 наползает на окно 15 сверху, потенциальное время открытия лонга и закрытия шорта
if (twavbs[size - 1] <= twavss[size - 1] && twavbs[size - 2] > twavss[size - 2]) 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.LongOpen;
res |= TradingEvent.ShortClose; res |= TradingEvent.ShortClose;
@ -82,7 +86,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
// если фильтрация окном 15 наползает на окно 120 сверху, потенциальное время закрытия лонга и возможно открытия шорта // если фильтрация окном 15 наползает на окно 120 сверху, потенциальное время закрытия лонга и возможно открытия шорта
if (twavss[size - 1] <= twavbs[size - 1] && twavss[size - 2] > twavbs[size - 2]) 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.LongClose;
res |= TradingEvent.ShortOpen; res |= TradingEvent.ShortOpen;

View File

@ -134,15 +134,9 @@ namespace KLHZ.Trader.Core.Exchange.Services
} }
try try
{ {
var data = await unit.GetData();
if (message.Figi == "FUTIMOEXF000") if (message.Figi == "FUTIMOEXF000")
{ {
if (unit.Length < 100) var data = await unit.GetData();
{
continue;
}
if (BuyStops.TryGetValue(message.Figi, out var dt)) if (BuyStops.TryGetValue(message.Figi, out var dt))
{ {
if (dt > (message.IsHistoricalData ? message.Time : DateTime.UtcNow)) if (dt > (message.IsHistoricalData ? message.Time : DateTime.UtcNow))
@ -285,14 +279,9 @@ namespace KLHZ.Trader.Core.Exchange.Services
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка при боработке новой цены IMOEXF");
} }
} }
if (_pricesChannel.Reader.Count == 0)
{
}
} }
} }