Включил проверку излома тренда в общий конвейер обработки запросов
test / deploy_trader_prod (push) Successful in 2m26s
Details
test / deploy_trader_prod (push) Successful in 2m26s
Details
parent
52753c8fd9
commit
c99a580822
|
@ -141,7 +141,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
||||||
while (await _pricesChannel.Reader.WaitToReadAsync())
|
while (await _pricesChannel.Reader.WaitToReadAsync())
|
||||||
{
|
{
|
||||||
var message = await _pricesChannel.Reader.ReadAsync();
|
var message = await _pricesChannel.Reader.ReadAsync();
|
||||||
|
var changeMods = GetInitDict(1);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (message.IsHistoricalData)
|
if (message.IsHistoricalData)
|
||||||
|
@ -241,7 +241,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
if (_tradingInstrumentsFigis.Contains(message.Figi))
|
if (_tradingInstrumentsFigis.Contains(message.Figi) && message.Figi == "FUTIMOEXF000")
|
||||||
{
|
{
|
||||||
var currentTime = message.IsHistoricalData ? message.Time : DateTime.UtcNow;
|
var currentTime = message.IsHistoricalData ? message.Time : DateTime.UtcNow;
|
||||||
try
|
try
|
||||||
|
@ -257,63 +257,20 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
||||||
if ((oldMod == TradingMode.Growing || oldMod == TradingMode.Stable)
|
if ((oldMod == TradingMode.Growing || oldMod == TradingMode.Stable)
|
||||||
&& oldMod != newMod)
|
&& oldMod != newMod)
|
||||||
{
|
{
|
||||||
if (!message.IsHistoricalData && BotModeSwitcher.CanSell())
|
changeMods[TradingEvent.UptrendEnd] = Constants.PowerUppingCoefficient;
|
||||||
{
|
|
||||||
var assetsForClose = _portfolioWrapper.Accounts
|
|
||||||
.SelectMany(a => a.Value.Assets.Values)
|
|
||||||
.Where(a => a.Figi == message.Figi && a.Count > 0)
|
|
||||||
.ToArray();
|
|
||||||
await ClosePositions(assetsForClose, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
await LogDeclision(DeclisionTradeAction.CloseLong, message);
|
|
||||||
}
|
}
|
||||||
if ((oldMod == TradingMode.Dropping || oldMod == TradingMode.SlowDropping)
|
if ((oldMod == TradingMode.Dropping || oldMod == TradingMode.SlowDropping)
|
||||||
&& oldMod != newMod)
|
&& oldMod != newMod)
|
||||||
{
|
{
|
||||||
if (!message.IsHistoricalData && BotModeSwitcher.CanPurchase())
|
changeMods[TradingEvent.DowntrendEnd] = Constants.PowerUppingCoefficient;
|
||||||
{
|
|
||||||
var assetsForClose = _portfolioWrapper.Accounts
|
|
||||||
.SelectMany(a => a.Value.Assets.Values)
|
|
||||||
.Where(a => a.Figi == message.Figi && a.Count < 0)
|
|
||||||
.ToArray();
|
|
||||||
await ClosePositions(assetsForClose, message);
|
|
||||||
}
|
|
||||||
await LogDeclision(DeclisionTradeAction.CloseShort, message);
|
|
||||||
}
|
}
|
||||||
if (newMod == TradingMode.Growing && newMod != oldMod && !LongOpeningStops.ContainsKey(message.Figi))
|
if (newMod == TradingMode.Growing && newMod != oldMod && !LongOpeningStops.ContainsKey(message.Figi))
|
||||||
{
|
{
|
||||||
var stops = GetStops(message, PositionType.Long);
|
changeMods[TradingEvent.UptrendStart] = Constants.UppingCoefficient;
|
||||||
if (!message.IsHistoricalData && BotModeSwitcher.CanPurchase())
|
|
||||||
{
|
|
||||||
var accounts = _portfolioWrapper.Accounts
|
|
||||||
.Where(a => !a.Value.Assets.ContainsKey(message.Figi))
|
|
||||||
.Take(1)
|
|
||||||
.Select(a => a.Value)
|
|
||||||
.ToArray();
|
|
||||||
await OpenPositions(accounts, message, PositionType.Long, stops.stopLoss, stops.takeProfit, 1);
|
|
||||||
LongOpeningStops[message.Figi] = DateTime.UtcNow.AddMinutes(1);
|
|
||||||
}
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenLong, message);
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenLong, message.Value + stops.takeProfit, message.Time.AddMilliseconds(-RandomNumberGenerator.GetInt32(300, 1000)), message);
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenLong, message.Value - stops.stopLoss, message.Time.AddMilliseconds(RandomNumberGenerator.GetInt32(300, 1000)), message);
|
|
||||||
}
|
}
|
||||||
if (newMod == TradingMode.Dropping && newMod != oldMod && !ShortOpeningStops.ContainsKey(message.Figi))
|
if (newMod == TradingMode.Dropping && newMod != oldMod && !ShortOpeningStops.ContainsKey(message.Figi))
|
||||||
{
|
{
|
||||||
var stops = GetStops(message, PositionType.Short);
|
changeMods[TradingEvent.DowntrendStart] = Constants.UppingCoefficient;
|
||||||
if (!message.IsHistoricalData && BotModeSwitcher.CanSell())
|
|
||||||
{
|
|
||||||
var accounts = _portfolioWrapper.Accounts
|
|
||||||
.Where(a => !a.Value.Assets.ContainsKey(message.Figi))
|
|
||||||
.Take(1)
|
|
||||||
.Select(a => a.Value)
|
|
||||||
.ToArray();
|
|
||||||
await OpenPositions(accounts, message, PositionType.Short, stops.stopLoss, stops.takeProfit, 1);
|
|
||||||
ShortOpeningStops[message.Figi] = DateTime.UtcNow.AddMinutes(1);
|
|
||||||
}
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenShort, message);
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenShort, message.Value - stops.takeProfit, message.Time.AddMilliseconds(-RandomNumberGenerator.GetInt32(10, 100)), message);
|
|
||||||
await LogDeclision(DeclisionTradeAction.OpenShort, message.Value + stops.stopLoss, message.Time.AddMilliseconds(RandomNumberGenerator.GetInt32(300, 1000)), message);
|
|
||||||
}
|
}
|
||||||
TradingModes[message.Figi] = newMod;
|
TradingModes[message.Figi] = newMod;
|
||||||
if (oldMod != newMod)
|
if (oldMod != newMod)
|
||||||
|
@ -367,7 +324,7 @@ namespace KLHZ.Trader.Core.Exchange.Services
|
||||||
var windowMaxSize = 2000;
|
var windowMaxSize = 2000;
|
||||||
var data = await _tradeDataProvider.GetData(message.Figi, windowMaxSize);
|
var data = await _tradeDataProvider.GetData(message.Figi, windowMaxSize);
|
||||||
var state = ExchangeScheduler.GetCurrentState(message.Time);
|
var state = ExchangeScheduler.GetCurrentState(message.Time);
|
||||||
await ProcessNewPriceIMOEXF3(data, state, message, windowMaxSize);
|
await ProcessNewPriceIMOEXF3(data, state, message, windowMaxSize, changeMods.ToImmutableDictionary());
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -426,7 +383,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ValueAmplitudePosition> CheckPosition(INewPrice message)
|
private async Task<ValueAmplitudePosition> CheckHarmonicPosition(INewPrice message)
|
||||||
{
|
{
|
||||||
var data2 = await GetData(message);
|
var data2 = await GetData(message);
|
||||||
var position = await CheckHarmonicPosition(data2, message);
|
var position = await CheckHarmonicPosition(data2, message);
|
||||||
|
@ -503,7 +460,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
|
|
||||||
private async Task ProcessNewPriceIMOEXF3((DateTime[] timestamps, decimal[] prices) data,
|
private async Task ProcessNewPriceIMOEXF3((DateTime[] timestamps, decimal[] prices) data,
|
||||||
ExchangeState state,
|
ExchangeState state,
|
||||||
INewPrice message, int windowMaxSize)
|
INewPrice message, int windowMaxSize, ImmutableDictionary<TradingEvent, decimal> changeModeData)
|
||||||
{
|
{
|
||||||
if (data.timestamps.Length <= 4)
|
if (data.timestamps.Length <= 4)
|
||||||
{
|
{
|
||||||
|
@ -528,6 +485,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
|
|
||||||
//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, 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);
|
||||||
|
@ -794,7 +752,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
private async Task<ImmutableDictionary<TradingEvent, decimal>> GetFFTMods(INewPrice message)
|
private async Task<ImmutableDictionary<TradingEvent, decimal>> GetFFTMods(INewPrice message)
|
||||||
{
|
{
|
||||||
var res = GetInitDict(1);
|
var res = GetInitDict(1);
|
||||||
var position = await CheckPosition(message);
|
var position = await CheckHarmonicPosition(message);
|
||||||
|
|
||||||
|
|
||||||
if (position == ValueAmplitudePosition.LowerThenMediana)
|
if (position == ValueAmplitudePosition.LowerThenMediana)
|
||||||
|
@ -806,7 +764,7 @@ INewPrice message, int windowMaxSize, decimal uptrendStartingDetectionMeanfullSt
|
||||||
}
|
}
|
||||||
if (position == ValueAmplitudePosition.UpperThen30Decil)
|
if (position == ValueAmplitudePosition.UpperThen30Decil)
|
||||||
{
|
{
|
||||||
res[TradingEvent.UptrendStart] = Constants.LowingCoefficient;
|
res[TradingEvent.UptrendStart] = Constants.PowerLowingCoefficient;
|
||||||
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.UppingCoefficient;
|
||||||
|
|
Loading…
Reference in New Issue