public async Task CalculateFairValue() { // var tenYearsBondYield = await DownloadHelper.GetQuote(new string[] { "^TNX" }, QuoteProperty.LastTradePriceOnly, QuoteProperty.ChangeInPercent); // var currentPrice = DownloadHelper.GetQuote(new string[] { ticker }, QuoteProperty.LastTradePriceOnly, QuoteProperty.ChangeInPercent); double inflation = await DownloadHelper.GetCpiData(); //todo: get from yahoo quote double fixincomeReturnRate = 0.0796; //todo: get from yahoo quote var setting = new YahooCompanyStatisticsSetting("CSCO"); var dl = new YahooCompanyStatisticsDownloader(setting); //var bag = new ConcurrentBag<CompanyStatisticsData>(); var results = await dl.BatchDownloadObjectsTaskAsync(setting.GetUrls(tickers)).ConfigureAwait(false); //Parallel.ForEach(tickers, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, // id => // { // var resp = dl.BatchDownloadObjectsTaskAsync(id); // if (resp.Result.Connection.State == ConnectionState.Success) // { // var item = resp.Result.Result.Item; // bag.Add(item); // } // }); results.OrderBy(result => { return(result.Item.TradingInfo.TwoHundredDayMovingAverage); }); //TODO: Add property FairValue and Market Price in CompanyStatisticsData foreach (var result in results) { var ti = result.Item.TradingInfo; var vm = result.Item.ValuationMeasures; var highlight = result.Item.FinancialHighlights; var eps = result.Item.FinancialHighlights.DilutedEPS; // var growthRate1 = vm.TrailingPE / vm.ForwardPE; var growthRate = highlight.QuarterlyRevenueGrowthPercent;//.QuaterlyEarningsGrowthPercent /100.0; //var outStandingShare = vm.MarketCapitalisationInMillion / highlight.RevenuePerShare. var fairValue = FairValueEngine.DiscountedCurrentValue(eps, 3, growthRate / 100.0, inflation / 10000.0, fixincomeReturnRate); if (eps <= 0 && fairValue <= 0) { fairValue = FairValueEngine.FutureValue(highlight.RevenuePerShare, growthRate / 100.0, 1) * 1.5; } Debug.WriteLine("{0} FairValue : {1} forward P/E : {2} EV/Rev : {3} Margin: {4} ShortPercentage : {5} EPS: {6} GrowthRate: {7}", result.Item.ID.PadRight(5), fairValue.ToString("C").PadLeft(9), vm.ForwardPE.ToString().PadLeft(8), vm.EnterpriseValueToRevenue.ToString().PadLeft(8), (highlight.ProfitMarginPercent / 100.0).ToString("P").PadLeft(9), (ti.ShortPercentOfFloat / 100.0).ToString("P").PadLeft(8), eps.ToString("C").PadLeft(8), (growthRate / 100.0).ToString("P").PadLeft(8)); } }
/// <summary> /// <example> /// setting.Properties = new QuoteProperty[] { // QuoteProperty.LastTradePriceOnly, // QuoteProperty.ChangeInPercent, // QuoteProperty.OneyrTargetPrice, // QuoteProperty.PercentChangeFromFiftydayMovingAverage, // QuoteProperty.PercentChangeFromTwoHundreddayMovingAverage // }; /// </example> /// </summary> /// <param name="tickers"></param> /// <param name="quoteProperties"></param> /// <returns></returns> public async Task <PotentialTarget> GetFairValue(string ticker) { var data = new PotentialTarget(ticker); var tenYearsBondYield = DownloadHelper.GetQuote(new string[] { "^TNX" }, QuoteProperty.LastTradePriceOnly, QuoteProperty.ChangeInPercent); var currentPrice = DownloadHelper.GetQuote(new string[] { ticker }, QuoteProperty.LastTradePriceOnly, QuoteProperty.ChangeInPercent); var cpi = DownloadHelper.GetCpiData(); var earningForecast = GetNasdaqEarningForecast(ticker); await cpi; await tenYearsBondYield; await currentPrice; await earningForecast; data.CurrentMarketPrice = currentPrice.Result.Items[0].LastTradePriceOnly; var fairValue = FairValueEngine.DiscountedCurrentValue( earningForecast.Result.YearlyEarningForecasts[0].ConsensusEpsForecast, earningForecast.Result.Years, earningForecast.Result.YearlyEarningGrowth, cpi.Result, (double)tenYearsBondYield.Result.Items [0][QuoteProperty.LastTradePriceOnly]); data.FairValue = fairValue; return(data); }