diff --git a/KLHZ.Trader.Core.Tests/TraderTests.cs b/KLHZ.Trader.Core.Tests/TraderTests.cs index 49e92bc..331d1d6 100644 --- a/KLHZ.Trader.Core.Tests/TraderTests.cs +++ b/KLHZ.Trader.Core.Tests/TraderTests.cs @@ -7,7 +7,7 @@ namespace KLHZ.Trader.Core.Tests [Test] public void CalcProfitTest() { - var profit = TradingCalculator.CaclProfit(2990, 2987m, 0.0025m, 7.9m, true); + var profit = TradingCalculator.CaclProfit(2990, 2988.5m, 0.0025m, 7.9m, true); } } } diff --git a/KLHZ.Trader.Core/Exchange/Constants.cs b/KLHZ.Trader.Core/Exchange/Constants.cs index f770708..471abc4 100644 --- a/KLHZ.Trader.Core/Exchange/Constants.cs +++ b/KLHZ.Trader.Core/Exchange/Constants.cs @@ -17,6 +17,6 @@ internal const decimal UppingCoefficient = 1.3m; internal const decimal LowingCoefficient = .77m; internal const decimal PowerLowingCoefficient = .6m; - internal const decimal BlockingCoefficient = 0m; + internal const decimal BlockingCoefficient = 0.1m; } } diff --git a/KLHZ.Trader.Core/Exchange/Services/Trader.cs b/KLHZ.Trader.Core/Exchange/Services/Trader.cs index 3b8409d..ff18174 100644 --- a/KLHZ.Trader.Core/Exchange/Services/Trader.cs +++ b/KLHZ.Trader.Core/Exchange/Services/Trader.cs @@ -266,11 +266,11 @@ namespace KLHZ.Trader.Core.Exchange.Services } if (newMod == TradingMode.Growing && newMod != oldMod && !LongOpeningStops.ContainsKey(message.Figi)) { - changeMods[TradingEvent.UptrendStart] = Constants.UppingCoefficient; + changeMods[TradingEvent.UptrendStart] = Constants.PowerUppingCoefficient; } if (newMod == TradingMode.Dropping && newMod != oldMod && !ShortOpeningStops.ContainsKey(message.Figi)) { - changeMods[TradingEvent.DowntrendStart] = Constants.UppingCoefficient; + changeMods[TradingEvent.DowntrendStart] = Constants.PowerUppingCoefficient; } TradingModes[message.Figi] = newMod; if (oldMod != newMod) @@ -355,7 +355,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient; if ((resultMoveAvFull.events & TradingEvent.UptrendStart) == TradingEvent.UptrendStart) { - res[TradingEvent.UptrendStart] = initValue; + res[TradingEvent.UptrendStart] = 2*initValue; res[TradingEvent.DowntrendEnd] = initValue; } if ((resultMoveAvFull.events & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd) @@ -469,28 +469,28 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt return; } //var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, -2m, 2m,3); - var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, -0.5m, 0.5m, Constants.PowerUppingCoefficient); + var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0m, 0.5m, Constants.PowerUppingCoefficient); //var resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m); var getFFTModsTask = GetFFTMods(message); - var getAreasModsTask = GetAreasMods(data, message); - var getSellsDiffsModsTask = GetSellsDiffsMods(message); + //var getAreasModsTask = GetAreasMods(data, message); + //var getSellsDiffsModsTask = GetSellsDiffsMods(message); var getTradingModeModsTask = GetTradingModeMods(message); - await Task.WhenAll(resTask1, getFFTModsTask, getAreasModsTask, getSellsDiffsModsTask, getTradingModeModsTask); - var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi); - if (resTask1.Result[TradingEvent.UptrendStart] >= 1) - { + //await Task.WhenAll(resTask1, getFFTModsTask, getAreasModsTask, getSellsDiffsModsTask, getTradingModeModsTask); + //var assetType = _tradeDataProvider.GetAssetTypeByFigi(message.Figi); + //if (resTask1.Result[TradingEvent.UptrendStart] >= 1) + //{ - } + //} var result = resTask1.Result; //result = MergeResults(result, resTask2.Result.ToImmutableDictionary()); //result = MergeResults(result, resTask3.Result.ToImmutableDictionary()); - result = MergeResults(result, changeModeData); + //result = MergeResults(result, changeModeData); result = MergeResults(result, getFFTModsTask.Result); - result = MergeResults(result, getAreasModsTask.Result); - result = MergeResults(result, getSellsDiffsModsTask.Result); + //result = MergeResults(result, getAreasModsTask.Result); + //result = MergeResults(result, getSellsDiffsModsTask.Result); result = MergeResults(result, getTradingModeModsTask.Result); if (result[TradingEvent.UptrendStart] > Constants.UppingCoefficient @@ -668,8 +668,8 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt private async Task CalcTradingMode(string figi) { var res = TradingMode.None; - var largeData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(45)); - var smallData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(10)); + var largeData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(60)); + var smallData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(15)); if (largeData.isFullIntervalExists && smallData.isFullIntervalExists) { @@ -706,12 +706,12 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt private (decimal stopLoss, decimal takeProfit) GetStops(INewPrice message, PositionType type) { var mode = TradingModes[message.Figi]; - decimal stopLossShift = 3; + decimal stopLossShift = 4; decimal takeProfitShift = 5; if (mode == TradingMode.Growing && type == PositionType.Long) { - stopLossShift = 8; - takeProfitShift = 15; + stopLossShift = 6; + takeProfitShift = 9; } if (mode == TradingMode.Growing && type == PositionType.Short) { @@ -740,8 +740,8 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt } if (mode == TradingMode.Dropping && type == PositionType.Short) { - stopLossShift = 4; - takeProfitShift = 13; + stopLossShift = 6; + takeProfitShift = 8; } if (mode == TradingMode.Dropping && type == PositionType.Long) { @@ -760,16 +760,16 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt if (position == ValueAmplitudePosition.LowerThenMediana) { //res[TradingEvent.UptrendStart] = Constants.UppingCoefficient; - //res[TradingEvent.DowntrendEnd] = Constants.UppingCoefficient; - res[TradingEvent.UptrendEnd] = Constants.LowingCoefficient; - res[TradingEvent.DowntrendStart] = Constants.LowingCoefficient; + res[TradingEvent.DowntrendEnd] = Constants.PowerUppingCoefficient; + //res[TradingEvent.UptrendEnd] = Constants.LowingCoefficient; + //res[TradingEvent.DowntrendStart] = Constants.LowingCoefficient; } if (position == ValueAmplitudePosition.UpperThen30Decil) { res[TradingEvent.UptrendStart] = Constants.BlockingCoefficient; - res[TradingEvent.DowntrendEnd] = Constants.LowingCoefficient; + //res[TradingEvent.DowntrendEnd] = Constants.LowingCoefficient; //res[TradingEvent.UptrendEnd] = Constants.UppingCoefficient; - //res[TradingEvent.DowntrendStart] = Constants.UppingCoefficient; + res[TradingEvent.DowntrendStart] = Constants.PowerUppingCoefficient; } return res.ToImmutableDictionary(); } @@ -780,7 +780,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt var areas = await GetAreasRelation(data, message); if (areas.HasValue && areas.Value > 0.2m && areas.Value <= 0.8m) { - res[TradingEvent.UptrendStart] = Constants.PowerLowingCoefficient; + //res[TradingEvent.UptrendStart] = Constants.PowerLowingCoefficient; } if (areas.HasValue && areas.Value > 0.8m) { @@ -863,7 +863,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt if (mode == TradingMode.Growing) { res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient; - res[TradingEvent.UptrendStart] = Constants.UppingCoefficient; + res[TradingEvent.UptrendStart] = 10; res[TradingEvent.DowntrendStart] = Constants.BlockingCoefficient; res[TradingEvent.DowntrendEnd] = Constants.BlockingCoefficient; }