public InstrumentDefinition<?> convert(final Trade trade) { Validate.notNull(trade, "trade"); Validate.isTrue( trade.getSecurity() instanceof IRFutureOptionSecurity, "Can only handle trades with security type IRFutureOptionSecurity"); final Object securityDefinition = _securityConverter.convert((IRFutureOptionSecurity) trade.getSecurity()); final int quantity = 1; // trade.getQuantity().intValue(); TODO: correct when position/trade dilemma is solved. // TODO trade time or premium time? // final ZonedDateTime tradeDate = // ZonedDateTime.of(trade.getPremiumDate().atTime(trade.getPremiumTime()), // TimeZone.UTC); //TODO get the real time zone final ZonedDateTime tradeDate = ZonedDateTime.of( trade.getTradeDate().atTime(trade.getTradeTime()), TimeZone.UTC); // TODO get the real time zone final Double tradePrice = trade.getPremium(); Validate.notNull( tradePrice, "IRFutureOption trade must have a premium set. The interpretation of premium is the market price, without unit, i.e. not %"); // TODO: The premium is not the right place to store the trade price... if (securityDefinition instanceof InterestRateFutureOptionMarginSecurityDefinition) { final InterestRateFutureOptionMarginSecurityDefinition underlyingOption = (InterestRateFutureOptionMarginSecurityDefinition) securityDefinition; return new InterestRateFutureOptionMarginTransactionDefinition( underlyingOption, quantity, tradeDate, tradePrice); } final InterestRateFutureOptionPremiumSecurityDefinition underlyingOption = (InterestRateFutureOptionPremiumSecurityDefinition) securityDefinition; return new InterestRateFutureOptionPremiumTransactionDefinition( underlyingOption, quantity, tradeDate, tradePrice); }
@Override public List<ExternalId> getIds(Trade trade) { Security security = trade.getSecurity(); if (security instanceof FinancialSecurity) { return ((FinancialSecurity) security).accept(_visitor); } return null; }
private static void cacheTradesPositionsAndSecurities( final CachingComputationTargetResolver resolver, final PortfolioNode node) { final Collection<Position> positions = node.getPositions(); resolver.cachePositions(positions); for (Position position : positions) { resolver.cacheSecurities(Collections.singleton(position.getSecurity())); for (Trade trade : position.getTrades()) { resolver.cacheSecurities(Collections.singleton(trade.getSecurity())); } resolver.cacheTrades(position.getTrades()); } for (PortfolioNode child : node.getChildNodes()) { cacheTradesPositionsAndSecurities(resolver, child); } }