Esempio n. 1
0
        public async Task <IEnumerable <CandlePeriodModel> > GetAvailableCandlePeriodsAsync(string tradingPair)
        {
            var availableCandlePeriods = await _candleDbRepository.GetCandlesAsync(tradingPair);

            var candlePeriods = new List <CandlePeriodModel>();

            foreach (var availableCandlePeriod in availableCandlePeriods)
            {
                var orderedCandles = availableCandlePeriod.Value.OrderBy(o => o.StartDateTime);
                candlePeriods.Add(new CandlePeriodModel
                {
                    ScanId      = availableCandlePeriod.Key,
                    PeriodStart = orderedCandles.First().StartDateTime,
                    PeriodEnd   = orderedCandles.Last().StartDateTime,
                    Candles     = Mapper.Map <IEnumerable <CandleModel> >(orderedCandles)
                });
            }

            return(candlePeriods);
        }
Esempio n. 2
0
        public async Task PingPongProcessingAsync(string channelName, BaseMessage <CandleListnerParameters> pingPongParameters)
        {
            try
            {
                var frame    = pingPongParameters.Content.Period;
                var pairName = pingPongParameters.Content.ChannelName;

                var candleDT = DateTimeOffset.UtcNow.AddMinutes(-2000 * frame).DateTime;
                var candles  = await _candleRepository.GetCandlesAsync(pairName,
                                                                       frame,
                                                                       candleDT.AddSeconds(-candleDT.Second).AddMilliseconds(-candleDT.Millisecond));

                var indicators = await _indicatorsRepositiry.GetIndicatorsAsync(pairName, frame);

                if (candles.IsSuccess &&
                    indicators.IsSuccess)
                {
                    var indicatorsPack = new IndicatorServicePack
                    {
                        Candles    = candles.Result,
                        Indicators = indicators.Result
                    };

                    var indicatorsResult = await _indicatorBuilder.GetIndicatorsByCandleAsync(indicatorsPack);

                    var tasksForSave = indicatorsResult.Select(r => _indicatorsValueRepository.AddIndicatorsAsync(pairName, frame, r));
                    await Task.WhenAll(tasksForSave);

                    await _publisher.PublishAsync("indicators_value", pingPongParameters.Content, Models.Enums.BusMessageType.Indicators);
                }
                else
                {
                    _logger.LogError($"Операция построения индикаторов не удалась, по причине {candles.ErrorMessage}, {indicators.ErrorMessage} или список индикаторов был пуст");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"В процессе обработки операции ping pong {JsonConvert.SerializeObject(pingPongParameters.Content)} произошла обшика");
            }
        }