Пример #1
0
  @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);
    }
  }
Пример #2
0
  @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);
    }
  }
Пример #3
0
 @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);
   }
 }