protected FXOptionSecurity createFXOptionSecurity(final Bundle bundle) { final Currency putCurrency = bundle._firstCurrency; final Currency callCurrency = bundle._secondCurrency; final double putAmount = bundle._firstCurrency.equals(Currency.JPY) ? NOTIONAL * 100 : NOTIONAL; final ZonedDateTime settlementDate = bundle._tradeDate.plusDays(bundle._daysOffset); final Double fxRate = getApproxFXRate( settlementDate.toLocalDate(), Pair.of(bundle._firstCurrency, bundle._secondCurrency)); if (fxRate == null) { return null; } final double callAmount = NOTIONAL * fxRate; final Expiry expiry = new Expiry(settlementDate, ExpiryAccuracy.DAY_MONTH_YEAR); final String dateString = settlementDate.toString(DATE_FORMATTER); final FXOptionSecurity fxOptionSecurity = new FXOptionSecurity( putCurrency, callCurrency, putAmount, callAmount, expiry, settlementDate, bundle._long, new EuropeanExerciseType()); final String callAmountString = NOTIONAL_FORMATTER.format(callAmount); final String putAmountString = NOTIONAL_FORMATTER.format(putAmount); fxOptionSecurity.setName( (bundle._long ? "Long " : "Short ") + "put " + putCurrency + " " + putAmountString + ", call " + callCurrency + " " + callAmountString + " on " + dateString); return fxOptionSecurity; }