Example #1
0
  @Override
  public OrderResult Execute(Order order, IUserBalance balanceService, IStockInfo stockService) {
    OrderResult result = new OrderResult(order);
    Date submitted = order.getDateSubmitted();
    if (today.equals(submitted)) {
      StockInfo info = stockService.requestCurrentStockData(order.getStock().getStockSymbol());
      if (info != null) {
        attemptTrade(
            result,
            balanceService,
            stockService,
            today,
            info.getDayLow(),
            info.getDayHigh(),
            info.getVolume());
      }
    } else // SELL
    {
      Date lastEvaluated = order.getLastEvaluated();
      if (order
          .getDateSubmitted()
          .equals(
              lastEvaluated)) { // do not try to evaluate again the first day the Limit order was
                                // submitted
        lastEvaluated = getDateOneDayInTheFuture(lastEvaluated);
      }

      List<HistoricalStockInfo> infos =
          stockService.requestDailyHistoricalStockData(
              order.getStock().getStockSymbol(), lastEvaluated);
      if (infos != null && infos.size() > 0) {
        HistoricalStockInfo info;
        for (int i = infos.size() - 1; i >= 0; --i) {
          info = infos.get(i);
          attemptTrade(
              result,
              balanceService,
              stockService,
              info.getDate(),
              info.getDayLow(),
              info.getDayHigh(),
              info.getVolume());
          if (result.getCompleted() || result.getCancelled()) {
            break;
          }
        }
      }
    }

    return result;
  }