示例#1
0
        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));
            }
        }
示例#2
0
        /// <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);
        }