Пример #1
0
        public async Task NewPortfolioAsync([Remainder][Summary("Protfolio name")] string name)
        {
            PortfolioEntity portfolio = new PortfolioEntity(Context.User.Id.ToString(), name);

            portfolio.GuildId = Context.Guild.Id.ToString();
            portfolio.Stocks  = string.Empty;
            await CloudTableUtility.InsertOrMergePortfolioAsync(table, portfolio);

            await ReplyAsync("New portfolio '" + name + "' added!");
        }
Пример #2
0
        public async Task GetPortfolio([Remainder][Summary("Portfolio name")] string name)
        {
            PortfolioEntity portfolio = await CloudTableUtility.RetrievePortfolioUsingPointQueryAsync(table, Context.User.Id.ToString(), name);

            await ReplyAsync("Portfolio: " + portfolio.RowKey);

            string             returnString = "";
            StockEntity        stock;
            List <StockEntity> stockList = new List <StockEntity>();
            var symbolList   = portfolio.Stocks.Trim().Split(" ");
            var newPriceList = await Yahoo.Symbols(symbolList).Fields(Field.RegularMarketPrice).QueryAsync();

            double totalValue         = 0;
            double totalCost          = 0;
            double totalTotalChange   = 0;
            double totalChangePercent = 0;

            foreach (var s in symbolList)
            {
                stock = await CloudTableUtility.RetrieveStockUsingPointQueryAsync(table, portfolio.RowKey, s);

                var newHoldingValue = stock.Shares * newPriceList[s].RegularMarketPrice;
                var oldHoldingValue = stock.Shares * stock.StartPrice;
                var changeInValue   = Math.Round((((newHoldingValue - oldHoldingValue) / oldHoldingValue * 100)), 2);
                var totalChange     = newHoldingValue - oldHoldingValue;

                totalValue       = totalValue + newHoldingValue;
                totalCost        = totalCost + oldHoldingValue;
                totalTotalChange = Math.Round(totalTotalChange + totalChange, 2);


                returnString += s + "   " + newHoldingValue + "(" + oldHoldingValue + ")   " + newPriceList[s].RegularMarketPrice + "(" + Math.Round(stock.StartPrice, 2) + ")" + "   " + totalChange + "(" + changeInValue + "%)" + "\n";
            }
            totalChangePercent = Math.Round((((totalValue - totalCost) / totalCost * 100)), 2);
            await ReplyAsync("TICKER  VALUE(COST)  PRICE(AVG. COST)  TOTAL(%): \n" + returnString + "\n" +
                             "Totals:\n" +
                             "VALUE(COST)  TOTAL(%)\n" +
                             totalValue + "(" + totalCost + ")" + "   " + totalTotalChange + "(" + totalChangePercent + "%)" + "\n");
        }
Пример #3
0
        public async Task AddToPortfolio([Remainder][Summary("Portfolio name and symbol")] string portfolioAndSymbol)
        {
            string[] pasList = portfolioAndSymbol.Split(' ');
            if (pasList.Count() < 2)
            {
                if (pasList.Count() == 1)
                {
                    await ReplyAsync("No symbol defined. \n" + "Format: smb! add to [protfolio name] [symbol] [shares]");
                }
                else
                {
                    await ReplyAsync("Invalid parameters. \n" + "Format: smb! add to [protfolio name] [symbol] [shares]");
                }
            }
            else
            {
                PortfolioEntity portfolio = await CloudTableUtility.RetrievePortfolioUsingPointQueryAsync(table, Context.User.Id.ToString(), pasList[0]);

                if (portfolio == null)
                {
                    await ReplyAsync("No portfolio with that name.");
                }
                string[] symbols = new string[pasList.Length - 1];
                Array.Copy(pasList, 1, symbols, 0, pasList.Count() - 1);
                var prices = await Yahoo.Symbols(symbols).Fields(Field.RegularMarketPrice).QueryAsync();

                StockEntity        stock;
                List <StockEntity> newStocks = new List <StockEntity>();
                for (int i = 0; i < symbols.Length - 1; i++)
                {
                    if (i % 2 == 0)
                    {
                        int shares = 0;
                        int.TryParse(symbols[i + 1], out shares);
                        if (shares > 0)
                        {
                            stock            = new StockEntity(portfolio.RowKey, symbols[i]);
                            stock.Shares     = shares;
                            stock.StartPrice = prices[symbols[i]].RegularMarketPrice;
                            newStocks.Add(stock);
                        }
                        else
                        {
                            await ReplyAsync("Error adding holdings to portfolio.");

                            return;
                        }
                    }
                }
                foreach (var s in newStocks)
                {
                    if (portfolio.Stocks.Split(' ').Contains(s.RowKey))
                    {
                        StockEntity stockEntity = await CloudTableUtility.RetrieveStockUsingPointQueryAsync(table, portfolio.RowKey, s.RowKey);

                        var newAddedCost = s.Shares * s.StartPrice;
                        var oldCost      = stockEntity.Shares * stockEntity.StartPrice;
                        var totalShares  = s.Shares + stockEntity.Shares;
                        var startPrice   = Math.Round((newAddedCost + oldCost) / totalShares, 2);

                        stockEntity.Shares     = totalShares;
                        stockEntity.StartPrice = startPrice;

                        await CloudTableUtility.InsertOrMergeStockAsync(table, stockEntity);
                    }
                    else
                    {
                        await CloudTableUtility.InsertOrMergeStockAsync(table, s);

                        portfolio.Stocks += (" " + s.RowKey + " ").Trim();
                    }
                }

                await CloudTableUtility.InsertOrMergePortfolioAsync(table, portfolio);

                await ReplyAsync("Holdings added to " + portfolio.RowKey);
            }
        }