public void Test_StocksVolumeWeightedStockPrice() { string stock = "GIN"; double lastDividend = 0; double stockPrice = 25; CommonStock testStock = new CommonStock(stock, lastDividend, stockPrice); //Add 10 trades testStock.addTrade(DateTime.Now.AddMinutes(-3), 100, true, 250); //Sell 100 shares now at 250 testStock.addTrade(DateTime.Now.AddMinutes(-1), 300, false, 260); //Buy 300 shares now at 260 testStock.addTrade(DateTime.Now.AddMinutes(-6), 10, true, 240); //Sell 10 shares now at 240 testStock.addTrade(DateTime.Now, 400, true, 230); //Sell 400 shares now at 230 testStock.addTrade(DateTime.Now.AddMinutes(-8), 1000, false, 235); //Sell 1000 shares now at 235 testStock.addTrade(DateTime.Now.AddMinutes(-30), 100, true, 250); //Sell 100 shares now at 250 testStock.addTrade(DateTime.Now.AddMinutes(-16), 300, false, 260); //Buy 300 shares now at 260 testStock.addTrade(DateTime.Now.AddMinutes(-5), 10, true, 240); //Sell 10 shares now at 240 testStock.addTrade(DateTime.Now.AddMinutes(-2), 400, true, 230); //Sell 400 shares now at 230 testStock.addTrade(DateTime.Now.AddMinutes(-7), 1000, false, 235); //Sell 1000 shares now at 235 double expectedResult = (100 * 250.0 + 300 * 260 + 10 * 240 + 400 * 230 + 1000 * 235 + 10 * 240 + 400 * 230 + 1000 * 235) / (100 + 300 + 10 + 400 + 1000 + 10 + 400 + 1000); double vwsp = testStock.volumeWeightedStockPrice(); Assert.AreEqual(expectedResult, vwsp); }
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 TestCommonShareDividendYieldCalculation(double lastdividend, int parValue, double price, double expectedValue) { CommonStock commonStock = new CommonStock("Test", lastdividend, parValue); Assert.AreEqual(commonStock.CalculateDividendYield(price), expectedValue); }
public void TestPERatioCalculation(double lastdividend, int parValue, double price, double expectedValue) { CommonStock commonStock = new CommonStock("Test", lastdividend, parValue); Assert.AreEqual(commonStock.CalculatePriceEarningsRatio(price), expectedValue); }
public void CalculateVolumeWeightedStockPriceTest() { var stock = new CommonStock { symbol = "TEA", lastDividend = 10, parValue = 100 }; var trade1 = new Trade { stockSymbol = "TEA", timestamp = DateTime.Now.AddMinutes(-60), price = 5, direction = TradeDirection.BUY, quantity = 50 }; exchangeStock.RecordTrade(trade1); var trade2 = new Trade { stockSymbol = "TEA", timestamp = DateTime.Now, price = 10, direction = TradeDirection.BUY, quantity = 100 }; exchangeStock.RecordTrade(trade2); var trade3 = new Trade { stockSymbol = "TEA", timestamp = DateTime.Now, price = 100, direction = TradeDirection.BUY, quantity = 3 }; exchangeStock.RecordTrade(trade3); var currentStockPrice = exchangeStock.CalculateVolumeWeightedStockPrice("TEA", 15); var expectedStockPrice = 1300d / 103d; Assert.AreEqual(expectedStockPrice, currentStockPrice); }
public void TestInvalidPriceInYieldCalcThrowsException(double price) { CommonStock commonStock = new CommonStock("Test", 8, 100); CommonStock preferedStock = new PreferredStock("Test", 8, 100, 0.02); Assert.Throws <ArgumentOutOfRangeException>(() => commonStock.CalculateDividendYield(price)); Assert.Throws <ArgumentOutOfRangeException>(() => preferedStock.CalculateDividendYield(price)); }
public void AddCommonStockTest() { var stockCommon = new CommonStock { symbol = "POP", lastDividend = 8, parValue = 100 }; exchangeStock.AddStock(stockCommon); Assert.AreEqual(stockCommon, exchangeStock.GetStockBySymbol("POP")); }
public void CalculatPriceEarningsRatioForComonStockTest() { var stockCommon = new CommonStock { symbol = "TEA", lastDividend = 10, parValue = 100 }; var currentPeRatio = exchangeStock.CalculatePriceEarningsRatio(stockCommon, 100); var expectedPeRatio = 1000; Assert.AreEqual(expectedPeRatio, currentPeRatio); }
public void CalculateDividendYieldForCommonStockTest() { var stockCommon = new CommonStock { symbol = "TEA", lastDividend = 10, parValue = 100 }; var currentDividendCommon = exchangeStock.CalculateDividendYield(stockCommon, 100); var expectedDividendYield = 0.1; Assert.AreEqual(expectedDividendYield, currentDividendCommon); }
public void GetTrades_ForACertainStock_ReturnsTheCorrectTradesForThatStock() { // Arrange var dateTimeProvider = new Mock <IDateTimeProvider>(); var tradeRepository = new Mock <TradeRepository>(dateTimeProvider.Object); var teaStock = new CommonStock { StockSymbol = "TEA" }; var popStock = new CommonStock { StockSymbol = "POP" }; var aleStock = new CommonStock { StockSymbol = "ALE" }; tradeRepository.Protected().Setup <List <Trade> >("Trades").Returns( new List <Trade> { new Trade { Stock = teaStock, Quantity = 1 }, new Trade { Stock = popStock, Quantity = 2 }, new Trade { Stock = aleStock, Quantity = 3 }, new Trade { Stock = aleStock, Quantity = 4 }, new Trade { Stock = teaStock, Quantity = 5 }, new Trade { Stock = teaStock, Quantity = 6 }, new Trade { Stock = aleStock, Quantity = 7 } }); // Act var trades = tradeRepository.Object.GetTrades(new CommonStock { StockSymbol = "TEA" }); // Assert Assert.AreEqual(3, trades.Count); var quantities = trades.Select(x => x.Quantity).ToList(); Assert.That(quantities, Contains.Item(1)); Assert.That(quantities, Contains.Item(5)); Assert.That(quantities, Contains.Item(6)); }
public void Equals_IfStockSymbolIsNull_ReturnsFalse() { // Arrange var stock1 = new CommonStock(); var stock2 = new PreferredStock(); // Act var areEquals = stock1.Equals(stock2); // Assert Assert.False(areEquals); }
public void Test_StocksCommonYieldException() { string stock = "POP"; double lastDividend = 8; double stockPrice = 25; double price = 0; CommonStock testStock = new CommonStock(stock, lastDividend, stockPrice); double dividendYield = testStock.DividendYield(price); }
public void Equals_WithOneObjectNotAStock_ReturnsFalse() { // Arrange var stock1 = new CommonStock { StockSymbol = "TEA" }; var trade = new Trade(); // Act var areEquals = stock1.Equals(trade); // Assert Assert.False(areEquals); }
public void CalculateDividendYield_WithZeroPrice_ThrowsArgumentException() { // Arrange var stock = new CommonStock { LastDividend = 20 }; // Act var testDelegate = new TestDelegate(() => stock.CalculateDividendYield(0)); // Assert Assert.That(testDelegate, Throws.ArgumentException); }
public decimal CalculateDividendYield_WithNonZeroPriceAndPositiveDividend_CorrectlyCalculates(decimal price) { // Arrange var stock = new CommonStock { LastDividend = 10 }; // Act var result = stock.CalculateDividendYield(price); // Assert return(result); }
public void Test_StocksCommonYield() { string stock = "POP"; double lastDividend = 8; double stockPrice = 25; double price = 64; double expected = lastDividend / price; CommonStock testStock = new CommonStock(stock, lastDividend, stockPrice); double dividendYield = testStock.DividendYield(price); Assert.AreEqual(expected, dividendYield); }
public void Equals_WithTwoStocksWithDifferentSymbol_ReturnsFalse() { // Arrange var stock1 = new CommonStock { StockSymbol = "TEA" }; var stock2 = new CommonStock { StockSymbol = "TEB" }; // Act var areEquals = stock1.Equals(stock2); // Assert Assert.False(areEquals); }
public void Equals_WithTwoStocksWithSameSymbolOfDifferentSubtypes_ReturnsTrue() { // Arrange var stock1 = new CommonStock { StockSymbol = "TEA" }; var stock2 = new PreferredStock { StockSymbol = "TEA" }; // Act var areEquals = stock1.Equals(stock2); // Assert Assert.True(areEquals); }
public void SellTradeRecordTest() { var stockCommon = new CommonStock { symbol = "POP", lastDividend = 8, parValue = 100 }; exchangeStock.AddStock(stockCommon); exchangeStock.BuyStock(stockCommon.symbol, 10, 3); exchangeStock.SellStock(stockCommon.symbol, 5, 5); exchangeStock.BuyStock(stockCommon.symbol, 5, 2); var currentBuyTrades = exchangeStock.tradeList.Where(trade => trade.direction.Equals(TradeDirection.SELL)).ToList().Count; var expectedBuyTrades = 1; Assert.AreEqual(expectedBuyTrades, currentBuyTrades); }
public void TestCommonStockYield() { // Test Common Stock CommonStock stock; stock = new CommonStock("TST", 0, 100); float yield; // Test 0/50 => 0 yield = stock.GetDividendYield(50); Assert.AreEqual(0, yield, float.Epsilon); // Test 10/10 => 1 stock.LastDividend = 10; yield = stock.GetDividendYield(10); Assert.AreEqual(1, yield, float.Epsilon); // Test 10/0 => NaN yield = stock.GetDividendYield(0); Assert.AreEqual(float.NaN, yield); // LastPrice stock = new CommonStock("TST", 0, 100); // Test 0/50 => 0 stock.LastPrice = 50; yield = stock.GetDividendYield(); Assert.AreEqual(0, yield, float.Epsilon); // Test 10/10 => 1 stock.LastPrice = 10; stock.LastDividend = 10; yield = stock.GetDividendYield(); Assert.AreEqual(1, yield, float.Epsilon); // Test 10/0 => NaN stock.LastPrice = 0; yield = stock.GetDividendYield(); Assert.AreEqual(float.NaN, yield); }
public void Setup() { tradeRepositoryMock = new Mock <ITradeRepository>(); var now = new DateTime(2017, 2, 17, 22, 22, 34); var dateTimeProvider = new Mock <IDateTimeProvider>(); dateTimeProvider.Setup(x => x.Now).Returns(now); tradeCalculator = new TradeCalculator(tradeRepositoryMock.Object, dateTimeProvider.Object); teaStock = new CommonStock { StockSymbol = "TEA" }; ginStock = new CommonStock { StockSymbol = "GIN" }; aleStock = new CommonStock { StockSymbol = "ALE" }; }
public void TestStockCollectionGeometricMean() { StockCollection stocks = new StockCollection(); GenericStock stock1 = new CommonStock("TS1", 5, 100); GenericStock stock2 = new CommonStock("TS2", 10, 100); GenericStock stock3 = new CommonStock("TS3", 15, 100); stocks.Add(stock1); stocks.Add(stock2); stocks.Add(stock3); float gm; // If no any prices => no result gm = stocks.GetGeometricMean(); Assert.AreEqual(float.NaN, gm); float price1 = 110; float price2 = 50; float price3 = 10; stock1.LastPrice = price1; stock2.LastPrice = price2; // If there is at least one stock w/o price => no result gm = stocks.GetGeometricMean(); Assert.AreEqual(float.NaN, gm); stock3.LastPrice = price3; // result is the 3-sq of price1*price2*price3 gm = stocks.GetGeometricMean(); float mul = 1.0f; mul *= price1; mul *= price2; mul *= price3; float nsq = 1f / 3; Assert.AreEqual(Math.Pow(mul, nsq), gm, 0.0001f); }
public void Test_StocksAddTrades() { string stock = "GIN"; double lastDividend = 0; double stockPrice = 25; CommonStock testStock = new CommonStock(stock, lastDividend, stockPrice); //Add 5 trades testStock.addTrade(DateTime.Now.AddMinutes(-3), 100, true, 250); //Sell 100 shares now at 250 testStock.addTrade(DateTime.Now.AddMinutes(-1), 300, false, 260); //Buy 300 shares now at 260 testStock.addTrade(DateTime.Now.AddMinutes(-6), 10, true, 240); //Sell 10 shares now at 240 testStock.addTrade(DateTime.Now, 400, true, 230); //Sell 400 shares now at 230 testStock.addTrade(DateTime.Now.AddMinutes(-8), 1000, false, 235); //Sell 1000 shares now at 235 Assert.AreEqual(5, testStock.stockTrades.Count); //Check there are 5 trades Assert.AreEqual(230, testStock.stockTrades.Values[0].tradePrice); //Check the first trade in the list has a price of 235 - i.e. the most recent trade }
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); }
public void TestCommonStockPERatio() { CommonStock stock; stock = new CommonStock("TST", 10, 100); float pe; // Test 0/10 => 0 pe = stock.GetPERatio(0); Assert.AreEqual(0, pe, float.Epsilon); // Test 10/10 => 1 pe = stock.GetPERatio(10); Assert.AreEqual(1, pe, float.Epsilon); // Test 10/0 => NaN stock.LastDividend = 0; pe = stock.GetPERatio(10); Assert.AreEqual(float.NaN, pe); // LastPrice stock = new CommonStock("TST", 10, 100); // Test 0/10 => 0 stock.LastPrice = 0; pe = stock.GetPERatio(); Assert.AreEqual(0, pe, float.Epsilon); // Test 10/10 => 1 stock.LastPrice = 10; pe = stock.GetPERatio(); Assert.AreEqual(1, pe, float.Epsilon); // Test 10/0 => NaN stock.LastPrice = 10; stock.LastDividend = 0; pe = stock.GetPERatio(); Assert.AreEqual(float.NaN, pe); }
public void AddTrade_WithDetails_SuccessfullyAddsTradeToList() { // Arrange var dateTimeProvider = new Mock <IDateTimeProvider>(); var localTimestamp = new DateTime(2017, 2, 17, 22, 14, 44); dateTimeProvider.Setup(x => x.Now).Returns(localTimestamp); var tradeRepository = new TradeRepository(dateTimeProvider.Object); var teaStock = new CommonStock { StockSymbol = "TEA" }; // Act var trade = tradeRepository.AddTrade(teaStock, 100, TransactionType.Buy, 1.23M); // Assert Assert.AreEqual(1, tradeRepository.TradeCount); Assert.AreEqual(100, trade.Quantity); Assert.AreEqual(TransactionType.Buy, trade.TransactionType); Assert.AreEqual(1.23, trade.TradePrice); Assert.AreEqual(localTimestamp, trade.LocalTimestamp); Assert.AreEqual(teaStock, trade.Stock); }
public void Test_StocksVolumeWeightedStockPriceException() { string stock = "GIN"; double lastDividend = 0; double stockPrice = 25; CommonStock testStock = new CommonStock(stock, lastDividend, stockPrice); //Add 10 trades testStock.addTrade(DateTime.Now.AddMinutes(-23), 100, true, 250); //Sell 100 shares now at 250 testStock.addTrade(DateTime.Now.AddMinutes(-21), 300, false, 260); //Buy 300 shares now at 260 testStock.addTrade(DateTime.Now.AddMinutes(-26), 10, true, 240); //Sell 10 shares now at 240 testStock.addTrade(DateTime.Now.AddMinutes(-22), 400, true, 230); //Sell 400 shares now at 230 testStock.addTrade(DateTime.Now.AddMinutes(-28), 1000, false, 235); //Sell 1000 shares now at 235 testStock.addTrade(DateTime.Now.AddMinutes(-30), 100, true, 250); //Sell 100 shares now at 250 testStock.addTrade(DateTime.Now.AddMinutes(-16), 300, false, 260); //Buy 300 shares now at 260 testStock.addTrade(DateTime.Now.AddMinutes(-25), 10, true, 240); //Sell 10 shares now at 240 testStock.addTrade(DateTime.Now.AddMinutes(-42), 400, true, 230); //Sell 400 shares now at 230 testStock.addTrade(DateTime.Now.AddMinutes(-17), 1000, false, 235); //Sell 1000 shares now at 235 double vwsp = testStock.volumeWeightedStockPrice(); }