private void EvaluateMultiples(PricingResult pricingResults, Models.Domain.MarketData stockMarketData)
        {
            var lastStatement = _statementOrganizer.GetLastFinancialStatement();

            if (lastStatement == null)
            {
                return;
            }
            var revenue  = lastStatement.IncomeStatement.TotalRevenue;
            var earnings = lastStatement.IncomeStatement.NetIncomeApplicableToCommon;


            if (stockMarketData.MarketCapitalization.HasValue && earnings > 0)
            {
                pricingResults.PriceEarningRatio = (decimal)(stockMarketData.MarketCapitalization)
                                                   / earnings;
            }
            if (stockMarketData.MarketCapitalization.HasValue && revenue != 0)
            {
                pricingResults.PriceToSalesRatio = (decimal)stockMarketData.MarketCapitalization / revenue;
            }
            if (stockMarketData.MarketCapitalization.HasValue && lastStatement.BalanceSheet.RealTotalEquity != 0)
            {
                pricingResults.PriceToBookRatio = (decimal)stockMarketData.MarketCapitalization /
                                                  lastStatement.BalanceSheet.RealTotalEquity;
            }
        }
        private void EvaluateEnterpriseMultiple(PricingResult pricingResults, Models.Domain.MarketData stockMarketData)
        {
            var financialStatement = _statementOrganizer.GetLastFinancialStatement();

            if (financialStatement == null)
            {
                return;
            }
            var marketCap = stockMarketData.MarketCapitalization ?? 0;
            var debt      = financialStatement.BalanceSheet.TotalLongTermDebt +
                            financialStatement.BalanceSheet.TotalShortTermDebt;
            var minorityInterest = financialStatement.BalanceSheet.MinorityInterest;
            var cash             = financialStatement.BalanceSheet.CashCashEquivalentAndShortTermInvestments;
            var preferredStock   = financialStatement.BalanceSheet.PreferredStock;

            var enterpriseValue = marketCap + debt + minorityInterest + preferredStock - cash;

            pricingResults.EnterpriseValue = enterpriseValue;

            var ebitda = financialStatement.IncomeStatement.Ebit +
                         financialStatement.CashFlowStatement.CfDepreciationAmortization;

            if (ebitda != 0)
            {
                pricingResults.EnterpriseMultiple = enterpriseValue / ebitda;
            }
        }
        private void EvaluateNcaV(PricingResult pricingResults, Models.Domain.MarketData marketData)
        {
            var statement = _statementOrganizer.GetLastFinancialStatement();

            if (statement == null)
            {
                return;
            }
            pricingResults.NetCurrentAssetValue =
                statement.BalanceSheet.TotalCurrentAssets - statement.BalanceSheet.TotalLiabilities;
            if (marketData.MarketCapitalization.HasValue && pricingResults.NetCurrentAssetValue > 0)
            {
                pricingResults.DiscountOnNcav =
                    (1 - (decimal)marketData.MarketCapitalization / pricingResults.NetCurrentAssetValue) * 100;
            }
        }
        private void EvaluatePriceToFcf(PricingResult pricingResults, Models.Domain.MarketData marketData)
        {
            if (!pricingResults.AnnualResults.Any())
            {
                return;
            }
            var lastResult = pricingResults.AnnualResults.OrderByDescending(x => x.Year).First();
            var fcf        = lastResult.FreeCashFlow;

            if (fcf != 0)
            {
                pricingResults.CurrentPriceToFcfRatio = (marketData.MarketCapitalization ?? 0) / fcf;
            }
            if (pricingResults.AverageFreeCashFlow == 0)
            {
                return;
            }
            pricingResults.AveragePriceToFcfRatio =
                (marketData.MarketCapitalization ?? 0) / pricingResults.AverageFreeCashFlow;
        }