コード例 #1
0
        public StockValuePoco GetStockValuePerYear(Guid companyId)
        {
            var _context   = new MarketAnalyzerDBContext();
            var stockValue = (from k in _context.ExtractedKeyRatios
                              where k.CompanyId == companyId
                              join income in _context.ExtractedIncomeStatements
                              on new { k.CompanyId, k.Year } equals new { income.CompanyId, income.Year }

                              select new StockValueComponents
            {
                Year = k.Year,
                MarketCap = k.MarketCapitalization,
                SharesBasic = income.SharesBasic
            }
                              ).OrderBy(x => x.Year).ToList();

            var stockValuesPerCompany = new StockValuePoco();

            stockValuesPerCompany.Components = stockValue;
            stockValuesPerCompany.CompanyId  = companyId;
            return(stockValuesPerCompany);
        }
コード例 #2
0
        public List <StuffForGraph> GetGraphTotalsPerCompany(List <UserTransaction> userTransactions, Company company, StockValuePoco stockValuePoco)
        {
            var stuffForGraphList = new List <StuffForGraph>();
            var firstYear         = 2009;
            var lastYear          = DateTime.Now.Year;
            var priceHistory      = new List <StockPriceHistoryForCompany>();
            var yearsList         = new List <int>();

            foreach (var transaction in userTransactions)
            {
                if (stockValuePoco.Components.Where(x => x.Year == transaction.DateOfMovement.Year).SingleOrDefault() != null)
                {
                    var stuffForGraph = new StuffForGraph();

                    decimal?valueOfShare = 0;

                    var stockValueInfo = stockValuePoco.Components.Where(x => x.Year == transaction.DateOfMovement.Year).SingleOrDefault();
                    valueOfShare = stockValueInfo.MarketCap / stockValueInfo.SharesBasic;

                    var numberOfShares          = transaction.NumberOfShares;
                    var numberOfSharesWithdrawn = transaction.NumberOfSharesWithdrawn;
                    var invested  = (decimal)transaction.NumberOfShares * transaction.ValueOfShares;
                    var withdrawn = (decimal)transaction.NumberOfSharesWithdrawn * transaction.ValueOfSharesWithdrawn;

                    stuffForGraph.Year      = transaction.DateOfMovement.Year;
                    stuffForGraph.CompanyId = transaction.CompanyId;

                    stuffForGraph.NumberStocksInvested  = transaction.NumberOfShares;
                    stuffForGraph.NumberStocksWithdrawn = transaction.NumberOfSharesWithdrawn;

                    stuffForGraph.StocksInvested  = invested;
                    stuffForGraph.StocksWithdrawn = withdrawn;

                    stuffForGraph.CurrentValue          = valueOfShare * (decimal)numberOfShares;
                    stuffForGraph.CurrentValueWithdrawn = valueOfShare * (decimal)numberOfSharesWithdrawn;
                    stuffForGraph.StockPrice            = company.StockPrice;
                    stuffForGraphList.Add(stuffForGraph);
                }
                else
                {
                    var     stuffForGraph = new StuffForGraph();
                    decimal?valueOfShare  = company.StockPrice;

                    var numberOfShares          = transaction.NumberOfShares;
                    var numberOfSharesWithdrawn = transaction.NumberOfSharesWithdrawn;
                    var invested  = (decimal)transaction.NumberOfShares * transaction.ValueOfShares;
                    var withdrawn = (decimal)transaction.NumberOfSharesWithdrawn * transaction.ValueOfSharesWithdrawn;

                    stuffForGraph.Year      = transaction.DateOfMovement.Year;
                    stuffForGraph.CompanyId = transaction.CompanyId;

                    stuffForGraph.NumberStocksInvested  = transaction.NumberOfShares;
                    stuffForGraph.NumberStocksWithdrawn = transaction.NumberOfSharesWithdrawn;

                    stuffForGraph.StocksInvested  = invested;
                    stuffForGraph.StocksWithdrawn = withdrawn;

                    stuffForGraph.CurrentValue          = valueOfShare * (decimal)numberOfShares;
                    stuffForGraph.CurrentValueWithdrawn = valueOfShare * (decimal)numberOfSharesWithdrawn;
                    stuffForGraph.StockPrice            = company.StockPrice;
                    stuffForGraphList.Add(stuffForGraph);
                }
            }
            for (var i = 0; i <= (lastYear - firstYear); i++)
            {
                yearsList.Add(firstYear + i);
            }
            var stuffForGraphHistory = new StuffForGraph();

            foreach (var item in yearsList)
            {
                if (stockValuePoco.Components.Where(x => x.Year == item).SingleOrDefault() != null)
                {
                    var stockValueInfo = stockValuePoco.Components.Where(x => x.Year == item).SingleOrDefault();
                    var valueOfShare   = stockValueInfo.MarketCap / stockValueInfo.SharesBasic;
                    var history        = new StockPriceHistoryForCompany();
                    history.Year       = item;
                    history.CompanyId  = company.Id;
                    history.StockValue = valueOfShare;

                    var withdrawnThatYear = userTransactions.Where(x => x.DateOfMovement.Year == item).Where(x => x.NumberOfSharesWithdrawn != 0).ToList();

                    var yearsBefore = new List <StuffForGraph>();
                    if (withdrawnThatYear.Count != 0)
                    {
                        yearsBefore = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year <= item).ToList();
                    }
                    else
                    {
                        yearsBefore = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year < item).ToList();
                    }


                    double?numberOfShares = 0;
                    foreach (var data in yearsBefore)
                    {
                        var result = data.NumberStocksInvested - data.NumberStocksWithdrawn;
                        numberOfShares += result;
                    }
                    history.NumberStocks = numberOfShares;
                    priceHistory.Add(history);
                }
                else
                {
                    var valueOfShare = company.StockPrice;
                    var history      = new StockPriceHistoryForCompany();
                    history.Year       = item;
                    history.CompanyId  = company.Id;
                    history.StockValue = valueOfShare;

                    var    yearsBefore    = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year <= item).ToList();
                    double?numberOfShares = 0;
                    foreach (var data in yearsBefore)
                    {
                        var result = data.NumberStocksInvested - data.NumberStocksWithdrawn;
                        numberOfShares += result;
                    }
                    history.NumberStocks = numberOfShares;
                    priceHistory.Add(history);
                }
            }
            stuffForGraphHistory.CompanyId         = company.Id;
            stuffForGraphHistory.StockPriceHistory = priceHistory;
            stuffForGraphList.Add(stuffForGraphHistory);

            var orderedList = stuffForGraphList.OrderBy(x => x.Year).ToList();



            return(orderedList);
        }