/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.instrument.index; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.instrument.bond.BondFixedSecurityDefinition; import com.opengamma.analytics.financial.instrument.bond.BondFixedTransactionDefinition; import com.opengamma.analytics.financial.schedule.ScheduleCalculator; import com.opengamma.util.ArgumentChecker; /** * Generator for fixed coupon bond. */ public class GeneratorBondFixed extends GeneratorInstrument<GeneratorAttributeET> { /** * The underlying fixed bond security. */ private final BondFixedSecurityDefinition _security; /** * Constructor. * @param name Generator name. * @param security The underlying fixed bond security. */ public GeneratorBondFixed(final String name, final BondFixedSecurityDefinition security) { super(name); ArgumentChecker.notNull(security, "Bond security"); _security = security; } @Override /** * Generate a fixed bond transaction from the fixed bond marquetQuote which is clean price . */ public BondFixedTransactionDefinition generateInstrument(final ZonedDateTime date, final double marketQuote, final double notional, final GeneratorAttributeET attribute) { ArgumentChecker.notNull(date, "Reference date"); int quantity = (int) Math.round(notional / _security.getNominal().getNthPayment(0).getReferenceAmount()); ZonedDateTime settleDate = ScheduleCalculator.getAdjustedDate(date, _security.getSettlementDays(), _security.getCalendar()); if (attribute.isPrice()) { return new BondFixedTransactionDefinition(_security, quantity, settleDate, marketQuote); } return BondFixedTransactionDefinition.fromYield(_security, quantity, settleDate, marketQuote); } }