обновление стратегии
test / deploy_trader_prod (push) Successful in 2m58s
Details
test / deploy_trader_prod (push) Successful in 2m58s
Details
parent
6b9b9f2147
commit
759439280f
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue