public static void open() {
    // create and add stocks
    Stock stock1 = new Stock("BAML", "Bank of America", 5000, 0.15f, 3482, 400);
    stocks.add(stock1);

    // create players
    // Alice will be using the pennying algorithm, and should win
    // over Bob.
    Player Alice = new Player("Alice", "A");
    players.add(Alice);

    // Bob is using the random order algorithm, which has no logic
    // Making a decent profit would be lucky, but is possible.
    Player Bob = new Player("Bob", "B");
    players.add(Bob);

    // create the leader board
    lb = new LeaderBoard(players);

    // create the exchange
    exchange = new Exchange();

    try {
      NewServer.start(8080, exchange);
    } catch (IOException e) {
      System.out.println("Failed to start the server.");
      e.printStackTrace();
      return;
    }

    // add the players to the exchange
    for (Player player : players) {
      exchange.addPlayer(player);
    }

    // Open the exchange
    exchange.startRound(stocks);
  }
  public static void testExchange() {
    // create fake two user algorithms
    // both algorithms in theory could be ported to provide framework
    // for the eventual user of the competition
    PennyingAlgo penny = new PennyingAlgo(exchange, stocks, players);
    Thread user1 = new Thread(penny);
    RandomTrading random = new RandomTrading(exchange, stocks, players);
    Thread user2 = new Thread(random);

    // include a non-aggressive market maker to just set up some orders, and then
    // add some orders to the order book occasionally - not in the game for
    // profit -> this bot is simulating normal consumers looking to buy and
    // sell stocks.
    MarketMaker mm = new MarketMaker(exchange, stocks.get(0), 50, 50, 200);

    // general bot in play for simplification only
    GeneralBot gb = new GeneralBot(exchange, stocks.get(0));

    // price moving bot
    PriceMovingBot pmb = new PriceMovingBot(exchange, stocks.get(0));

    // add God bot
    GodBot god = new GodBot(exchange, stocks.get(0));

    Thread marketM = new Thread(mm);
    Thread generalBot = new Thread(gb);
    Thread priceMover = new Thread(pmb);
    Thread godly = new Thread(god);

    // start the trading
    user1.start();
    user2.start();
    marketM.start();
    generalBot.start();
    priceMover.start();
    godly.start();

    for (int j = 0; j < NUM_SIM_STEPS; j++) {
      try {
        Thread.sleep(75);
        prices.add(stocks.get(0).getPointAvg().get(20));
        balA.add(players.get(0).getBalance());
        balB.add(players.get(1).getBalance());
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

    exchange.endRound();

    lb.update();

    System.out.println("");
    System.out.println("");
    System.out.println("--- ROUND OVER ---");
    System.out.println("");
    System.out.println("");
    System.out.println("Final Portfolio Contents");

    for (Player px : players) {
      System.out.println(px.getName() + " ");
      px.getPortfolio().contents();
    }

    System.out.println("");
    System.out.println("");
    System.out.println("");
    lb.get();
  }