обновление стратегии
test / deploy_trader_prod (push) Successful in 2m58s Details

dev
vlad zverzhkhovskiy 2025-09-23 17:10:09 +03:00
parent 6b9b9f2147
commit 759439280f
3 changed files with 30 additions and 30 deletions

View File

@ -7,7 +7,7 @@ namespace KLHZ.Trader.Core.Tests
[Test] [Test]
public void CalcProfitTest() 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);
} }
} }
} }

View File

@ -17,6 +17,6 @@
internal const decimal UppingCoefficient = 1.3m; internal const decimal UppingCoefficient = 1.3m;
internal const decimal LowingCoefficient = .77m; internal const decimal LowingCoefficient = .77m;
internal const decimal PowerLowingCoefficient = .6m; internal const decimal PowerLowingCoefficient = .6m;
internal const decimal BlockingCoefficient = 0m; internal const decimal BlockingCoefficient = 0.1m;
} }
} }

View File

@ -266,11 +266,11 @@ namespace KLHZ.Trader.Core.Exchange.Services
} }
if (newMod == TradingMode.Growing && newMod != oldMod && !LongOpeningStops.ContainsKey(message.Figi)) 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)) if (newMod == TradingMode.Dropping && newMod != oldMod && !ShortOpeningStops.ContainsKey(message.Figi))
{ {
changeMods[TradingEvent.DowntrendStart] = Constants.UppingCoefficient; changeMods[TradingEvent.DowntrendStart] = Constants.PowerUppingCoefficient;
} }
TradingModes[message.Figi] = newMod; TradingModes[message.Figi] = newMod;
if (oldMod != newMod) if (oldMod != newMod)
@ -355,7 +355,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient; res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient;
if ((resultMoveAvFull.events & TradingEvent.UptrendStart) == TradingEvent.UptrendStart) if ((resultMoveAvFull.events & TradingEvent.UptrendStart) == TradingEvent.UptrendStart)
{ {
res[TradingEvent.UptrendStart] = initValue; res[TradingEvent.UptrendStart] = 2*initValue;
res[TradingEvent.DowntrendEnd] = initValue; res[TradingEvent.DowntrendEnd] = initValue;
} }
if ((resultMoveAvFull.events & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd) if ((resultMoveAvFull.events & TradingEvent.UptrendEnd) == TradingEvent.UptrendEnd)
@ -469,28 +469,28 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
return; return;
} }
//var resTask1 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, -2m, 2m,3); //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 resTask3 = GetWindowAverageStartData(data, 30, 180, message, windowMaxSize, 0, 0,0.7m);
var getFFTModsTask = GetFFTMods(message); var getFFTModsTask = GetFFTMods(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, getAreasModsTask, getSellsDiffsModsTask, getTradingModeModsTask); //await Task.WhenAll(resTask1, getFFTModsTask, getAreasModsTask, getSellsDiffsModsTask, getTradingModeModsTask);
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 = resTask1.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 = MergeResults(result, changeModeData); //result = MergeResults(result, changeModeData);
result = MergeResults(result, getFFTModsTask.Result); result = MergeResults(result, getFFTModsTask.Result);
result = MergeResults(result, getAreasModsTask.Result); //result = MergeResults(result, getAreasModsTask.Result);
result = MergeResults(result, getSellsDiffsModsTask.Result); //result = MergeResults(result, getSellsDiffsModsTask.Result);
result = MergeResults(result, getTradingModeModsTask.Result); result = MergeResults(result, getTradingModeModsTask.Result);
if (result[TradingEvent.UptrendStart] > Constants.UppingCoefficient if (result[TradingEvent.UptrendStart] > Constants.UppingCoefficient
@ -668,8 +668,8 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
private async Task<TradingMode> CalcTradingMode(string figi) private async Task<TradingMode> CalcTradingMode(string figi)
{ {
var res = TradingMode.None; var res = TradingMode.None;
var largeData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(45)); var largeData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(60));
var smallData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(10)); var smallData = await _tradeDataProvider.GetData(figi, TimeSpan.FromMinutes(15));
if (largeData.isFullIntervalExists && smallData.isFullIntervalExists) 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) private (decimal stopLoss, decimal takeProfit) GetStops(INewPrice message, PositionType type)
{ {
var mode = TradingModes[message.Figi]; var mode = TradingModes[message.Figi];
decimal stopLossShift = 3; decimal stopLossShift = 4;
decimal takeProfitShift = 5; decimal takeProfitShift = 5;
if (mode == TradingMode.Growing && type == PositionType.Long) if (mode == TradingMode.Growing && type == PositionType.Long)
{ {
stopLossShift = 8; stopLossShift = 6;
takeProfitShift = 15; takeProfitShift = 9;
} }
if (mode == TradingMode.Growing && type == PositionType.Short) if (mode == TradingMode.Growing && type == PositionType.Short)
{ {
@ -740,8 +740,8 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
} }
if (mode == TradingMode.Dropping && type == PositionType.Short) if (mode == TradingMode.Dropping && type == PositionType.Short)
{ {
stopLossShift = 4; stopLossShift = 6;
takeProfitShift = 13; takeProfitShift = 8;
} }
if (mode == TradingMode.Dropping && type == PositionType.Long) if (mode == TradingMode.Dropping && type == PositionType.Long)
{ {
@ -760,16 +760,16 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
if (position == ValueAmplitudePosition.LowerThenMediana) if (position == ValueAmplitudePosition.LowerThenMediana)
{ {
//res[TradingEvent.UptrendStart] = Constants.UppingCoefficient; //res[TradingEvent.UptrendStart] = Constants.UppingCoefficient;
//res[TradingEvent.DowntrendEnd] = Constants.UppingCoefficient; res[TradingEvent.DowntrendEnd] = Constants.PowerUppingCoefficient;
res[TradingEvent.UptrendEnd] = Constants.LowingCoefficient; //res[TradingEvent.UptrendEnd] = Constants.LowingCoefficient;
res[TradingEvent.DowntrendStart] = Constants.LowingCoefficient; //res[TradingEvent.DowntrendStart] = Constants.LowingCoefficient;
} }
if (position == ValueAmplitudePosition.UpperThen30Decil) if (position == ValueAmplitudePosition.UpperThen30Decil)
{ {
res[TradingEvent.UptrendStart] = Constants.BlockingCoefficient; res[TradingEvent.UptrendStart] = Constants.BlockingCoefficient;
res[TradingEvent.DowntrendEnd] = Constants.LowingCoefficient; //res[TradingEvent.DowntrendEnd] = Constants.LowingCoefficient;
//res[TradingEvent.UptrendEnd] = Constants.UppingCoefficient; //res[TradingEvent.UptrendEnd] = Constants.UppingCoefficient;
//res[TradingEvent.DowntrendStart] = Constants.UppingCoefficient; res[TradingEvent.DowntrendStart] = Constants.PowerUppingCoefficient;
} }
return res.ToImmutableDictionary(); return res.ToImmutableDictionary();
} }
@ -780,7 +780,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
var areas = await GetAreasRelation(data, message); var areas = await GetAreasRelation(data, message);
if (areas.HasValue && areas.Value > 0.2m && areas.Value <= 0.8m) 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) if (areas.HasValue && areas.Value > 0.8m)
{ {
@ -863,7 +863,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
if (mode == TradingMode.Growing) if (mode == TradingMode.Growing)
{ {
res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient; res[TradingEvent.UptrendEnd] = Constants.PowerLowingCoefficient;
res[TradingEvent.UptrendStart] = Constants.UppingCoefficient; res[TradingEvent.UptrendStart] = 10;
res[TradingEvent.DowntrendStart] = Constants.BlockingCoefficient; res[TradingEvent.DowntrendStart] = Constants.BlockingCoefficient;
res[TradingEvent.DowntrendEnd] = Constants.BlockingCoefficient; res[TradingEvent.DowntrendEnd] = Constants.BlockingCoefficient;
} }