final HolidaySource holidaySource = OpenGammaExecutionContext.getHolidaySource(executionContext);
final ConventionBundleSource conventionSource = OpenGammaExecutionContext.getConventionBundleSource(executionContext);
final RegionSource regionSource = OpenGammaExecutionContext.getRegionSource(executionContext);
final Clock snapshotClock = executionContext.getValuationClock();
final ZonedDateTime now = ZonedDateTime.now(snapshotClock);
final BondSecurityConverter converter = new BondSecurityConverter(holidaySource, conventionSource, regionSource);
final FinancialSecuritySource securitySource = executionContext.getSecuritySource(FinancialSecuritySource.class);
final Collection<Security> allBonds = new ArrayList<Security>(securitySource.getBondsWithIssuerName(ISSUER_NAME));
final Iterator<Security> iter = allBonds.iterator();
while (iter.hasNext()) {
final Security sec = iter.next();
if (sec instanceof BondSecurity) {
final BondSecurity bond = (BondSecurity) sec;
if (bond.getLastTradeDate().getExpiry().isBefore(now)) {
iter.remove();
}
s_logger.info(bond.getLastTradeDate().toString());
} else {
throw new OpenGammaRuntimeException("non-bond security " + sec + " returned by getAllBondsOfIssuerType()");
}
}
final int n = allBonds.size();
final double[] t = new double[n];
final double[] ytm = new double[n];
int i = 0;
for (final Security security : allBonds) {
final GovernmentBondSecurity bondSec = (GovernmentBondSecurity) security;
final Object ytmObject = inputs.getValue(new ValueRequirement(ValueRequirementNames.YTM, ComputationTargetType.SECURITY, security.getUniqueId()));
if (ytmObject == null) {
s_logger.warn("Could not get YTM for " + security.getUniqueId());
continue;
}
if (!(ytmObject instanceof Double)) {
throw new IllegalArgumentException("YTM should be a double");
}
final InstrumentDefinition<?> definition = converter.visitGovernmentBondSecurity(bondSec);
final String bondStringName = PROPERTY_PREFIX + "_" + CURRENCY.getCode();
final InstrumentDerivative bond = definition.toDerivative(now, bondStringName);
t[i] = bond.accept(LAST_DATE);
ytm[i++] = ((Double) ytmObject / 100);
}