Package com.opengamma.examples.simulated.generator

Source Code of com.opengamma.examples.simulated.generator.BondPortfolioGeneratorTool$GovernmentBondSecurityGenerator

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.examples.simulated.generator;

import java.math.BigDecimal;

import org.threeten.bp.ZonedDateTime;

import com.opengamma.core.position.Counterparty;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.financial.convention.daycount.DayCount;
import com.opengamma.financial.convention.daycount.DayCountFactory;
import com.opengamma.financial.convention.frequency.Frequency;
import com.opengamma.financial.convention.frequency.PeriodFrequency;
import com.opengamma.financial.convention.yield.YieldConvention;
import com.opengamma.financial.convention.yield.YieldConventionFactory;
import com.opengamma.financial.generator.AbstractPortfolioGeneratorTool;
import com.opengamma.financial.generator.PortfolioNodeGenerator;
import com.opengamma.financial.generator.SecurityGenerator;
import com.opengamma.financial.generator.SimplePositionGenerator;
import com.opengamma.financial.generator.StaticNameGenerator;
import com.opengamma.financial.generator.TreePortfolioNodeGenerator;
import com.opengamma.financial.security.bond.GovernmentBondSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.DateUtils;
import com.opengamma.util.time.Expiry;

/**
* Generates a portfolio of AUD swaps.
*/
public class BondPortfolioGeneratorTool extends AbstractPortfolioGeneratorTool {
  /** The counterparty */
  private static final String COUNTERPARTY = "Cpty";
  /** Bonds */
  private static final GovernmentBondSecurity[] BONDS = new GovernmentBondSecurity[8];
  /** Amounts of each bond */
  private static final double[] AMOUNTS = new double[8];
 
  static {
    final String issuerName = "US TREASURY N/B";
    final String issuerType = "Sovereign";
    final String issuerDomicile = "US";
    final String market = "US GOVERNMENT";
    final Currency currency = Currency.USD;
    final YieldConvention yieldConvention = YieldConventionFactory.INSTANCE.getYieldConvention("US street");
    final String couponType = "FIXED";
    final Frequency couponFrequency = PeriodFrequency.SEMI_ANNUAL;
    final DayCount dayCountConvention = DayCountFactory.INSTANCE.getDayCount("Actual/Actual ICMA");
    final double totalAmountIssued = 66000000000.;
    final double minimumAmount = 100;
    final double minimumIncrement = 100;
    final double parAmount = 100;
    final double redemptionValue = 100;
    final GovernmentBondSecurity bond1 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2019, 2, 15)), couponType, 2.75, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2009, 2, 15)
        DateUtils.getUTCDate(2009, 2, 15), DateUtils.getUTCDate(2009, 8, 15), 98.3, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond1.setName("T 2 3/4 02/15/19");
    BONDS[0] = bond1;
    AMOUNTS[0] = -140000;
    final GovernmentBondSecurity bond2 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2017, 12, 15)), couponType, 2.75, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2010, 12, 31)
        DateUtils.getUTCDate(2010, 12, 31), DateUtils.getUTCDate(2011, 6, 30), 99.4, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond2.setName("T 2 3/4 12/15/17");
    BONDS[1] = bond2;
    AMOUNTS[1] = 350000;
    final GovernmentBondSecurity bond3 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2018, 4, 30)), couponType, 2.625, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2011, 4, 30)
        DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 10, 31), 99.4, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond3.setName("T 2 5/8 04/30/18");
    BONDS[2] = bond3;
    AMOUNTS[2] = 650000;
    final GovernmentBondSecurity bond4 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2021, 5, 15)), couponType, 3.125, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2011, 5, 15)
        DateUtils.getUTCDate(2011, 5, 15), DateUtils.getUTCDate(2011, 11, 15), 101.3, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond4.setName("T 3 1/8 15/05/21");
    BONDS[3] = bond4;   
    AMOUNTS[3] = -100000;
    final GovernmentBondSecurity bond5 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2040, 8, 15)), couponType, 3.875, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2010, 8, 15)
        DateUtils.getUTCDate(2010, 8, 15), DateUtils.getUTCDate(2011, 2, 15), 100.4, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond5.setName("T 3 7/8 08/15/40");
    BONDS[4] = bond5;
    AMOUNTS[4] = -130000;
    final GovernmentBondSecurity bond6 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2017, 11, 30)), couponType, 2.5, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2010, 11, 30)
        DateUtils.getUTCDate(2010, 11, 30), DateUtils.getUTCDate(2011, 5, 31), 100., totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond6.setName("T 2 1/2 11/30/2017");
    BONDS[5] = bond6;
    AMOUNTS[5] = 120000;
    final GovernmentBondSecurity bond7 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2039, 5, 15)), couponType, 4.25, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2009, 5, 15)
        DateUtils.getUTCDate(2009, 5, 15), DateUtils.getUTCDate(2009, 11, 15), 99.1, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond7.setName("T 4 1/4 05/15/39");
    BONDS[6] = bond7;
    AMOUNTS[6] = 230000;
    final GovernmentBondSecurity bond8 = new GovernmentBondSecurity(issuerName, issuerType, issuerDomicile, market, currency,
        yieldConvention, new Expiry(DateUtils.getUTCDate(2019, 11, 15)), couponType, 3.375, couponFrequency, dayCountConvention, DateUtils.getUTCDate(2009, 11, 15)
        DateUtils.getUTCDate(2009, 11, 15), DateUtils.getUTCDate(2010, 5, 15), 96.9, totalAmountIssued, minimumAmount, minimumIncrement, parAmount, redemptionValue);
    bond8.setName("T 3 3/8 11/15/19");
    BONDS[7] = bond8;
    AMOUNTS[7] = -250000;
  }

  @Override
  public PortfolioNodeGenerator createPortfolioNodeGenerator(final int portfolioSize) {
    final SecurityGenerator<ManageableSecurity> securities = new GovernmentBondSecurityGenerator<>(BONDS, AMOUNTS, "US Treasuries");
    configure(securities);
    final TreePortfolioNodeGenerator rootNode = new TreePortfolioNodeGenerator(new StaticNameGenerator("Government Bonds"));
    rootNode.addChildNode((PortfolioNodeGenerator) securities);
    return rootNode;
  }

  private class GovernmentBondSecurityGenerator<T extends ManageableSecurity> extends SecurityGenerator<T> implements PortfolioNodeGenerator {
    /** The securities */
    private final GovernmentBondSecurity[] _securities;
    /** The amounts */
    private final double[] _amounts;
    /** The name */
    private final String _name;

    public GovernmentBondSecurityGenerator(final GovernmentBondSecurity[] securities, final double[] amounts, final String name) {
      _securities = securities;
      _amounts = amounts;
      _name = name;
    }

    @Override
    public PortfolioNode createPortfolioNode() {
      final SimplePortfolioNode node = new SimplePortfolioNode(_name);
      for (int i = 0; i < _securities.length; i++) {
        final BigDecimal n = new BigDecimal(_amounts[i]);
        final GovernmentBondSecurity bond = _securities[i];
        final ZonedDateTime tradeDate = bond.getSettlementDate();
        final ManageableTrade trade = new ManageableTrade(n, getSecurityPersister().storeSecurity(bond), tradeDate.toLocalDate(),
            tradeDate.toOffsetDateTime().toOffsetTime(), ExternalId.of(Counterparty.DEFAULT_SCHEME, COUNTERPARTY));
        trade.setPremium(bond.getIssuancePrice());
        trade.setPremiumCurrency(bond.getCurrency());
        final Position position = SimplePositionGenerator.createPositionFromTrade(trade);
        node.addPosition(position);
      }
      return node;
    }

    @Override
    public T createSecurity() {
      return null;
    }
  }
}
TOP

Related Classes of com.opengamma.examples.simulated.generator.BondPortfolioGeneratorTool$GovernmentBondSecurityGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.