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)); } }
public PriceStatisticsAggregate(string ticker, IEnumerable <PriceDataPoint> range) { var setting = new YahooCompanyStatisticsSetting(ticker); var dl = new YahooCompanyStatisticsDownloader(setting); _companyinfo = dl.DownloadObjectTaskAsync().ConfigureAwait(false).GetAwaiter().GetResult(); _ticker = ticker; _dataPoints = range.ToList <PriceDataPoint>();//.Select(d => { d.Index = i++; return d; }). _partitions = new List <DataRangePartition>(10); _slideWindow = 4; Initialize(); }