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); } }