@Override public void openOrder(int orderId, Contract contract, Order order, OrderState orderState) { try { if (logger.isDebugEnabled()) logger.debug( "openOrder: {} {} {} {}", new Object[] { orderId, Util.toString(contract), Util.toString(order), Util.toString(orderState) }); OpenOrder openOrder = openOrdersById.get(orderId); if (openOrder != null) { if ((openOrder.isFilled() || (!openOrder.isOpen() && openOrder.getQuantityFilled() > 0)) && orderState.m_commission != Double.MAX_VALUE) { closeOpenOrder(openOrder, orderState.m_commission); } } else { if ("PendingSubmit".equals(orderState.m_status) || "PreSubmitted".equals(orderState.m_status) || "Submitted".equals(orderState.m_status)) { openOrder = toOpenOrder(contract, order); openOrdersById.put(orderId, openOrder); logger.info("Added {}", openOrder); } } } catch (Throwable t) { logger.error(t.getMessage(), t); } }
@Override public void execDetails(int reqId, Contract contract, Execution execution) { try { if (logger.isDebugEnabled()) logger.debug( "execDetails: {} {} {}", new Object[] {reqId, Util.toString(contract), Util.toString(execution)}); OpenOrder openOrder = openOrdersById.get(execution.m_orderId); DateTime dt = DateTimeFormat.forPattern("yyyyMMdd HH:mm:ss").parseDateTime(execution.m_time); if (openOrder != null) { int quantityChange = openOrder.isBuy() ? execution.m_shares : -execution.m_shares; openOrder.update(quantityChange, execution.m_price, dt); logExecution(openOrder, quantityChange); } else { logger.info( "Execution does not match any open order {} {}", Util.toString(contract), Util.toString(execution)); } } catch (Throwable t) { // Do not allow exceptions come back to the socket -- it will cause // disconnects logger.error(t.getMessage(), t); } }
@Override public void updatePortfolio( Contract contract, int qty, double marketPrice, double marketValue, double averageCost, double unrealizedPNL, double realizedPNL, String accountName) { try { if (logger.isDebugEnabled()) logger.debug( "updatePortfolio: {} {} {} {} {} {} {} {}", new Object[] { Util.toString(contract), qty, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName }); if (qty != 0) { Symbol symbol = toSymbol(contract); double costBasis = averageCost / (contract.m_multiplier != null ? Integer.parseInt(contract.m_multiplier) : 1); Position position = new Position(symbol, qty, costBasis, 0.0); portfolio.setPosition(symbol, position); logger.info( "Updated {}, last: {}, unrealized pnl: {}", new Object[] {position, marketPrice, position.getProfitLoss(marketPrice)}); } } catch (Throwable t) { logger.error(t.getMessage(), t); } }