public void TestDailyValuation()
        {
            // Two purchases on different days
            PositionFormulas position = new PositionFormulas(testSymbol);
            Trade            tradeA   = CreateTransaction(500, testSymbol, 12.5m, new DateTime(2020, 5, 4));
            Trade            tradeB   = CreateTransaction(600, testSymbol, 15m, new DateTime(2020, 5, 8));

            position.AddTransaction(tradeA);
            position.AddTransaction(tradeB);

            DataFrame priceTable = CreatePriceTable();

            position.CalculateDailyValuation(priceTable);

            decimal[] dailyValues = new decimal[] { 7135m, 7635m, 8135m, 8635m, 20097m, 21197m, 22297m };
            PrimitiveDataFrameColumn <decimal> dailyVals = new PrimitiveDataFrameColumn <decimal>($"{testSymbol}_MarketValue", dailyValues);

            Assert.Equal(dailyVals, position.GetDailyValuation().Columns[$"{testSymbol}_MarketValue"]);
        }
        public PortfolioData GetPortfolioData(string portfolioName, List <Trade> allTrades)
        {
            List <string> distinctTickers = allTrades.Select(t => t.Ticker).Distinct().ToList();

            PortfolioData userPortfolio = new PortfolioData(portfolioName);

            foreach (string ticker in distinctTickers)
            {
                PositionFormulas position = new PositionFormulas(ticker);
                foreach (Trade trade in allTrades)
                {
                    if (trade.Ticker == ticker)
                    {
                        position.AddTransaction(trade);
                    }
                }
                List <SecurityPrices> marketPrices      = _repo.GetSecurityPrices(ticker);
                DataFrame             marketPricesFrame = CreatePriceTable(marketPrices);

                position.CalculateDailyValuation(marketPricesFrame);
                userPortfolio.AddPositon(position);
            }
            return(userPortfolio);
        }