final double putAmount = fxNDFDigitalOptionSecurity.getPutAmount();
final double callAmount = fxNDFDigitalOptionSecurity.getCallAmount();
final ZonedDateTime expiry = fxNDFDigitalOptionSecurity.getExpiry().getExpiry();
final ZonedDateTime settlementDate = fxNDFDigitalOptionSecurity.getSettlementDate();
final boolean isLong = fxNDFDigitalOptionSecurity.isLong();
final ForexDefinition underlying;
final CurrencyPair baseQuotePair = _currencyPairs.getCurrencyPair(putCurrency, callCurrency);
if (baseQuotePair == null) {
throw new OpenGammaRuntimeException("Could not get base/quote order for currency pair (" + putCurrency + ", " + callCurrency + ")");
}
// TODO: Review this part (see digital options)
if (baseQuotePair.getBase().equals(putCurrency)) { // To get Base/quote in market standard order.
final double fxRate = callAmount / putAmount;
underlying = new ForexDefinition(putCurrency, callCurrency, settlementDate, putAmount, fxRate);
return new ForexOptionDigitalDefinition(underlying, expiry, false, isLong);
}
final double fxRate = putAmount / callAmount;
underlying = new ForexDefinition(callCurrency, putCurrency, settlementDate, callAmount, fxRate);
return new ForexOptionDigitalDefinition(underlying, expiry, true, isLong);
}