public decimal CalculateEma(List <TickerFormattedDto> tickers, Domain.Dtos.EcoIndex.EcoIndex lastEMA)
        {
            if (tickers.Count > 0)
            {
                decimal SMA        = tickers.Average(t => t.Last);
                decimal multiplier = 2M / (tickers.Count + 1M);

                TickerFormattedDto lastTickerFormattedDto = tickers?.LastOrDefault();

                if (lastTickerFormattedDto == null)
                {
                    return(0M);
                }

                decimal lastEMAValue = 0M;

                if (lastEMA != null)
                {
                    lastEMAValue = lastEMA.Value;
                }

                decimal EMA = (lastTickerFormattedDto.Last - lastEMAValue) * multiplier + lastEMAValue;

                if (EMA < 0)
                {
                    return(0M);
                }

                return(EMA);
            }

            return(0M);
        }
        private void SaveEMAValue(decimal EMAValue, ExchangePairTypeEnum pairTypeEnum)
        {
            if (EMAValue == 0)
            {
                return;
            }

            Domain.Dtos.EcoIndex.EcoIndex ecoIndex = new Domain.Dtos.EcoIndex.EcoIndex
            {
                Id    = EcoIndexEnum.EMA,
                Name  = ResolvePairTypeName(pairTypeEnum),
                Time  = DateTime.Now,
                Value = EMAValue
            };

            _elasticClient.SaveEcoIndexData(ecoIndex);
        }
        public void CalculateValue()
        {
            List <ExchangePairTypeEnum> exchangePairTypeEnums = new List <ExchangePairTypeEnum>
            {
                ExchangePairTypeEnum.ETH_BTC,
                ExchangePairTypeEnum.BTC_EUR,
                ExchangePairTypeEnum.BTC_USD,
                ExchangePairTypeEnum.ETH_EUR,
                ExchangePairTypeEnum.ETH_USD
            };

            foreach (ExchangePairTypeEnum exchangePairTypeEnum in exchangePairTypeEnums)
            {
                List <TickerFormattedDto>     tickers = LoadTickerFormattedDtos(exchangePairTypeEnum);
                Domain.Dtos.EcoIndex.EcoIndex lastEMA = GetLastEmaValue(exchangePairTypeEnum);

                decimal EMA = CalculateEma(tickers, lastEMA);
                SaveEMAValue(EMA, exchangePairTypeEnum);
            }
        }