@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; }