private static void Initialize() { StockEngine engine = new YahooStockEngine(); engine.ReInitializeAllPlayers(400); IEnumerable<Quote> stocks = engine.LookupQuotesForPlayers(engine.GetAllPlayers().Select(x => x.Name).ToArray()); engine.InsertQuotes(stocks); Log.Information("Saved {0} new stock prices to the database.", stocks.Count()); Log.Information("Initialized all players"); Console.WriteLine("Saved {0} new stock prices to the database.", stocks.Count()); Console.WriteLine("Initialized all players"); }
private static void Scan() { StockEngine engine = new YahooStockEngine(); IEnumerable<string> symbols = engine.LoadSymbolsFromTextFile("aim.txt"); //IEnumerable<Quote> stocks = engine.LookupPrices(symbols); // Get everything string[] playerNames = engine.GetAllPlayers().Select(x => x.Name).ToArray(); IEnumerable<Quote> stocks = engine.LookupQuotesForPlayers(playerNames); if (stocks.Count() < 1 || stocks.Any(s => s == null)) { // Try Google Log.Information("No stocks found - switching to the Google API"); engine = new GoogleStockEngine(); symbols = engine.LoadSymbolsFromTextFile("aim.txt"); stocks = engine.LookupQuotesForPlayers(playerNames); } engine.InsertQuotes(stocks); Log.Information("Saved {0} new stock prices to the database.", stocks.Count()); // // Calculate if investments should be sold for each players // foreach (Player player in engine.GetAllPlayers()) { Quote quote = engine.GetCurrentQuoteForPlayer(player.Name); Investment investment = engine.GetCurrentInvestmentForPlayer(player.Name); if (player.ShouldSellInvestment(quote, investment)) { // Sell sell sell Log.Information("Selling {0}'s investment in {1} - ({2}) current price is {3}", player.Name, investment.Symbol, investment.SellReason, quote.LastTradePrice.Value); engine.SellInvestment(investment.Id, quote.LastTradePrice.Value, investment.SellReason.Value, DateTime.Now); // Buy buy buy string nextSymbol = engine.PickRandomSymbol(symbols); Quote nextQuote = engine.LookupPrice(nextSymbol); engine.InitializePlayer(player, nextQuote, 400); Log.Information("New investment set up for {0}. Bought {1} shares in {2} at price of {3}", player.Name, investment.Quantity, quote.Symbol, quote.LastTradePrice.Value); } } }
public void ShouldSellInvestment_No_Change() { // Arrange Investment investment = new Investment() { Symbol = "BLAH", PurchasePrice = 1.0m, PurchaseDate = DateTime.Today }; Quote quote = new Quote() { Symbol = "BLAH", LastTradePrice = 1.0m }; // Act StockEngine engine = new YahooStockEngine(); foreach (Player player in engine.GetAllPlayers()) { bool shouldSell = player.ShouldSellInvestment(quote, investment); // Assert Assert.False(shouldSell, "Failed ShouldSellInvestment being false for " + player.Name); Assert.IsNull(investment.SellReason, "Failed SellReason being null for " + player.Name); } }
public void LookupQuotesForPlayers() { // Arrange StockEngine engine = new YahooStockEngine(); decimal walletSize = 400; engine.ReInitializeAllPlayers(walletSize); // Act IEnumerable<Quote> quotes = engine.LookupQuotesForPlayers(engine.GetAllPlayers().Select(x => x.Name).ToArray()); // Assert Assert.That(quotes.Count(), Is.EqualTo(5)); }
public void ShouldSellInvestment_Low_Price() { // Arrange Investment investment = new Investment() { Symbol = "BLAH", PurchasePrice = 1.0m, PurchaseDate = DateTime.Today }; Quote quote = new Quote() { Symbol = "BLAH", LastTradePrice = 0.7m }; // Act StockEngine engine = new YahooStockEngine(); foreach (Player player in engine.GetAllPlayers()) { bool shouldSell = player.ShouldSellInvestment(quote, investment); // Assert Assert.True(shouldSell, "Failed ShouldSellInvestment being true for " + player.Name); Assert.That(investment.SellReason, Is.EqualTo(SellReason.LowPrice), "Failed SellReason being Low for " + player.Name); } }