private void closeOpenOrder(OpenOrder openOrder, double commissionAmount) { openOrdersById.remove(openOrder.getOrderId()); if (Double.isNaN(commissionAmount) || commissionAmount <= 0.0) { commissionAmount = commission.calculate(openOrder.getQuantityFilled(), openOrder.getAvgFillPrice()); } openOrder.setCommission(commissionAmount); logger.info("{} {}", openOrder.isFilled() ? "Filled" : "Partially filled", openOrder); Position position = portfolio.getPosition(openOrder.getSymbol()); double[] values = position.update( openOrder.getFillDate(), openOrder.getQuantityFilled(), openOrder.getAvgFillPrice(), openOrder.getCommission()); logTrade(openOrder, position.getQuantity(), values[0], values[1], values[2]); for (OrderListener listener : orderListeners) { try { listener.onOrderFilled(openOrder, position); } catch (Throwable t) { logger.error(t.getMessage(), t); } } }
protected void logTrade( OpenOrder openOrder, int position, double costBasis, double realized, double unrealized) { Object[] params = new Object[] { openOrder.getFillDate(), "TRADE", openOrder.getAction(), openOrder.getType(), openOrder.getQuantityFilled(), openOrder.getSymbol(), openOrder.getSymbol().getCurrency(), openOrder.getAvgFillPrice(), position, Util.round(costBasis, 4), Util.round(realized, 4), Util.round(unrealized, 4), Util.round(openOrder.getCommission(), 4), openOrder.getReference() != null ? openOrder.getReference() : "", accountCode }; blotter.info( MarkerFactory.getMarker("TRADE"), "{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}", params); }