Добавил точек сброса активов

dev
vlad zverzhkhovskiy 2025-09-25 12:58:07 +03:00
parent cdc179b3a5
commit ac9cb53525
2 changed files with 33 additions and 9 deletions

View File

@ -20,8 +20,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
}
var x1 = new List<double>();
var y1 = new List<double>();
var x1d = new List<DateTime>();
var x2 = new List<double>();
var y2 = new List<double>();
var x2d = new List<DateTime>();
var y1_approximated = new List<double>();
var y2_approximated = new List<double>();
@ -37,11 +39,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
if (dt1 <= lastPeriod)
{
x2.Add((times[times.Length - i] - firstTime).TotalSeconds);
x2d.Add(times[times.Length - i]);
y2.Add((double)prices[times.Length - i]);
}
else if (dt1 <= fullPeriod)
{
x1.Add((times[times.Length - i] - firstTime).TotalSeconds);
x1d.Add(times[times.Length - i]);
y1.Add((double)prices[times.Length - i]);
}
else
@ -67,13 +71,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
var diff2 = y2_approximated[0] - y2_approximated[y2_approximated.Count - 1];
if (diff1 <= -meanfullDiff && diff2 >= meanfullDiff)
{
res |= TradingEvent.UptrendStart;
res |= TradingEvent.DowntrendEnd;
}
else if (diff1 >= meanfullDiff && diff2 <= 0)
else if (diff1 >= meanfullDiff && diff2 <= -meanfullDiff)
{
res |= TradingEvent.UptrendEnd;
}
else if (diff1 <= -meanfullDiff && diff2 >= 0)
else if (diff1 <= -meanfullDiff && diff2 >= meanfullDiff)
{
res |= TradingEvent.DowntrendEnd;
}

View File

@ -574,26 +574,29 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0m, 0.5m);
//var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
var getFFTModsTask = GetFFTMods(message);
var getLocalTrendsModsTask = GetLocalTrendsMods(data, message);
//var getAreasModsTask = GetAreasMods(data, message);
var getSellsDiffsModsTask = GetSellsDiffsMods(message);
var getTradingModeModsTask = GetTradingModeMods(message);
await Task.WhenAll(resTask1, getFFTModsTask, getSellsDiffsModsTask, getTradingModeModsTask);
await Task.WhenAll(resTask1, getFFTModsTask, getSellsDiffsModsTask, getTradingModeModsTask, getLocalTrendsModsTask);
//var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi);
//if (resTask1.Result[TradingEvent.UptrendStart] >= 1)
//{
//}
var result = resTask1.Result;
var result = getLocalTrendsModsTask.Result;
//result = MergeResults(result, resTask2.Result.ToImmutableDictionary());
//result = MergeResults(result, resTask3.Result.ToImmutableDictionary());
result = MergeResultsMax(result, changeModeData);
result = MergeResultsMult(result, getFFTModsTask.Result);
//////result = MergeResults(result, getAreasModsTask.Result);
//result = MergeResultsMax(result, changeModeData);
//result = MergeResultsMax(result, getLocalTrendsModsTask.Result);
//result = MergeResultsMult(result, getFFTModsTask.Result);
////////result = MergeResults(result, getAreasModsTask.Result);
//result = MergeResultsMult(result, getSellsDiffsModsTask.Result);
result = MergeResultsMult(result, getTradingModeModsTask.Result);
//result = MergeResultsMult(result, getTradingModeModsTask.Result);
if (result[TradingEvent.UptrendStart] >= Constants.UppingCoefficient
&& !LongOpeningStops.ContainsKey(message.Figi)
@ -903,6 +906,23 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
}
return res.ToImmutableDictionary();
}
private Task<ImmutableDictionary<TradingEvent, decimal>> GetLocalTrendsMods((DateTime[] timestamps, decimal[] prices) data, INewPrice message)
{
var res = GetInitDict(0);
if (LocalTrends.TryGetLocalTrends(data.timestamps, data.prices, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15), 0.5, out var localTrends))
{
if ((localTrends & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd)
{
res[TradingEvent.UptrendEnd] = Constants.PowerUppingCoefficient;
}
if ((localTrends & TradingEvent.DowntrendEnd) == TradingEvent.DowntrendEnd)
{
res[TradingEvent.DowntrendEnd] = Constants.PowerUppingCoefficient;
}
}
return Task.FromResult(res.ToImmutableDictionary());
}
private async Task<ImmutableDictionary<TradingEvent, decimal>> GetSellsDiffsMods(INewPrice message)
{