Compare commits

...

2 Commits

Author SHA1 Message Date
vlad zverzhkhovskiy 7da563f0ff обновление логики сброса активов
test / deploy_trader_prod (push) Successful in 1m42s Details
2025-09-15 10:54:24 +03:00
vlad zverzhkhovskiy d196eac193 обновление логики сброса активов 2025-09-15 10:53:16 +03:00
3 changed files with 68 additions and 5 deletions

View File

@ -10,7 +10,7 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var da = new List<float>();
for (int i = 0; i < 1000; i++)
{
da.Add((float)System.Math.Sin(0.01 * i));
da.Add((float)System.Math.Sin(0.01 * i)+ (float)System.Math.Cos(0.01 * i));
}
var start = da.ToArray();
@ -25,5 +25,46 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var d = res[i] - start[i];
}
}
public static TimeSpan CaclHarmonycPeriod(TimeSpan signalLength, int signalLengthItems, int harmonyNumber)
{
var fdiscretisation = signalLengthItems /signalLength.TotalSeconds ;
var fharm = harmonyNumber * fdiscretisation / signalLengthItems;
return TimeSpan.FromSeconds(1/fharm);
}
public static double CalcCurrentPhase(Complex32[] spectr, int harmonyNumber)
{
var item = spectr[harmonyNumber];
return System.Math.Atan(item.Imaginary / item.Real);
}
public static (double min, double max) CalcPhaseRange(double aSin, double aCos, double initPhase, double maxLevel)
{
var x = new List<double>();
var x2 = new List<double>();
var y = new List<double>();
for (double i = 0; i <= 10 * System.Math.PI; i += 0.0001)
{
var _2pi = 2 * System.Math.PI;
var df = ((i / _2pi) % 1) * _2pi;
x.Add(df);
y.Add(aSin * System.Math.Sin(i + initPhase) + aCos * System.Math.Cos(i + initPhase));
}
var prevI = -1;
var max = y.Max();
for (int i = 0; i < y.Count; i++)
{
if (y[i] > (1 - maxLevel) * max && (i - prevI == 1 || prevI < 0))
{
x2.Add(x[i]);
prevI = i;
}
}
var minPhase = x2.Min();
var maxPhase = x2.Max();
return (minPhase, maxPhase);
}
}
}

View File

@ -1,4 +1,5 @@
using MathNet.Numerics;
using KLHZ.Trader.Core.Math.Declisions.Utils;
using MathNet.Numerics;
using MathNet.Numerics.IntegralTransforms;
using System.Security.Cryptography;
@ -12,13 +13,14 @@ namespace KLHZ.Trader.Core.Tests
var da = new List<float>();
for (int i = 0; i < 100; i++)
{
da.Add((float)System.Math.Sin(0.5 * i) + (float)(RandomNumberGenerator.GetInt32(0, 100)) / 300);
da.Add((float)System.Math.Sin(0.5 * i)+(float)System.Math.Cos(0.5 * i));
}
var start = da.ToArray();
var arrv = da.Select(d => new Complex32(d, 0)).ToArray();
Fourier.Forward(arrv);
var tem = arrv.Select(a => Complex32.Abs(a)).ToArray();
var s = tem.Sum();
Fourier.Inverse(arrv);
var res = arrv.Select(a => a.Real).ToArray();
@ -27,5 +29,25 @@ namespace KLHZ.Trader.Core.Tests
var d = res[i] - start[i];
}
}
[Test]
public static void CalcHarmonyPeriodTest1()
{
var period1 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 1);
var period2 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 2);
var period3 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 3);
var period4 = FFT.CaclHarmonycPeriod(TimeSpan.FromHours(1), 1000, 4);
}
[Test]
public static void CalcPhaseRange()
{
var res = FFT.CalcPhaseRange(1, 0, 0, 0.001);
Assert.IsTrue(res.min < System.Math.PI / 2);
Assert.IsTrue(res.min > System.Math.PI / 2 * 0.9);
Assert.IsTrue(res.max > System.Math.PI / 2);
Assert.IsTrue(res.max < System.Math.PI / 2 * 1.1);
}
}
}

View File

@ -131,7 +131,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
Figi = message.Figi,
CommandType = asset.Count < 0 ? Contracts.Messaging.Dtos.Enums.TradeCommandType.MarketBuy
: Contracts.Messaging.Dtos.Enums.TradeCommandType.MarketSell,
Count = (long)asset.Count,
Count = System.Math.Abs((long)asset.Count),
RecomendPrice = null,
EnableMargin = false,
});