фиксация
parent
1c3c4f6e97
commit
0aad9297d9
|
@ -15,14 +15,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
|||
{
|
||||
return ValueAmplitudePosition.UpperThen30Decil;
|
||||
}
|
||||
else if (value < fftData.Mediana && System.Math.Sign(value2) >= 0)
|
||||
else if (value < fftData.Mediana)
|
||||
{
|
||||
return ValueAmplitudePosition.LowerThenMedianaGrowing;
|
||||
}
|
||||
else if (value < fftData.Mediana && System.Math.Sign(value2) < 0)
|
||||
{
|
||||
return ValueAmplitudePosition.LowerThenMedianaFalling;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ValueAmplitudePosition.Middle;
|
||||
|
@ -65,7 +61,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
|||
}
|
||||
}
|
||||
|
||||
internal static (DateTime[] timestamps, decimal[] values) TrimValues(DateTime[] timestamps, decimal[] values, TimeSpan period)
|
||||
public static (DateTime[] timestamps, decimal[] values) TrimValues(DateTime[] timestamps, decimal[] values, TimeSpan period)
|
||||
{
|
||||
int i = 0;
|
||||
var lastTime = timestamps[timestamps.Length - 1];
|
||||
|
@ -86,35 +82,35 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
|||
return (resDt, resVs);
|
||||
}
|
||||
|
||||
public static FFTAnalyzeResult GetMainHarmonic(DateTime[] timestamps, decimal[] values, string key, TimeSpan minPeriod, TimeSpan maxPeriod)
|
||||
public static FFTAnalyzeResult GetMainHarmonic(DateTime[] timestamps, decimal[] values, string key, TimeSpan minPeriod)
|
||||
{
|
||||
|
||||
var harmonics = GetHarmonics(values, timestamps[timestamps.Length - 1] - timestamps[0], minPeriod, maxPeriod);
|
||||
var newValues = new decimal[timestamps.Length];
|
||||
var newValues2 = new decimal[timestamps.Length];
|
||||
var startTime = timestamps[0];
|
||||
for (int i = 0; i < timestamps.Length; i++)
|
||||
var startPeriod = timestamps[timestamps.Length - 1] - timestamps[0];
|
||||
var results = new List<(float, Harmonic[], TimeSpan, Harmonic)>();
|
||||
var max = 0f;
|
||||
while (startPeriod> minPeriod)
|
||||
{
|
||||
newValues[i] = (decimal)CalcAmplitude(harmonics, startTime, timestamps[i]);
|
||||
newValues2[i] = (decimal)CalcExtremum(harmonics, startTime, timestamps[i]);
|
||||
var data = TrimValues(timestamps, values, startPeriod);
|
||||
var harmonics = GetHarmonics(values, startPeriod, TimeSpan.FromSeconds(5), startPeriod);
|
||||
var summMagn = harmonics.Sum(h => h.Magnitude);
|
||||
(float, Harmonic[], TimeSpan, Harmonic)? res = null;
|
||||
for (int i=2;i< harmonics.Length; i++)
|
||||
{
|
||||
var currentMagn = harmonics[i].Magnitude / summMagn/ harmonics.Length;
|
||||
if (currentMagn> max)
|
||||
{
|
||||
res = (currentMagn, harmonics, startPeriod, harmonics[i]);
|
||||
}
|
||||
}
|
||||
if (res != null)
|
||||
{
|
||||
results.Add(res.Value);
|
||||
}
|
||||
startPeriod = startPeriod - TimeSpan.FromSeconds(30);
|
||||
}
|
||||
|
||||
newValues = newValues.Order().ToArray();
|
||||
var ma = newValues2.Max();
|
||||
var mi = newValues2.Min();
|
||||
return new FFTAnalyzeResult()
|
||||
{
|
||||
Key = key,
|
||||
Harmonics = harmonics,
|
||||
LastTime = timestamps[timestamps.Length - 1],
|
||||
StartTime = startTime,
|
||||
Mediana = newValues[newValues.Length / 2],
|
||||
Upper30Decil = newValues[(int)(newValues.Length * 0.7)],
|
||||
Lower30Decil = newValues[(int)(newValues.Length * 0.3)],
|
||||
Max = newValues.Max(),
|
||||
Min = newValues.Min(),
|
||||
Length = values.Length,
|
||||
};
|
||||
var t = results.MaxBy(r => r.Item1);
|
||||
|
||||
return FFTAnalyzeResult.Empty;
|
||||
}
|
||||
|
||||
public static FFTAnalyzeResult Analyze(DateTime[] timestamps, decimal[] values, string key, TimeSpan minPeriod, TimeSpan maxPeriod)
|
||||
|
|
|
@ -95,15 +95,11 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
|
||||
public async ValueTask<(DateTime[] timestamps, decimal[] prices, bool isFullIntervalExists)> GetData(INewPrice message, TimeSpan? windowSize = null)
|
||||
{
|
||||
var data2 = await _tradeDataProvider.GetData(message.Figi, windowSize??TimeSpan.FromHours(1.5));
|
||||
if (!data2.isFullIntervalExists)
|
||||
{
|
||||
data2 = await _tradeDataProvider.GetData(message.Figi, TimeSpan.FromHours(1));
|
||||
}
|
||||
if (!data2.isFullIntervalExists)
|
||||
{
|
||||
data2 = await _tradeDataProvider.GetData(message.Figi, TimeSpan.FromHours(0.75));
|
||||
}
|
||||
var data2 = await _tradeDataProvider.GetData(message.Figi, windowSize??TimeSpan.FromHours(1));
|
||||
//if (!data2.isFullIntervalExists)
|
||||
//{
|
||||
// data2 = await _tradeDataProvider.GetData(message.Figi, TimeSpan.FromHours(0.75));
|
||||
//}
|
||||
return data2;
|
||||
}
|
||||
|
||||
|
@ -141,13 +137,13 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
if (data.isFullIntervalExists)
|
||||
{
|
||||
var interpolatedData = SignalProcessing.InterpolateData(data.timestamps, data.prices, TimeSpan.FromSeconds(5));
|
||||
fftFull = FFT.Analyze(interpolatedData.timestamps, interpolatedData.values, message.Figi+"_full", TimeSpan.FromSeconds(30), TimeSpan.FromHours(24));
|
||||
fftFull = FFT.Analyze(interpolatedData.timestamps, interpolatedData.values, message.Figi+"_full", TimeSpan.FromMinutes(2), TimeSpan.FromMinutes(30));
|
||||
|
||||
fft = FFT.ReAnalyze(fftFull, message.Figi, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(60));
|
||||
//fft = FFT.ReAnalyze(fftFull, message.Figi, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(60));
|
||||
//highFreq = FFT.ReAnalyze(fftFull, message.Figi + "_low_freq", TimeSpan.FromMinutes(20), TimeSpan.FromMinutes(60));
|
||||
//lowFreq = FFT.ReAnalyze(fftFull, message.Figi + "_high_freq", TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(20));
|
||||
|
||||
await _tradeDataProvider.SetFFtResult(fft);
|
||||
//var tmp = FFT.GetMainHarmonic(interpolatedData.timestamps, interpolatedData.values, "mainHarm", TimeSpan.FromMinutes(20));
|
||||
//await _tradeDataProvider.SetFFtResult(fft);
|
||||
await _tradeDataProvider.SetFFtResult(fftFull);
|
||||
//await _tradeDataProvider.SetFFtResult(lowFreq);
|
||||
//await _tradeDataProvider.SetFFtResult(highFreq);
|
||||
|
@ -166,7 +162,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
|
||||
|
||||
|
||||
position = FFT.Check(fft, message.Time);
|
||||
position = FFT.Check(fftFull, message.Time);
|
||||
if (position == Math.Declisions.Dtos.FFT.Enums.ValueAmplitudePosition.UpperThen30Decil)
|
||||
{
|
||||
await LogPrice(message, "upper30percent", message.Value);
|
||||
|
@ -176,6 +172,8 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
|||
await LogPrice(message, "lower30percent", message.Value);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var hposition = FFT.CheckExtremums(highFreq, message.Time);
|
||||
//if (hposition == Math.Declisions.Dtos.FFT.Enums.ValueAmplitudePosition.UpperThen30Decil)
|
||||
//{
|
||||
|
@ -699,7 +697,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
|||
|
||||
var windows = await GetWindowsSizes(message);
|
||||
//var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, -2m, 2m,3);
|
||||
var resTask1 = GetWindowAverageStartData(data, (int)windows.smallWindow, (int)windows.bigWindow, message, windowMaxSize, -0.5m, 0.5m);
|
||||
var resTask1 = GetWindowAverageStartData(data, (int)windows.smallWindow, (int)windows.bigWindow, message, windowMaxSize, -1m, 1m);
|
||||
////var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
|
||||
var getFFTModsTask = GetFFTMods(message);
|
||||
var getLocalTrendsModsTask = GetLocalTrendsMods(data, message);
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace KLHZ.Trader.Service.Controllers
|
|||
context1.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
|
||||
|
||||
|
||||
while (time1 < DateTime.UtcNow)
|
||||
while (time1 < DateTime.UtcNow.Date)
|
||||
{
|
||||
var data = new List<TimeSeriesData>();
|
||||
var data2 = new List<TimeSeriesData>();
|
||||
|
|
Loading…
Reference in New Issue