Package com.opengamma.master.position

Examples of com.opengamma.master.position.ManageableTrade


  private void extractPropertyData(Property<?> property, BeanDataSink<?> sink) {
    sink.setValue(property.name(), getStringConvert().convertToString(property.metaProperty().get(property.bean())));
  }

  /* package */ UniqueId addTrade(BeanDataSource tradeData, UniqueId nodeId) {
    ManageableTrade trade = buildTrade(tradeData);
    Security security = trade.getSecurityLink().resolve(_securitySource);
    // this slightly awkward approach is due to the portfolio master API. you can look up a node directly but in order
    // to save it you have to save the whole portfolio. this means you need to look up the node to find the portfolio
    // ID, look up the portfolio, find the node in the portfolio, modify that copy of the node and save the portfolio
    // TODO can use a portfolio search request and only hit the master once
    ManageablePortfolioNode node = _portfolioMaster.getNode(nodeId);
    ManageablePortfolio portfolio = _portfolioMaster.get(node.getPortfolioId()).getPortfolio();
    ManageablePortfolioNode portfolioNode = findNode(portfolio, nodeId);
    ManageablePosition position = findPosition(portfolioNode, security);
    if (position == null) {
      // no position in this security on the node, create a new position just for this trade
      ManageablePosition newPosition = new ManageablePosition(trade.getQuantity(), security.getExternalIdBundle());
      newPosition.addTrade(trade);
      ManageablePosition savedPosition = getPositionMaster().add(new PositionDocument(newPosition)).getPosition();
      portfolioNode.addPosition(savedPosition.getUniqueId());
      _portfolioMaster.update(new PortfolioDocument(portfolio));
      return savedPosition.getTrades().get(0).getUniqueId();
    } else {
      position.addTrade(trade);
      position.setQuantity(position.getQuantity().add(trade.getQuantity()));
      ManageablePosition savedPosition = getPositionMaster().update(new PositionDocument(position)).getPosition();
      List<ManageableTrade> savedTrades = savedPosition.getTrades();
      return savedTrades.get(savedTrades.size() - 1).getUniqueId();
    }
  }
View Full Code Here


   * to match the quantity in the trade details and a single trade is created for the position.
   * @param tradeData Trade data for the position
   * @param positionId Unique ID of the position
   */
  /* package */ void updatePosition(BeanDataSource tradeData, UniqueId positionId) {
    ManageableTrade trade = buildTrade(tradeData);
    // TODO check if the ID is versioned?
    ManageablePosition position = getPositionMaster().get(positionId).getPosition();
    // TODO this is a temporary workaround for a client bug. not sure what the correct behaviour is yet
    trade.setUniqueId(null);
    /*if (!trade.getSecurityLink().equals(position.getSecurityLink())) {
      throw new IllegalArgumentException("Cannot update a position's security. new version " + trade.getSecurityLink() +
                                             ", previous version: " + position.getSecurityLink());
    }*/
    if (position.getTrades().size() != 0) {
      throw new IllegalArgumentException("Cannot directly update a position that contains trade. Update the trades");
    }
    position.setTrades(Lists.newArrayList(trade));
    position.setQuantity(trade.getQuantity());
    getPositionMaster().update(new PositionDocument(position)).getPosition();
  }
View Full Code Here

    getPositionMaster().update(new PositionDocument(position)).getPosition();
  }

  // TODO would it make more sense to have a void return type? does the client use the returned ID?
  /* package */ UniqueId updateTrade(BeanDataSource tradeData) {
    ManageableTrade trade = buildTrade(tradeData);
    ManageableTrade previousTrade = getPositionMaster().getTrade(trade.getUniqueId());
    ManageablePosition position = getPositionMaster().get(previousTrade.getParentPositionId()).getPosition();
    if (!trade.getSecurityLink().equals(previousTrade.getSecurityLink())) {
      throw new IllegalArgumentException("Cannot update a trade's security. new version " + trade +
                                             ", previous version: " + previousTrade);
    }
    List<ManageableTrade> trades = Lists.newArrayList();
    for (ManageableTrade existingTrade : position.getTrades()) {
      if (existingTrade.getUniqueId().equals(trade.getUniqueId())) {
        trades.add(trade);
        position.setQuantity(position.getQuantity().subtract(existingTrade.getQuantity()).add(trade.getQuantity()));
      } else {
        trades.add(existingTrade);
      }
    }
    position.setTrades(trades);
    ManageablePosition savedPosition = getPositionMaster().update(new PositionDocument(position)).getPosition();
    ManageableTrade savedTrade = savedPosition.getTrade(trade.getUniqueId().getObjectId());
    if (savedTrade == null) {
      // shouldn't ever happen
      throw new DataNotFoundException("Failed to save trade " + trade + " to position " + savedPosition);
    } else {
      return savedTrade.getUniqueId();
    }
  }
View Full Code Here

    } else {
      ManageableSecurity savedUnderlying = getSecurityMaster().add(new SecurityDocument(underlying)).getSecurity();
      security = buildSecurity(securityData, savedUnderlying);
    }
    ManageableSecurity savedSecurity = getSecurityMaster().add(new SecurityDocument(security)).getSecurity();
    ManageableTrade trade = buildTrade(tradeData);
    trade.setSecurityLink(new ManageableSecurityLink(savedSecurity.getUniqueId()));
    ManageablePosition position = new ManageablePosition();
    position.setQuantity(BigDecimal.ONE);
    position.setSecurityLink(new ManageableSecurityLink(trade.getSecurityLink()));
    position.setTrades(Lists.newArrayList(trade));
    ManageablePosition savedPosition = getPositionMaster().add(new PositionDocument(position)).getPosition();
    ManageableTrade savedTrade = savedPosition.getTrades().get(0);

    PortfolioSearchRequest searchRequest = new PortfolioSearchRequest();
    searchRequest.addNodeObjectId(nodeId.getObjectId());
    PortfolioSearchResult searchResult = getPortfolioMaster().search(searchRequest);
    ManageablePortfolio portfolio = searchResult.getSinglePortfolio();
    ManageablePortfolioNode node = findNode(portfolio, nodeId);
    node.addPosition(savedPosition.getUniqueId());
    getPortfolioMaster().update(new PortfolioDocument(portfolio));
    return savedTrade.getUniqueId();
  }
View Full Code Here

  /* package */ UniqueId updatePosition(UniqueId positionId,
                                        BeanDataSource tradeData,
                                        BeanDataSource securityData,
                                        BeanDataSource underlyingData) {
    ManageableTrade trade = buildTrade(tradeData);
    ManageablePosition position = getPositionMaster().get(positionId).getPosition();
    ManageableSecurity previousSecurity = loadSecurity(position.getSecurityLink());
    return updateSecuritiesAndPosition(securityData, underlyingData, trade, previousSecurity, positionId);
  }
View Full Code Here

      underlying is present
      underlying type is correct
      security type hasn't changed
      trade ID is versioned
    */
    ManageableTrade trade = buildTrade(tradeData);
    ManageableTrade previousTrade = getPositionMaster().getTrade(trade.getUniqueId());
    ManageableSecurity previousSecurity = loadSecurity(previousTrade.getSecurityLink());
    UniqueId previousPositionId = previousTrade.getParentPositionId();
    return updateSecuritiesAndPosition(securityData, underlyingData, trade, previousSecurity, previousPositionId);
  }
View Full Code Here

    ManageableSecurity savedSecurity = getSecurityMaster().update(new SecurityDocument(security)).getSecurity();
    trade.setSecurityLink(new ManageableSecurityLink(savedSecurity.getUniqueId()));
    ManageablePosition position = getPositionMaster().get(positionId).getPosition();
    position.setTrades(Lists.newArrayList(trade));
    ManageablePosition savedPosition = getPositionMaster().update(new PositionDocument(position)).getPosition();
    ManageableTrade savedTrade = savedPosition.getTrades().get(0);
    return savedTrade.getUniqueId();
  }
View Full Code Here

      JSONObject jsonObject = new JSONObject(json);
      if (jsonObject.has("trades")) {
        JSONArray jsonArray = jsonObject.getJSONArray("trades");
        for (int i = 0; i < jsonArray.length(); i++) {
          JSONObject tradeJson = jsonArray.getJSONObject(i);
          ManageableTrade trade = new ManageableTrade();
    
          if (tradeJson.has("premium")) {
            trade.setPremium(tradeJson.getDouble("premium"));
          }
          if (tradeJson.has("counterParty")) {
            trade.setCounterpartyExternalId(ExternalId.of(Counterparty.DEFAULT_SCHEME, tradeJson.getString("counterParty")));
          }
          if (tradeJson.has("premiumCurrency")) {
            trade.setPremiumCurrency(Currency.of(tradeJson.getString("premiumCurrency")));
          }
          if (tradeJson.has("premiumDate")) {
            LocalDate premiumDate = LocalDate.parse(tradeJson.getString("premiumDate"));
            trade.setPremiumDate(premiumDate);
            if (tradeJson.has("premiumTime")) {
              LocalTime premiumTime = LocalTime.parse(tradeJson.getString("premiumTime"));
              ZoneOffset premiumOffset = getOffset(tradeJson, "premiumOffset");
              ZonedDateTime zonedDateTime = premiumDate.atTime(premiumTime).atZone(premiumOffset);
              trade.setPremiumTime(zonedDateTime.toOffsetDateTime().toOffsetTime());
            }
          }
          if (tradeJson.has("quantity")) {
            trade.setQuantity(new BigDecimal(tradeJson.getString("quantity")));
          }
          if (tradeJson.has("tradeDate")) {
            LocalDate tradeDate = LocalDate.parse(tradeJson.getString("tradeDate"));
            trade.setTradeDate(tradeDate);
            if (tradeJson.has("tradeTime")) {
              LocalTime tradeTime = LocalTime.parse(tradeJson.getString("tradeTime"));
              ZoneOffset tradeOffset = getOffset(tradeJson, "tradeOffset");
              ZonedDateTime zonedDateTime = tradeDate.atTime(tradeTime).atZone(tradeOffset);
              trade.setTradeTime(zonedDateTime.toOffsetDateTime().toOffsetTime());
            }   
          }
          addTradeAttributes(trade, tradeJson);
          trades.add(trade);
        }
View Full Code Here

  private void storeTrades(final List<ManageableTrade> clonedTrades, final List<ManageableTrade> trades, final UniqueId parentPositionId) {
    for (int i = 0; i < clonedTrades.size(); i++) {
      final ObjectId objectId = _objectIdSupplier.get();
      final UniqueId uniqueId = objectId.atVersion("");
      final ManageableTrade origTrade = trades.get(i);
      final ManageableTrade clonedTrade = clonedTrades.get(i);
      clonedTrade.setUniqueId(uniqueId);
      origTrade.setUniqueId(uniqueId);
      clonedTrade.setParentPositionId(parentPositionId);
      origTrade.setParentPositionId(parentPositionId);
      _storeTrades.put(objectId, clonedTrade);
    }
  }
View Full Code Here

  //-------------------------------------------------------------------------
  @Override
  public ManageableTrade getTrade(final UniqueId tradeId) {
    ArgumentChecker.notNull(tradeId, "tradeId");
    final ManageableTrade trade = _storeTrades.get(tradeId.getObjectId());
    if (trade == null) {
      throw new DataNotFoundException("Trade not found: " + tradeId.getObjectId());
    }
    return JodaBeanUtils.clone(trade);
  }
View Full Code Here

TOP

Related Classes of com.opengamma.master.position.ManageableTrade

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.