public void TestGeometricMeanOfVWSP()
        {
            CommonStock commonStock1 = new CommonStock("Test", 8, 100);
            CommonStock commonStock2 = new CommonStock("Second Test", 10, 60);

            var now = DateTime.Now;

            var oneMinsBeforeNow   = now.AddMinutes(-1);
            var twoMinsBeforeNow   = now.AddMinutes(-2);
            var threeMinsBeforeNow = now.AddMinutes(-3);
            var fourMinsBeforeNow  = now.AddMinutes(-4);

            var firstTrade  = new Trade(1, TradeIndicator.Buy, 10, oneMinsBeforeNow);
            var secondTrade = new Trade(2, TradeIndicator.Buy, 10, twoMinsBeforeNow);
            var thirdTrade  = new Trade(3, TradeIndicator.Buy, 10, threeMinsBeforeNow);
            var fourthTrade = new Trade(4, TradeIndicator.Buy, 10, fourMinsBeforeNow);
            var fifthTrade  = new Trade(6, TradeIndicator.Buy, 20, fourMinsBeforeNow);

            commonStock1.AddNewTrade(firstTrade);
            commonStock1.AddNewTrade(secondTrade);
            commonStock1.AddNewTrade(thirdTrade);

            commonStock2.AddNewTrade(fourthTrade);
            commonStock2.AddNewTrade(fifthTrade);

            StockMarket market = new StockMarket(new List <CommonStock> {
                commonStock1, commonStock2
            });

            Assert.AreEqual(market.CalculateGBCEWeightedStockPrice(), Math.Sqrt(160), 0.001);
        }
        public void TestVWSPNoTradesInLastFiveMinutes()
        {
            CommonStock commonStock = new CommonStock("Test", 8, 100);

            var now = DateTime.Now;

            var sixMinsFromNow   = now.AddMinutes(6);
            var sevenMinsFromNow = now.AddMinutes(7);
            var sixMinsBeforeNow = now.AddMinutes(-6);

            var firstTrade  = new Trade(1, TradeIndicator.Buy, 10, sixMinsFromNow);
            var secondTrade = new Trade(1, TradeIndicator.Buy, 10, sevenMinsFromNow);
            var thirdTrade  = new Trade(1, TradeIndicator.Buy, 10, sixMinsBeforeNow);

            commonStock.AddNewTrade(firstTrade);
            commonStock.AddNewTrade(secondTrade);
            commonStock.AddNewTrade(thirdTrade);

            Assert.AreEqual(commonStock.CalculateVolumeWeightedStockPrice(), 0);
        }
        public void TestVolumeWeightedStockPrice()
        {
            CommonStock commonStock = new CommonStock("Test", 8, 100);

            var now = DateTime.Now;

            var oneMinsBeforeNow   = now.AddMinutes(-1);
            var twoMinsBeforeNow   = now.AddMinutes(-2);
            var threeMinsBeforeNow = now.AddMinutes(-3);

            var firstTrade  = new Trade(1, TradeIndicator.Buy, 10, oneMinsBeforeNow);
            var secondTrade = new Trade(2, TradeIndicator.Buy, 10, twoMinsBeforeNow);
            var thirdTrade  = new Trade(3, TradeIndicator.Buy, 10, threeMinsBeforeNow);

            commonStock.AddNewTrade(firstTrade);
            commonStock.AddNewTrade(secondTrade);
            commonStock.AddNewTrade(thirdTrade);

            Assert.AreEqual(commonStock.CalculateVolumeWeightedStockPrice(), 10);
        }