Bhilwara.java

  1. package org.drip.sample.securitysuite;

  2. import org.drip.analytics.cashflow.CompositePeriod;
  3. import org.drip.analytics.date.*;
  4. import org.drip.numerical.common.FormatUtil;
  5. import org.drip.numerical.linearalgebra.Matrix;
  6. import org.drip.product.creator.BondBuilder;
  7. import org.drip.product.credit.BondComponent;
  8. import org.drip.service.env.EnvManager;
  9. import org.drip.service.scenario.*;

  10. /*
  11.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  12.  */

  13. /*!
  14.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  15.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  16.  *
  17.  *  This file is part of DRIP, a free-software/open-source library for buy/side financial/trading model
  18.  *      libraries targeting analysts and developers
  19.  *      https://lakshmidrip.github.io/DRIP/
  20.  *  
  21.  *  DRIP is composed of four main libraries:
  22.  *  
  23.  *  - DRIP Fixed Income - https://lakshmidrip.github.io/DRIP-Fixed-Income/
  24.  *  - DRIP Asset Allocation - https://lakshmidrip.github.io/DRIP-Asset-Allocation/
  25.  *  - DRIP Numerical Optimizer - https://lakshmidrip.github.io/DRIP-Numerical-Optimizer/
  26.  *  - DRIP Statistical Learning - https://lakshmidrip.github.io/DRIP-Statistical-Learning/
  27.  *
  28.  *  - DRIP Fixed Income: Library for Instrument/Trading Conventions, Treasury Futures/Options,
  29.  *      Funding/Forward/Overnight Curves, Multi-Curve Construction/Valuation, Collateral Valuation and XVA
  30.  *      Metric Generation, Calibration and Hedge Attributions, Statistical Curve Construction, Bond RV
  31.  *      Metrics, Stochastic Evolution and Option Pricing, Interest Rate Dynamics and Option Pricing, LMM
  32.  *      Extensions/Calibrations/Greeks, Algorithmic Differentiation, and Asset Backed Models and Analytics.
  33.  *
  34.  *  - DRIP Asset Allocation: Library for model libraries for MPT framework, Black Litterman Strategy
  35.  *      Incorporator, Holdings Constraint, and Transaction Costs.
  36.  *
  37.  *  - DRIP Numerical Optimizer: Library for Numerical Optimization and Spline Functionality.
  38.  *
  39.  *  - DRIP Statistical Learning: Library for Statistical Evaluation and Machine Learning.
  40.  *
  41.  *  Licensed under the Apache License, Version 2.0 (the "License");
  42.  *      you may not use this file except in compliance with the License.
  43.  *  
  44.  *  You may obtain a copy of the License at
  45.  *      http://www.apache.org/licenses/LICENSE-2.0
  46.  *  
  47.  *  Unless required by applicable law or agreed to in writing, software
  48.  *      distributed under the License is distributed on an "AS IS" BASIS,
  49.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  50.  *  
  51.  *  See the License for the specific language governing permissions and
  52.  *      limitations under the License.
  53.  */

  54. /**
  55.  * Bhilwara generates the Full Suite of Replication Metrics for Bond Bhilwara.
  56.  *
  57.  * @author Lakshmi Krishnamurthy
  58.  */

  59. public class Bhilwara {

  60.     public static final void main (
  61.         final String[] astArgs)
  62.         throws Exception
  63.     {
  64.         EnvManager.InitEnv ("");

  65.         JulianDate dtSpot = DateUtil.CreateFromYMD (
  66.             2017,
  67.             DateUtil.OCTOBER,
  68.             5
  69.         );

  70.         String[] astrDepositTenor = new String[] {
  71.             "2D"
  72.         };

  73.         double[] adblDepositQuote = new double[] {
  74.             0.0130411 // 2D
  75.         };

  76.         double[] adblFuturesQuote = new double[] {
  77.             0.01345,    // 98.655
  78.             0.01470,    // 98.530
  79.             0.01575,    // 98.425
  80.             0.01660,    // 98.340
  81.             0.01745,    // 98.255
  82.             0.01845     // 98.155
  83.         };

  84.         String[] astrFixFloatTenor = new String[] {
  85.             "02Y",
  86.             "03Y",
  87.             "04Y",
  88.             "05Y",
  89.             "06Y",
  90.             "07Y",
  91.             "08Y",
  92.             "09Y",
  93.             "10Y",
  94.             "11Y",
  95.             "12Y",
  96.             "15Y",
  97.             "20Y",
  98.             "25Y",
  99.             "30Y",
  100.             "40Y",
  101.             "50Y"
  102.         };

  103.         String[] astrGovvieTenor = new String[] {
  104.             "1Y",
  105.             "2Y",
  106.             "3Y",
  107.             "5Y",
  108.             "7Y",
  109.             "10Y",
  110.             "20Y",
  111.             "30Y"
  112.         };

  113.         double[] adblFixFloatQuote = new double[] {
  114.             0.016410, //  2Y
  115.             0.017863, //  3Y
  116.             0.019030, //  4Y
  117.             0.020035, //  5Y
  118.             0.020902, //  6Y
  119.             0.021660, //  7Y
  120.             0.022307, //  8Y
  121.             0.022879, //  9Y
  122.             0.023363, // 10Y
  123.             0.023820, // 11Y
  124.             0.024172, // 12Y
  125.             0.024934, // 15Y
  126.             0.025581, // 20Y
  127.             0.025906, // 25Y
  128.             0.025973, // 30Y
  129.             0.025838, // 40Y
  130.             0.025560  // 50Y
  131.         };

  132.         double[] adblGovvieYield = new double[] {
  133.             0.01219, //  1Y
  134.             0.01391, //  2Y
  135.             0.01590, //  3Y
  136.             0.01937, //  5Y
  137.             0.02200, //  7Y
  138.             0.02378, // 10Y
  139.             0.02677, // 20Y
  140.             0.02927  // 30Y
  141.         };

  142.         String[] astrCreditTenor = new String[] {
  143.             "06M",
  144.             "01Y",
  145.             "02Y",
  146.             "03Y",
  147.             "04Y",
  148.             "05Y",
  149.             "07Y",
  150.             "10Y"
  151.         };

  152.         double[] adblCreditQuote = new double[] {
  153.              60.,   //  6M
  154.              68.,   //  1Y
  155.              88.,   //  2Y
  156.             102.,   //  3Y
  157.             121.,   //  4Y
  158.             138.,   //  5Y
  159.             168.,   //  7Y
  160.             188.    // 10Y
  161.         };

  162.         double dblFX = 1.;
  163.         int iSettleLag = 3;
  164.         int iCouponFreq = 12;
  165.         String strName = "Bhilwara";
  166.         double dblCleanPrice = 0.95;
  167.         double dblIssuePrice = 1.;
  168.         String strCurrency = "USD";
  169.         double dblSpreadBump = 20.;
  170.         double dblCouponRate = 0.03;
  171.         String strTreasuryCode = "UST";
  172.         String strCouponDayCount = "30/360";
  173.         double dblSpreadDurationMultiplier = 5.;

  174.         org.drip.analytics.date.JulianDate[] adtPeriodEnd = new org.drip.analytics.date.JulianDate[] {
  175.             DateUtil.CreateFromYMD (2017, DateUtil.SEPTEMBER, 25),
  176.             DateUtil.CreateFromYMD (2017, DateUtil.OCTOBER  , 25),
  177.             DateUtil.CreateFromYMD (2017, DateUtil.NOVEMBER , 25),
  178.             DateUtil.CreateFromYMD (2017, DateUtil.DECEMBER , 25),
  179.             DateUtil.CreateFromYMD (2018, DateUtil.JANUARY  , 25),
  180.             DateUtil.CreateFromYMD (2018, DateUtil.FEBRUARY , 25),
  181.             DateUtil.CreateFromYMD (2018, DateUtil.MARCH    , 25),
  182.             DateUtil.CreateFromYMD (2018, DateUtil.APRIL    , 25),
  183.             DateUtil.CreateFromYMD (2018, DateUtil.MAY      , 25),
  184.             DateUtil.CreateFromYMD (2018, DateUtil.JUNE     , 25),
  185.             DateUtil.CreateFromYMD (2018, DateUtil.JULY     , 25),
  186.             DateUtil.CreateFromYMD (2018, DateUtil.AUGUST   , 25),
  187.             DateUtil.CreateFromYMD (2018, DateUtil.SEPTEMBER, 25),
  188.             DateUtil.CreateFromYMD (2018, DateUtil.OCTOBER  , 25),
  189.             DateUtil.CreateFromYMD (2018, DateUtil.NOVEMBER , 25),
  190.             DateUtil.CreateFromYMD (2018, DateUtil.DECEMBER , 25),
  191.             DateUtil.CreateFromYMD (2019, DateUtil.JANUARY  , 25),
  192.             DateUtil.CreateFromYMD (2019, DateUtil.FEBRUARY , 25),
  193.             DateUtil.CreateFromYMD (2019, DateUtil.MARCH    , 25),
  194.             DateUtil.CreateFromYMD (2019, DateUtil.APRIL    , 25),
  195.             DateUtil.CreateFromYMD (2019, DateUtil.MAY      , 25),
  196.             DateUtil.CreateFromYMD (2019, DateUtil.JUNE     , 25),
  197.             DateUtil.CreateFromYMD (2019, DateUtil.JULY     , 25),
  198.             DateUtil.CreateFromYMD (2019, DateUtil.AUGUST   , 25),
  199.             DateUtil.CreateFromYMD (2019, DateUtil.SEPTEMBER, 25),
  200.             DateUtil.CreateFromYMD (2019, DateUtil.OCTOBER  , 25),
  201.             DateUtil.CreateFromYMD (2019, DateUtil.NOVEMBER , 25),
  202.             DateUtil.CreateFromYMD (2019, DateUtil.DECEMBER , 25),
  203.             DateUtil.CreateFromYMD (2020, DateUtil.JANUARY  , 25),
  204.             DateUtil.CreateFromYMD (2020, DateUtil.FEBRUARY , 25),
  205.             DateUtil.CreateFromYMD (2020, DateUtil.MARCH    , 25),
  206.             DateUtil.CreateFromYMD (2020, DateUtil.APRIL    , 25),
  207.             DateUtil.CreateFromYMD (2020, DateUtil.MAY      , 25),
  208.             DateUtil.CreateFromYMD (2020, DateUtil.JUNE     , 25),
  209.             DateUtil.CreateFromYMD (2020, DateUtil.JULY     , 25),
  210.             DateUtil.CreateFromYMD (2020, DateUtil.AUGUST   , 25),
  211.             DateUtil.CreateFromYMD (2020, DateUtil.SEPTEMBER, 25),
  212.             DateUtil.CreateFromYMD (2020, DateUtil.OCTOBER  , 25),
  213.             DateUtil.CreateFromYMD (2020, DateUtil.NOVEMBER , 25),
  214.             DateUtil.CreateFromYMD (2020, DateUtil.DECEMBER , 25),
  215.             DateUtil.CreateFromYMD (2021, DateUtil.JANUARY  , 25),
  216.             DateUtil.CreateFromYMD (2021, DateUtil.FEBRUARY , 25),
  217.             DateUtil.CreateFromYMD (2021, DateUtil.MARCH    , 25),
  218.             DateUtil.CreateFromYMD (2021, DateUtil.APRIL    , 25),
  219.             DateUtil.CreateFromYMD (2021, DateUtil.MAY      , 25),
  220.             DateUtil.CreateFromYMD (2021, DateUtil.JUNE     , 25),
  221.             DateUtil.CreateFromYMD (2021, DateUtil.JULY     , 25),
  222.             DateUtil.CreateFromYMD (2021, DateUtil.AUGUST   , 25),
  223.             DateUtil.CreateFromYMD (2021, DateUtil.SEPTEMBER, 25),
  224.             DateUtil.CreateFromYMD (2021, DateUtil.OCTOBER  , 25),
  225.             DateUtil.CreateFromYMD (2021, DateUtil.NOVEMBER , 25),
  226.             DateUtil.CreateFromYMD (2021, DateUtil.DECEMBER , 25),
  227.             DateUtil.CreateFromYMD (2022, DateUtil.JANUARY  , 25),
  228.             DateUtil.CreateFromYMD (2022, DateUtil.FEBRUARY , 25),
  229.             DateUtil.CreateFromYMD (2022, DateUtil.MARCH    , 25),
  230.             DateUtil.CreateFromYMD (2022, DateUtil.APRIL    , 25),
  231.             DateUtil.CreateFromYMD (2022, DateUtil.MAY      , 25),
  232.             DateUtil.CreateFromYMD (2022, DateUtil.JUNE     , 25),
  233.             DateUtil.CreateFromYMD (2022, DateUtil.JULY     , 25),
  234.             DateUtil.CreateFromYMD (2022, DateUtil.AUGUST   , 25),
  235.             DateUtil.CreateFromYMD (2022, DateUtil.SEPTEMBER, 25),
  236.             DateUtil.CreateFromYMD (2022, DateUtil.OCTOBER  , 25),
  237.             DateUtil.CreateFromYMD (2022, DateUtil.NOVEMBER , 25),
  238.             DateUtil.CreateFromYMD (2022, DateUtil.DECEMBER , 25),
  239.             DateUtil.CreateFromYMD (2023, DateUtil.JANUARY  , 25),
  240.             DateUtil.CreateFromYMD (2023, DateUtil.FEBRUARY , 25),
  241.             DateUtil.CreateFromYMD (2023, DateUtil.MARCH    , 25),
  242.             DateUtil.CreateFromYMD (2023, DateUtil.APRIL    , 25),
  243.             DateUtil.CreateFromYMD (2023, DateUtil.MAY      , 25),
  244.             DateUtil.CreateFromYMD (2023, DateUtil.JUNE     , 25),
  245.             DateUtil.CreateFromYMD (2023, DateUtil.JULY     , 25),
  246.             DateUtil.CreateFromYMD (2023, DateUtil.AUGUST   , 25),
  247.             DateUtil.CreateFromYMD (2023, DateUtil.SEPTEMBER, 25),
  248.             DateUtil.CreateFromYMD (2023, DateUtil.OCTOBER  , 25),
  249.             DateUtil.CreateFromYMD (2023, DateUtil.NOVEMBER , 25),
  250.             DateUtil.CreateFromYMD (2023, DateUtil.DECEMBER , 25),
  251.             DateUtil.CreateFromYMD (2024, DateUtil.JANUARY  , 25),
  252.             DateUtil.CreateFromYMD (2024, DateUtil.FEBRUARY , 25),
  253.             DateUtil.CreateFromYMD (2024, DateUtil.MARCH    , 25),
  254.             DateUtil.CreateFromYMD (2024, DateUtil.APRIL    , 25),
  255.             DateUtil.CreateFromYMD (2024, DateUtil.MAY      , 25),
  256.             DateUtil.CreateFromYMD (2024, DateUtil.JUNE     , 25),
  257.             DateUtil.CreateFromYMD (2024, DateUtil.JULY     , 25),
  258.             DateUtil.CreateFromYMD (2024, DateUtil.AUGUST   , 25),
  259.             DateUtil.CreateFromYMD (2024, DateUtil.SEPTEMBER, 25),
  260.             DateUtil.CreateFromYMD (2024, DateUtil.OCTOBER  , 25),
  261.             DateUtil.CreateFromYMD (2024, DateUtil.NOVEMBER , 25),
  262.             DateUtil.CreateFromYMD (2024, DateUtil.DECEMBER , 25),
  263.             DateUtil.CreateFromYMD (2025, DateUtil.JANUARY  , 25),
  264.             DateUtil.CreateFromYMD (2025, DateUtil.FEBRUARY , 25),
  265.             DateUtil.CreateFromYMD (2025, DateUtil.MARCH    , 25),
  266.             DateUtil.CreateFromYMD (2025, DateUtil.APRIL    , 25),
  267.             DateUtil.CreateFromYMD (2025, DateUtil.MAY      , 25),
  268.             DateUtil.CreateFromYMD (2025, DateUtil.JUNE     , 25),
  269.             DateUtil.CreateFromYMD (2025, DateUtil.JULY     , 25),
  270.             DateUtil.CreateFromYMD (2025, DateUtil.AUGUST   , 25),
  271.             DateUtil.CreateFromYMD (2025, DateUtil.SEPTEMBER, 25),
  272.             DateUtil.CreateFromYMD (2025, DateUtil.OCTOBER  , 25),
  273.             DateUtil.CreateFromYMD (2025, DateUtil.NOVEMBER , 25),
  274.             DateUtil.CreateFromYMD (2025, DateUtil.DECEMBER , 25),
  275.             DateUtil.CreateFromYMD (2026, DateUtil.JANUARY  , 25),
  276.             DateUtil.CreateFromYMD (2026, DateUtil.FEBRUARY , 25),
  277.             DateUtil.CreateFromYMD (2026, DateUtil.MARCH    , 25),
  278.             DateUtil.CreateFromYMD (2026, DateUtil.APRIL    , 25),
  279.             DateUtil.CreateFromYMD (2026, DateUtil.MAY      , 25),
  280.             DateUtil.CreateFromYMD (2026, DateUtil.JUNE     , 25),
  281.             DateUtil.CreateFromYMD (2026, DateUtil.JULY     , 25),
  282.             DateUtil.CreateFromYMD (2026, DateUtil.AUGUST   , 25),
  283.             DateUtil.CreateFromYMD (2026, DateUtil.SEPTEMBER, 25),
  284.             DateUtil.CreateFromYMD (2026, DateUtil.OCTOBER  , 25),
  285.             DateUtil.CreateFromYMD (2026, DateUtil.NOVEMBER , 25),
  286.             DateUtil.CreateFromYMD (2026, DateUtil.DECEMBER , 25),
  287.             DateUtil.CreateFromYMD (2027, DateUtil.JANUARY  , 25),
  288.             DateUtil.CreateFromYMD (2027, DateUtil.FEBRUARY , 25),
  289.             DateUtil.CreateFromYMD (2027, DateUtil.MARCH    , 25),
  290.             DateUtil.CreateFromYMD (2027, DateUtil.APRIL    , 25),
  291.             DateUtil.CreateFromYMD (2027, DateUtil.MAY      , 25),
  292.             DateUtil.CreateFromYMD (2027, DateUtil.JUNE     , 25),
  293.             DateUtil.CreateFromYMD (2027, DateUtil.JULY     , 25),
  294.             DateUtil.CreateFromYMD (2027, DateUtil.AUGUST   , 25),
  295.             DateUtil.CreateFromYMD (2027, DateUtil.SEPTEMBER, 25),
  296.             DateUtil.CreateFromYMD (2027, DateUtil.OCTOBER  , 25),
  297.             DateUtil.CreateFromYMD (2027, DateUtil.NOVEMBER , 25),
  298.             DateUtil.CreateFromYMD (2027, DateUtil.DECEMBER , 25),
  299.             DateUtil.CreateFromYMD (2028, DateUtil.JANUARY  , 25),
  300.             DateUtil.CreateFromYMD (2028, DateUtil.FEBRUARY , 25),
  301.             DateUtil.CreateFromYMD (2028, DateUtil.MARCH    , 25),
  302.             DateUtil.CreateFromYMD (2028, DateUtil.APRIL    , 25),
  303.             DateUtil.CreateFromYMD (2028, DateUtil.MAY      , 25),
  304.             DateUtil.CreateFromYMD (2028, DateUtil.JUNE     , 25),
  305.             DateUtil.CreateFromYMD (2028, DateUtil.JULY     , 25),
  306.             DateUtil.CreateFromYMD (2028, DateUtil.AUGUST   , 25),
  307.             DateUtil.CreateFromYMD (2028, DateUtil.SEPTEMBER, 25),
  308.             DateUtil.CreateFromYMD (2028, DateUtil.OCTOBER  , 25),
  309.             DateUtil.CreateFromYMD (2028, DateUtil.NOVEMBER , 25),
  310.             DateUtil.CreateFromYMD (2028, DateUtil.DECEMBER , 25),
  311.             DateUtil.CreateFromYMD (2029, DateUtil.JANUARY  , 25),
  312.             DateUtil.CreateFromYMD (2029, DateUtil.FEBRUARY , 25),
  313.             DateUtil.CreateFromYMD (2029, DateUtil.MARCH    , 25),
  314.             DateUtil.CreateFromYMD (2029, DateUtil.APRIL    , 25),
  315.             DateUtil.CreateFromYMD (2029, DateUtil.MAY      , 25),
  316.             DateUtil.CreateFromYMD (2029, DateUtil.JUNE     , 25),
  317.             DateUtil.CreateFromYMD (2029, DateUtil.JULY     , 25),
  318.             DateUtil.CreateFromYMD (2029, DateUtil.AUGUST   , 25),
  319.             DateUtil.CreateFromYMD (2029, DateUtil.SEPTEMBER, 25),
  320.             DateUtil.CreateFromYMD (2029, DateUtil.OCTOBER  , 25),
  321.             DateUtil.CreateFromYMD (2029, DateUtil.NOVEMBER , 25),
  322.             DateUtil.CreateFromYMD (2029, DateUtil.DECEMBER , 25),
  323.             DateUtil.CreateFromYMD (2030, DateUtil.JANUARY  , 25),
  324.             DateUtil.CreateFromYMD (2030, DateUtil.FEBRUARY , 25),
  325.             DateUtil.CreateFromYMD (2030, DateUtil.MARCH    , 25),
  326.             DateUtil.CreateFromYMD (2030, DateUtil.APRIL    , 25),
  327.             DateUtil.CreateFromYMD (2030, DateUtil.MAY      , 25),
  328.             DateUtil.CreateFromYMD (2030, DateUtil.JUNE     , 25),
  329.             DateUtil.CreateFromYMD (2030, DateUtil.JULY     , 25),
  330.             DateUtil.CreateFromYMD (2030, DateUtil.AUGUST   , 25),
  331.             DateUtil.CreateFromYMD (2030, DateUtil.SEPTEMBER, 25),
  332.             DateUtil.CreateFromYMD (2030, DateUtil.OCTOBER  , 25),
  333.             DateUtil.CreateFromYMD (2030, DateUtil.NOVEMBER , 25),
  334.             DateUtil.CreateFromYMD (2030, DateUtil.DECEMBER , 25),
  335.             DateUtil.CreateFromYMD (2031, DateUtil.JANUARY  , 25),
  336.             DateUtil.CreateFromYMD (2031, DateUtil.FEBRUARY , 25),
  337.             DateUtil.CreateFromYMD (2031, DateUtil.MARCH    , 25),
  338.             DateUtil.CreateFromYMD (2031, DateUtil.APRIL    , 25),
  339.             DateUtil.CreateFromYMD (2031, DateUtil.MAY      , 25),
  340.             DateUtil.CreateFromYMD (2031, DateUtil.JUNE     , 25),
  341.             DateUtil.CreateFromYMD (2031, DateUtil.JULY     , 25),
  342.             DateUtil.CreateFromYMD (2031, DateUtil.AUGUST   , 25),
  343.             DateUtil.CreateFromYMD (2031, DateUtil.SEPTEMBER, 25),
  344.             DateUtil.CreateFromYMD (2031, DateUtil.OCTOBER  , 25),
  345.             DateUtil.CreateFromYMD (2031, DateUtil.NOVEMBER , 25),
  346.             DateUtil.CreateFromYMD (2031, DateUtil.DECEMBER , 25),
  347.             DateUtil.CreateFromYMD (2032, DateUtil.JANUARY  , 25),
  348.             DateUtil.CreateFromYMD (2032, DateUtil.FEBRUARY , 25),
  349.             DateUtil.CreateFromYMD (2032, DateUtil.MARCH    , 25),
  350.             DateUtil.CreateFromYMD (2032, DateUtil.APRIL    , 25),
  351.             DateUtil.CreateFromYMD (2032, DateUtil.MAY      , 25),
  352.             DateUtil.CreateFromYMD (2032, DateUtil.JUNE     , 25),
  353.             DateUtil.CreateFromYMD (2032, DateUtil.JULY     , 25),
  354.             DateUtil.CreateFromYMD (2032, DateUtil.AUGUST   , 25),
  355.             DateUtil.CreateFromYMD (2032, DateUtil.SEPTEMBER, 25),
  356.             DateUtil.CreateFromYMD (2032, DateUtil.OCTOBER  , 25),
  357.             DateUtil.CreateFromYMD (2032, DateUtil.NOVEMBER , 25),
  358.             DateUtil.CreateFromYMD (2032, DateUtil.DECEMBER , 25),
  359.             DateUtil.CreateFromYMD (2033, DateUtil.JANUARY  , 25),
  360.             DateUtil.CreateFromYMD (2033, DateUtil.FEBRUARY , 25),
  361.             DateUtil.CreateFromYMD (2033, DateUtil.MARCH    , 25),
  362.             DateUtil.CreateFromYMD (2033, DateUtil.APRIL    , 25),
  363.             DateUtil.CreateFromYMD (2033, DateUtil.MAY      , 25),
  364.             DateUtil.CreateFromYMD (2033, DateUtil.JUNE     , 25),
  365.             DateUtil.CreateFromYMD (2033, DateUtil.JULY     , 25),
  366.             DateUtil.CreateFromYMD (2033, DateUtil.AUGUST   , 25),
  367.             DateUtil.CreateFromYMD (2033, DateUtil.SEPTEMBER, 25),
  368.             DateUtil.CreateFromYMD (2033, DateUtil.OCTOBER  , 25),
  369.             DateUtil.CreateFromYMD (2033, DateUtil.NOVEMBER , 25),
  370.             DateUtil.CreateFromYMD (2033, DateUtil.DECEMBER , 25),
  371.             DateUtil.CreateFromYMD (2034, DateUtil.JANUARY  , 25),
  372.             DateUtil.CreateFromYMD (2034, DateUtil.FEBRUARY , 25),
  373.             DateUtil.CreateFromYMD (2034, DateUtil.MARCH    , 25),
  374.             DateUtil.CreateFromYMD (2034, DateUtil.APRIL    , 25),
  375.             DateUtil.CreateFromYMD (2034, DateUtil.MAY      , 25),
  376.             DateUtil.CreateFromYMD (2034, DateUtil.JUNE     , 25),
  377.             DateUtil.CreateFromYMD (2034, DateUtil.JULY     , 25),
  378.             DateUtil.CreateFromYMD (2034, DateUtil.AUGUST   , 25),
  379.             DateUtil.CreateFromYMD (2034, DateUtil.SEPTEMBER, 25),
  380.             DateUtil.CreateFromYMD (2034, DateUtil.OCTOBER  , 25),
  381.             DateUtil.CreateFromYMD (2034, DateUtil.NOVEMBER , 25),
  382.             DateUtil.CreateFromYMD (2034, DateUtil.DECEMBER , 25),
  383.             DateUtil.CreateFromYMD (2035, DateUtil.JANUARY  , 25),
  384.             DateUtil.CreateFromYMD (2035, DateUtil.FEBRUARY , 25),
  385.             DateUtil.CreateFromYMD (2035, DateUtil.MARCH    , 25),
  386.             DateUtil.CreateFromYMD (2035, DateUtil.APRIL    , 25),
  387.             DateUtil.CreateFromYMD (2035, DateUtil.MAY      , 25),
  388.             DateUtil.CreateFromYMD (2035, DateUtil.JUNE     , 25),
  389.             DateUtil.CreateFromYMD (2035, DateUtil.JULY     , 25),
  390.             DateUtil.CreateFromYMD (2035, DateUtil.AUGUST   , 25),
  391.             DateUtil.CreateFromYMD (2035, DateUtil.SEPTEMBER, 25),
  392.             DateUtil.CreateFromYMD (2035, DateUtil.OCTOBER  , 25),
  393.             DateUtil.CreateFromYMD (2035, DateUtil.NOVEMBER , 25),
  394.             DateUtil.CreateFromYMD (2035, DateUtil.DECEMBER , 25),
  395.             DateUtil.CreateFromYMD (2036, DateUtil.JANUARY  , 25),
  396.             DateUtil.CreateFromYMD (2036, DateUtil.FEBRUARY , 25),
  397.             DateUtil.CreateFromYMD (2036, DateUtil.MARCH    , 25),
  398.             DateUtil.CreateFromYMD (2036, DateUtil.APRIL    , 25),
  399.             DateUtil.CreateFromYMD (2036, DateUtil.MAY      , 25),
  400.             DateUtil.CreateFromYMD (2036, DateUtil.JUNE     , 25),
  401.             DateUtil.CreateFromYMD (2036, DateUtil.JULY     , 25),
  402.         };

  403.         double[] adblPrincipalPayDown = new double[] {
  404.             299135.42,
  405.             293800.82,
  406.             286422.31,
  407.             284811.34,
  408.             280035.33,
  409.             270326.05,
  410.             269712.70,
  411.             26144.16,
  412.             256686.70,
  413.             251454.94,
  414.             248096.89,
  415.             241975.08,
  416.             241697.45,
  417.             236817.23,
  418.             233143.59,
  419.             231739.14,
  420.             227993.33,
  421.             225400.55,
  422.             224352.13,
  423.             220835.71,
  424.             215670.45,
  425.             218278.54,
  426.             213286.08,
  427.             210099.94,
  428.             210256.27,
  429.             207185.92,
  430.             204347.86,
  431.             203127.82,
  432.             200332.53,
  433.             200631.41,
  434.             199262.80,
  435.             194534.04,
  436.             203827.56,
  437.             192652.24,
  438.             189464.50,
  439.             201054.55,
  440.             188939.02,
  441.             214387.68,
  442.             187778.97,
  443.             179343.85,
  444.             189669.13,
  445.             176363.67,
  446.             176262.86,
  447.             168645.72,
  448.             168773.49,
  449.             166805.04,
  450.             164318.82,
  451.             163155.09,
  452.             158829.45,
  453.             158789.33,
  454.             153827.32,
  455.             152677.48,
  456.             150337.52,
  457.             147447.05,
  458.             146919.10,
  459.             142388.33,
  460.             140765.07,
  461.             136984.46,
  462.             137165.33,
  463.             133432.66,
  464.             130939.82,
  465.             131192.67,
  466.             128281.73,
  467.             125889.89,
  468.             126159.02,
  469.             122344.40,
  470.             124132.89,
  471.             122375.65,
  472.             120127.34,
  473.             117469.89,
  474.             117736.91,
  475.             115135.15,
  476.             113499.44,
  477.             112833.61,
  478.             110775.61,
  479.             111019.29,
  480.             109454.50,
  481.             107044.35,
  482.             107304.17,
  483.             104936.76,
  484.             102638.27,
  485.             103708.20,
  486.             101424.44,
  487.             99234.51,
  488.             99074.90,
  489.             97679.15,
  490.             97152.74,
  491.             95778.72,
  492.             94487.89,
  493.             94296.53,
  494.             93807.05,
  495.             91373.77,
  496.             90147.87,
  497.             89973.49,
  498.             88748.25,
  499.             87150.09,
  500.             86341.31,
  501.             84805.19,
  502.             85035.19,
  503.             83563.64,
  504.             82420.58,
  505.             81926.86,
  506.             81809.16,
  507.             79025.70,
  508.             79569.20,
  509.             78101.88,
  510.             76748.40,
  511.             76940.91,
  512.             75569.06,
  513.             75122.18,
  514.             74700.40,
  515.             73086.81,
  516.             73516.53,
  517.             71935.57,
  518.             72108.42,
  519.             70278.22,
  520.             70124.85,
  521.             68881.26,
  522.             68243.67,
  523.             67843.46,
  524.             66097.31,
  525.             66779.19,
  526.             65100.05,
  527.             64735.20,
  528.             64617.74,
  529.             63200.82,
  530.             62602.68,
  531.             62505.70,
  532.             61656.14,
  533.             60573.31,
  534.             60449.54,
  535.             59391.79,
  536.             58820.86,
  537.             58500.20,
  538.             57261.46,
  539.             57610.98,
  540.             56846.90,
  541.             55588.17,
  542.             55932.23,
  543.             54960.87,
  544.             54458.37,
  545.             53721.51,
  546.             53414.67,
  547.             52280.72,
  548.             52361.31,
  549.             51657.14,
  550.             50765.54,
  551.             50672.24,
  552.             50201.50,
  553.             49525.75,
  554.             49624.48,
  555.             48581.40,
  556.             47743.86,
  557.             48215.40,
  558.             47388.72,
  559.             45990.91,
  560.             45912.95,
  561.             45477.28,
  562.             44876.02,
  563.             44461.64,
  564.             43872.03,
  565.             43957.13,
  566.             43706.39,
  567.             42798.64,
  568.             42231.38,
  569.             42307.78,
  570.             41759.21,
  571.             41203.77,
  572.             40805.59,
  573.             40262.53,
  574.             40141.05,
  575.             39463.11,
  576.             39090.44,
  577.             38863.93,
  578.             38639.77,
  579.             37840.46,
  580.             37912.67,
  581.             37273.86,
  582.             36920.28,
  583.             36702.69,
  584.             35953.59,
  585.             36263.93,
  586.             35397.65,
  587.             35187.49,
  588.             35106.59,
  589.             34518.72,
  590.             34556.59,
  591.             33857.24,
  592.             33655.11,
  593.             32982.42,
  594.             33257.16,
  595.             32581.87,
  596.             32155.38,
  597.             32186.68,
  598.             31649.70,
  599.             31229.88,
  600.             31254.65,
  601.             30376.70,
  602.             30617.78,
  603.             30216.11,
  604.             29821.74,
  605.             29328.58,
  606.             29350.86,
  607.             28867.66,
  608.             28591.17,
  609.             28412.39,
  610.             27852.78,
  611.             27964.98,
  612.             27604.96,
  613.             27156.64,
  614.             27264.30,
  615.             26832.91,
  616.             26576.29,
  617.             26205.21,
  618.             26048.68,
  619.             31263.96,
  620.             37878.87,
  621.             33808.14,
  622.             24634.37,
  623.             24583.50,
  624.             25933.13,
  625.             37250.03,
  626.             91357.96,
  627.             704382.83,
  628.             558714.10,
  629.             319083.90,
  630.             13025.09,
  631.         };

  632.         double[] adblCouponAmount = new double[] {
  633.             32157.95,
  634.             30759.71,
  635.             33409.09,
  636.             28990.84,
  637.             29616.95,
  638.             31196.73,
  639.             26960.85,
  640.             28530.68,
  641.             28181.61,
  642.             28764.64,
  643.             27496.02,
  644.             29875.28,
  645.             25930.15,
  646.             26493.25,
  647.             27910.58,
  648.             25840.64,
  649.             25516.76,
  650.             26036.67,
  651.             23219.86,
  652.             25382.73,
  653.             26673.77,
  654.             22341.89,
  655.             23628.28,
  656.             24877.50,
  657.             23018.77,
  658.             22716.61,
  659.             23165.53,
  660.             22861.07,
  661.             23286.07,
  662.             20823.41,
  663.             20547.31,
  664.             23069.15,
  665.             20001.92,
  666.             20404.04,
  667.             21473.63,
  668.             19200.37,
  669.             20234.01,
  670.             19959.45,
  671.             19016.53,
  672.             20630.34,
  673.             17269.74,
  674.             18850.73,
  675.             16797.78,
  676.             21229.35,
  677.             18981.96,
  678.             20019.66,
  679.             19749.87,
  680.             18856.70,
  681.             20464.21,
  682.             17132.07,
  683.             19319.99,
  684.             18469.61,
  685.             17050.15,
  686.             17988.65,
  687.             16036.03,
  688.             17524.11,
  689.             16740.37,
  690.             18178.63,
  691.             15227.97,
  692.             16646.25,
  693.             16967.16,
  694.             15184.30,
  695.             16028.43,
  696.             16339.73,
  697.             14624.86,
  698.             16436.19,
  699.             13774.37,
  700.             14090.69,
  701.             14396.94,
  702.             15168.67,
  703.             13579.28,
  704.             14338.90,
  705.             14165.25,
  706.             13543.32,
  707.             14718.16,
  708.             12778.13,
  709.             13060.28,
  710.             13763.79,
  711.             11899.67,
  712.             13018.49,
  713.             13693.96,
  714.             11482.11,
  715.             12157.04,
  716.             12815.40,
  717.             11874.38,
  718.             11735.80,
  719.             11986.35,
  720.             11846.13,
  721.             12086.10,
  722.             10825.54,
  723.             10331.36,
  724.             11305.83,
  725.             11536.23,
  726.             10334.25,
  727.             10568.21,
  728.             10795.32,
  729.             10672.36,
  730.             10891.00,
  731.             9758.13,
  732.             10312.75,
  733.             10195.59,
  734.             9755.32,
  735.             9002.06,
  736.             10489.50,
  737.             9114.38,
  738.             9322.49,
  739.             9832.73,
  740.             8811.07,
  741.             9313.06,
  742.             9208.44,
  743.             8811.12,
  744.             9583.01,
  745.             8039.30,
  746.             8800.85,
  747.             7859.90,
  748.             8881.73,
  749.             7958.45,
  750.             8412.11,
  751.             8317.85,
  752.             7959.20,
  753.             8656.73,
  754.             7263.06,
  755.             8207.09,
  756.             7862.23,
  757.             7272.47,
  758.             7686.33,
  759.             7600.56,
  760.             7030.72,
  761.             7191.07,
  762.             7584.10,
  763.             6796.19,
  764.             7182.86,
  765.             7102.26,
  766.             6795.90,
  767.             7390.98,
  768.             6422.40,
  769.             6568.20,
  770.             6926.45,
  771.             5992.50,
  772.             6347.08,
  773.             6274.90,
  774.             6410.16,
  775.             6132.82,
  776.             6668.94,
  777.             5794.21,
  778.             5925.24,
  779.             6247.89,
  780.             5790.73,
  781.             5724.18,
  782.             5846.85,
  783.             5220.32,
  784.             5712.30,
  785.             6010.65,
  786.             5041.42,
  787.             5338.20,
  788.             5627.69,
  789.             5215.56,
  790.             5155.26,
  791.             5265.38,
  792.             5204.48,
  793.             5310.08,
  794.             4756.57,
  795.             4538.66,
  796.             4965.64,
  797.             5065.86,
  798.             4537.32,
  799.             4638.22,
  800.             4736.15,
  801.             4680.23,
  802.             4774.04,
  803.             4275.36,
  804.             4515.74,
  805.             4462.18,
  806.             4266.90,
  807.             4075.33,
  808.             4442.79,
  809.             3978.24,
  810.             4201.15,
  811.             4150.56,
  812.             3968.18,
  813.             4311.98,
  814.             3614.58,
  815.             4080.14,
  816.             3904.60,
  817.             3608.02,
  818.             3809.20,
  819.             3398.26,
  820.             3715.46,
  821.             3551.14,
  822.             3857.64,
  823.             3232.72,
  824.             3533.95,
  825.             3602.30,
  826.             3223.76,
  827.             3402.41,
  828.             3467.83,
  829.             3103.07,
  830.             3485.93,
  831.             2920.52,
  832.             2985.95,
  833.             3049.23,
  834.             3210.74,
  835.             2872.50,
  836.             3030.77,
  837.             2991.59,
  838.             2857.54,
  839.             3102.25,
  840.             2690.86,
  841.             2746.92,
  842.             2891.37,
  843.             2496.66,
  844.             2639.19,
  845.             2603.95,
  846.             2654.68,
  847.             2534.63,
  848.             2750.46,
  849.             2377.38,
  850.             2409.61,
  851.             2522.89,
  852.             2332.86,
  853.             2300.57,
  854.             2342.06,
  855.             2143.67,
  856.             2167.53,
  857.             1250.69,
  858.             424.12,
  859.             17.11,
  860.         };

  861.         double dblIssueAmount = Matrix.Sum (adblPrincipalPayDown);

  862.         JulianDate dtEffective = DateUtil.CreateFromYMD (
  863.             2017,
  864.             DateUtil.AUGUST,
  865.             25
  866.         );

  867.         BondComponent bond = BondBuilder.CreateBondFromCF (
  868.             strName,
  869.             dtEffective,
  870.             strCurrency,
  871.             strName,
  872.             strCouponDayCount,
  873.             dblIssueAmount,
  874.             dblCouponRate,
  875.             iCouponFreq,
  876.             adtPeriodEnd,
  877.             adblCouponAmount,
  878.             adblPrincipalPayDown,
  879.             true
  880.         );

  881.         BondReplicator abr = BondReplicator.CorporateSenior (
  882.             dblCleanPrice,
  883.             dblIssuePrice,
  884.             dblIssueAmount,
  885.             dtSpot,
  886.             astrDepositTenor,
  887.             adblDepositQuote,
  888.             adblFuturesQuote,
  889.             astrFixFloatTenor,
  890.             adblFixFloatQuote,
  891.             dblSpreadBump,
  892.             dblSpreadDurationMultiplier,
  893.             strTreasuryCode,
  894.             astrGovvieTenor,
  895.             adblGovvieYield,
  896.             astrCreditTenor,
  897.             adblCreditQuote,
  898.             dblFX,
  899.             Double.NaN,
  900.             iSettleLag,
  901.             bond
  902.         );

  903.         BondReplicationRun abrr = abr.generateRun();

  904.         System.out.println (abrr.display());

  905.         double dblBalance = 1.;

  906.         for (CompositePeriod p : bond.couponPeriods()) {
  907.             int iEndDate = p.endDate();

  908.             int iStartDate = p.startDate();

  909.             double dblPrincipalPayDown = bond.notional (iStartDate) - bond.notional (iEndDate);

  910.             double dblInterest = dblCouponRate * p.couponDCF() * bond.notional (iStartDate) * bond.couponFactor (iEndDate);

  911.             dblBalance -= dblPrincipalPayDown;

  912.             System.out.println (
  913.                 "\t" + new JulianDate (iEndDate) + " => " +
  914.                 FormatUtil.FormatDouble (dblPrincipalPayDown, 8, 2, dblIssueAmount) + " | " +
  915.                 FormatUtil.FormatDouble (dblInterest, 6, 2, dblIssueAmount) + " | " +
  916.                 FormatUtil.FormatDouble (dblPrincipalPayDown + dblInterest, 8, 2, dblIssueAmount) + " | " +
  917.                 FormatUtil.FormatDouble (dblBalance, 8, 2, dblIssueAmount) + " ||"
  918.             );
  919.         }
  920.     }
  921. }