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