Добавил точек сброса активов
parent
cdc179b3a5
commit
ac9cb53525
|
@ -20,8 +20,10 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
||||||
}
|
}
|
||||||
var x1 = new List<double>();
|
var x1 = new List<double>();
|
||||||
var y1 = new List<double>();
|
var y1 = new List<double>();
|
||||||
|
var x1d = new List<DateTime>();
|
||||||
var x2 = new List<double>();
|
var x2 = new List<double>();
|
||||||
var y2 = new List<double>();
|
var y2 = new List<double>();
|
||||||
|
var x2d = new List<DateTime>();
|
||||||
var y1_approximated = new List<double>();
|
var y1_approximated = new List<double>();
|
||||||
var y2_approximated = new List<double>();
|
var y2_approximated = new List<double>();
|
||||||
|
|
||||||
|
@ -37,11 +39,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
||||||
if (dt1 <= lastPeriod)
|
if (dt1 <= lastPeriod)
|
||||||
{
|
{
|
||||||
x2.Add((times[times.Length - i] - firstTime).TotalSeconds);
|
x2.Add((times[times.Length - i] - firstTime).TotalSeconds);
|
||||||
|
x2d.Add(times[times.Length - i]);
|
||||||
y2.Add((double)prices[times.Length - i]);
|
y2.Add((double)prices[times.Length - i]);
|
||||||
}
|
}
|
||||||
else if (dt1 <= fullPeriod)
|
else if (dt1 <= fullPeriod)
|
||||||
{
|
{
|
||||||
x1.Add((times[times.Length - i] - firstTime).TotalSeconds);
|
x1.Add((times[times.Length - i] - firstTime).TotalSeconds);
|
||||||
|
x1d.Add(times[times.Length - i]);
|
||||||
y1.Add((double)prices[times.Length - i]);
|
y1.Add((double)prices[times.Length - i]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -67,13 +71,13 @@ namespace KLHZ.Trader.Core.Math.Declisions.Utils
|
||||||
var diff2 = y2_approximated[0] - y2_approximated[y2_approximated.Count - 1];
|
var diff2 = y2_approximated[0] - y2_approximated[y2_approximated.Count - 1];
|
||||||
if (diff1 <= -meanfullDiff && diff2 >= meanfullDiff)
|
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;
|
res |= TradingEvent.UptrendEnd;
|
||||||
}
|
}
|
||||||
else if (diff1 <= -meanfullDiff && diff2 >= 0)
|
else if (diff1 <= -meanfullDiff && diff2 >= meanfullDiff)
|
||||||
{
|
{
|
||||||
res |= TradingEvent.DowntrendEnd;
|
res |= TradingEvent.DowntrendEnd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -574,26 +574,29 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0m, 0.5m);
|
var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0m, 0.5m);
|
||||||
//var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
|
//var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
|
||||||
var getFFTModsTask = GetFFTMods(message);
|
var getFFTModsTask = GetFFTMods(message);
|
||||||
|
var getLocalTrendsModsTask = GetLocalTrendsMods(data, message);
|
||||||
//var getAreasModsTask = GetAreasMods(data, message);
|
//var getAreasModsTask = GetAreasMods(data, message);
|
||||||
var getSellsDiffsModsTask = GetSellsDiffsMods(message);
|
var getSellsDiffsModsTask = GetSellsDiffsMods(message);
|
||||||
var getTradingModeModsTask = GetTradingModeMods(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);
|
//var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi);
|
||||||
//if (resTask1.Result[TradingEvent.UptrendStart] >= 1)
|
//if (resTask1.Result[TradingEvent.UptrendStart] >= 1)
|
||||||
//{
|
//{
|
||||||
|
|
||||||
//}
|
//}
|
||||||
|
|
||||||
var result = resTask1.Result;
|
var result = getLocalTrendsModsTask.Result;
|
||||||
|
|
||||||
//result = MergeResults(result, resTask2.Result.ToImmutableDictionary());
|
//result = MergeResults(result, resTask2.Result.ToImmutableDictionary());
|
||||||
//result = MergeResults(result, resTask3.Result.ToImmutableDictionary());
|
//result = MergeResults(result, resTask3.Result.ToImmutableDictionary());
|
||||||
result = MergeResultsMax(result, changeModeData);
|
//result = MergeResultsMax(result, changeModeData);
|
||||||
result = MergeResultsMult(result, getFFTModsTask.Result);
|
//result = MergeResultsMax(result, getLocalTrendsModsTask.Result);
|
||||||
//////result = MergeResults(result, getAreasModsTask.Result);
|
//result = MergeResultsMult(result, getFFTModsTask.Result);
|
||||||
|
////////result = MergeResults(result, getAreasModsTask.Result);
|
||||||
//result = MergeResultsMult(result, getSellsDiffsModsTask.Result);
|
//result = MergeResultsMult(result, getSellsDiffsModsTask.Result);
|
||||||
result = MergeResultsMult(result, getTradingModeModsTask.Result);
|
|
||||||
|
//result = MergeResultsMult(result, getTradingModeModsTask.Result);
|
||||||
|
|
||||||
if (result[TradingEvent.UptrendStart] >= Constants.UppingCoefficient
|
if (result[TradingEvent.UptrendStart] >= Constants.UppingCoefficient
|
||||||
&& !LongOpeningStops.ContainsKey(message.Figi)
|
&& !LongOpeningStops.ContainsKey(message.Figi)
|
||||||
|
@ -903,6 +906,23 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
}
|
}
|
||||||
return res.ToImmutableDictionary();
|
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)
|
private async Task<ImmutableDictionary<TradingEvent, decimal>> GetSellsDiffsMods(INewPrice message)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue