PriorPosteriorMetricsComparison.java

  1. package org.drip.sample.idzorek;

  2. import org.drip.measure.bayesian.*;
  3. import org.drip.measure.continuous.MultivariateMeta;
  4. import org.drip.measure.gaussian.*;
  5. import org.drip.numerical.common.FormatUtil;
  6. import org.drip.portfolioconstruction.allocator.ForwardReverseHoldingsAllocation;
  7. import org.drip.portfolioconstruction.asset.*;
  8. import org.drip.portfolioconstruction.bayesian.*;
  9. import org.drip.service.env.EnvManager;

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

  13. /*!
  14.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  15.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  16.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  17.  * Copyright (C) 2016 Lakshmi Krishnamurthy
  18.  *
  19.  *  This file is part of DROP, an open-source library targeting risk, transaction costs, exposure, margin
  20.  *      calculations, valuation adjustment, and portfolio construction within and across fixed income,
  21.  *      credit, commodity, equity, FX, and structured products.
  22.  *  
  23.  *      https://lakshmidrip.github.io/DROP/
  24.  *  
  25.  *  DROP is composed of three modules:
  26.  *  
  27.  *  - DROP Analytics Core - https://lakshmidrip.github.io/DROP-Analytics-Core/
  28.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  29.  *  - DROP Numerical Core - https://lakshmidrip.github.io/DROP-Numerical-Core/
  30.  *
  31.  *  DROP Analytics Core implements libraries for the following:
  32.  *  - Fixed Income Analytics
  33.  *  - Asset Backed Analytics
  34.  *  - XVA Analytics
  35.  *  - Exposure and Margin Analytics
  36.  *
  37.  *  DROP Portfolio Core implements libraries for the following:
  38.  *  - Asset Allocation Analytics
  39.  *  - Transaction Cost Analytics
  40.  *
  41.  *  DROP Numerical Core implements libraries for the following:
  42.  *  - Statistical Learning
  43.  *  - Numerical Optimizer
  44.  *  - Spline Builder
  45.  *  - Algorithm Support
  46.  *
  47.  *  Documentation for DROP is Spread Over:
  48.  *
  49.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  50.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  51.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  52.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  53.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  54.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  55.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  56.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  57.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  58.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  59.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  60.  *
  61.  *  Licensed under the Apache License, Version 2.0 (the "License");
  62.  *      you may not use this file except in compliance with the License.
  63.  *  
  64.  *  You may obtain a copy of the License at
  65.  *      http://www.apache.org/licenses/LICENSE-2.0
  66.  *  
  67.  *  Unless required by applicable law or agreed to in writing, software
  68.  *      distributed under the License is distributed on an "AS IS" BASIS,
  69.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  70.  *  
  71.  *  See the License for the specific language governing permissions and
  72.  *      limitations under the License.
  73.  */

  74. /**
  75.  * <i>PriorPosteriorMetricsComparison</i> reconciles the Prior-Posterior Black-Litterman Model Process
  76.  * Metrics generated using the Idzorek Model. The References are:
  77.  *  
  78.  * <br><br>
  79.  *  <ul>
  80.  *      <li>
  81.  *          He. G., and R. Litterman (1999): The Intuition behind the Black-Litterman Model Portfolios,
  82.  *              Goldman Sachs Asset Management
  83.  *      </li>
  84.  *      <li>
  85.  *          Idzorek, T. (2005): A Step-by-Step Guide to the Black-Litterman Model: Incorporating User
  86.  *              Specified Confidence Levels, Ibbotson Associates, Chicago
  87.  *      </li>
  88.  *  </ul>
  89.  *  
  90.  * <br><br>
  91.  *  <ul>
  92.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  93.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/AssetAllocationAnalyticsLibrary.md">Asset Allocation Analytics Library</a></li>
  94.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/sample/README.md">Sample</a></li>
  95.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/sample/idzorek/README.md">Idzorek (2005) User Confidence Setting</a></li>
  96.  *  </ul>
  97.  * <br><br>
  98.  *
  99.  * @author Lakshmi Krishnamurthy
  100.  */

  101. public class PriorPosteriorMetricsComparison
  102. {

  103.     private static final void ForwardOptimizationWeights (
  104.         final ForwardReverseHoldingsAllocation forwardReverseOptimizationOutput,
  105.         final double[] weightReconcilerArray,
  106.         final int preDecimalDigits,
  107.         final int postDecimalDigits,
  108.         final String header)
  109.     {
  110.         Portfolio forwardReverseOptimizationPortfolio = forwardReverseOptimizationOutput.optimalPortfolio();

  111.         AssetComponent highestWeightAsset = forwardReverseOptimizationPortfolio.highestWeightAsset();

  112.         AssetComponent lowestWeightAsset = forwardReverseOptimizationPortfolio.lowestWeightAsset();

  113.         String[] assetIDArray = forwardReverseOptimizationPortfolio.assetIDArray();

  114.         double[] weightArray = forwardReverseOptimizationPortfolio.weightArray();

  115.         System.out.println ("\t|--------------------------------------------------------||");

  116.         System.out.println (header);

  117.         System.out.println ("\t|--------------------------------------------------------||");

  118.         System.out.println ("\t|                  ID               =>  CALC   | VERIFY  ||");

  119.         System.out.println ("\t|--------------------------------------------------------||");

  120.         for (int assetIndex = 0;
  121.             assetIndex < weightArray.length;
  122.             ++assetIndex)
  123.         {
  124.             System.out.println (
  125.                 "\t| [" + assetIDArray[assetIndex] + "] => " +
  126.                 FormatUtil.FormatDouble (weightArray[assetIndex], preDecimalDigits, postDecimalDigits, 100.)
  127.                     + "% | " +
  128.                 FormatUtil.FormatDouble (
  129.                     weightReconcilerArray[assetIndex], preDecimalDigits, postDecimalDigits, 100.
  130.                 ) + "% ||"
  131.             );
  132.         }

  133.         System.out.println ("\t|--------------------------------------------------------||");

  134.         System.out.println (
  135.             "\t| HIGH  : " + highestWeightAsset.id() + " => " + FormatUtil.FormatDouble (
  136.                 highestWeightAsset.amount(), preDecimalDigits, postDecimalDigits, 100.
  137.             ) + "%     ||"
  138.         );

  139.         System.out.println (
  140.             "\t| LOW   : " + lowestWeightAsset.id() + " => " + FormatUtil.FormatDouble (
  141.                 lowestWeightAsset.amount(), preDecimalDigits, postDecimalDigits, 100.
  142.             ) + "%     ||"
  143.         );

  144.         System.out.println ("\t|--------------------------------------------------------||");

  145.         System.out.println (
  146.             "\t| TOTAL :                                   " + FormatUtil.FormatDouble (
  147.                 forwardReverseOptimizationPortfolio.notional(), preDecimalDigits, postDecimalDigits, 100.
  148.             ) + "%     ||"
  149.         );

  150.         System.out.println ("\t|--------------------------------------------------------||\n");
  151.     }

  152.     public static final void main (
  153.         final String[] astArgs)
  154.         throws Exception
  155.     {
  156.         EnvManager.InitEnv ("");

  157.         double tau = 0.025;
  158.         double riskAversion = 3.07;
  159.         double riskFreeRate = 0.00;
  160.         double[] assetSpaceJointReturnsReconcilerArray = new double[]
  161.         {
  162.             0.0007,
  163.             0.0050,
  164.             0.0650,
  165.             0.0432,
  166.             0.0759,
  167.             0.0394,
  168.             0.0493,
  169.             0.0684
  170.         };
  171.         double[] posteriorPriorDeviationReconcilerArray = new double[]
  172.         {
  173.             -0.0002,
  174.             -0.0017,
  175.              0.0008,
  176.              0.0024,
  177.              0.0016,
  178.              0.0023,
  179.              0.0013,
  180.              0.0024
  181.         };
  182.         double[] posteriorPortfolioWeightReconcilerArray = new double[]
  183.         {
  184.               0.2988,
  185.               0.1559,
  186.               0.0935,
  187.               0.1482,
  188.               0.0104,
  189.               0.0165,
  190.               0.2781,
  191.               0.0349
  192.         };
  193.         double[] posteriorWeightDeviationReconcilerArray = new double[]
  194.         {
  195.               0.1054,
  196.              -0.1054,
  197.              -0.0273,
  198.               0.0273,
  199.              -0.0030,
  200.               0.0030,
  201.               0.0363,
  202.               0.0000
  203.         };
  204.         String[] assetIDArray = new String[]
  205.         {
  206.             "US BONDS                       ",
  207.             "INTERNATIONAL BONDS            ",
  208.             "US LARGE GROWTH                ",
  209.             "US LARGE VALUE                 ",
  210.             "US SMALL GROWTH                ",
  211.             "US SMALL VALUE                 ",
  212.             "INTERNATIONAL DEVELOPED EQUITY ",
  213.             "INTERNATIONAL EMERGING EQUITY  "
  214.         };
  215.         double[] assetEquilibriumWeightArray = new double[]
  216.         {
  217.             0.1934,
  218.             0.2613,
  219.             0.1209,
  220.             0.1209,
  221.             0.0134,
  222.             0.0134,
  223.             0.2418,
  224.             0.0349
  225.         };
  226.         double[][] assetExcessReturnsCovarianceMatrix = new double[][]
  227.         {
  228.             { 0.001005,  0.001328, -0.000579, -0.000675,  0.000121,  0.000128, -0.000445, -0.000437},
  229.             { 0.001328,  0.007277, -0.001307, -0.000610, -0.002237, -0.000989,  0.001442, -0.001535},
  230.             {-0.000579, -0.001307,  0.059582,  0.027588,  0.063497,  0.023036,  0.032967,  0.048039},
  231.             {-0.000675, -0.000610,  0.027588,  0.029609,  0.026572,  0.021465,  0.020697,  0.029854},
  232.             { 0.000121, -0.002237,  0.063497,  0.026572,  0.102488,  0.042744,  0.039943,  0.065994},
  233.             { 0.000128, -0.000989,  0.023036,  0.021465,  0.042744,  0.032056,  0.019881,  0.032235},
  234.             {-0.000445,  0.001442,  0.032967,  0.020697,  0.039943,  0.019881,  0.028355,  0.035064},
  235.             {-0.000437, -0.001535,  0.048039,  0.029854,  0.065994,  0.032235,  0.035064,  0.079958}
  236.         };
  237.         double[][] assetSpaceViewProjectionMatrix = new double[][]
  238.         {
  239.             {  0.00,  0.00,  0.00,  0.00,  0.00,  0.00,  1.00,  0.00},
  240.             { -1.00,  1.00,  0.00,  0.00,  0.00,  0.00,  0.00,  0.00},
  241.             {  0.00,  0.00,  0.90, -0.90,  0.10, -0.10,  0.00,  0.00}
  242.         };
  243.         double[] projectionExpectedExcessReturnsArray = new double[]
  244.         {
  245.             0.0525,
  246.             0.0025,
  247.             0.0200
  248.         };

  249.         double[][] projectionExcessReturnsCovarianceMatrix =
  250.             ProjectionDistributionLoading.ProjectionCovariance (
  251.                 assetExcessReturnsCovarianceMatrix,
  252.                 assetSpaceViewProjectionMatrix,
  253.                 tau
  254.             );

  255.         R1MultivariateNormal viewDistribution = R1MultivariateNormal.Standard (
  256.             new MultivariateMeta (
  257.                 new String[]
  258.                 {
  259.                     "PROJECTION #1",
  260.                     "PROJECTION #2",
  261.                     "PROJECTION #3"
  262.                 }
  263.             ),
  264.             projectionExpectedExcessReturnsArray,
  265.             projectionExcessReturnsCovarianceMatrix
  266.         );

  267.         R1MultivariateConvolutionMetrics jointPosteriorMetrics = new BlackLittermanCombinationEngine (
  268.             ForwardReverseHoldingsAllocation.Reverse (
  269.                 Portfolio.Standard (
  270.                     assetIDArray,
  271.                     assetEquilibriumWeightArray
  272.                 ),
  273.                 assetExcessReturnsCovarianceMatrix,
  274.                 riskAversion
  275.             ),
  276.             new PriorControlSpecification (
  277.                 true,
  278.                 riskFreeRate,
  279.                 tau
  280.             ),
  281.             new ProjectionSpecification (
  282.                 viewDistribution,
  283.                 assetSpaceViewProjectionMatrix
  284.             )
  285.         ).customConfidenceRun().jointPosteriorMetrics();

  286.         R1MultivariateNormal priorDistribution = (R1MultivariateNormal) jointPosteriorMetrics.prior();

  287.         R1MultivariateNormal jointDistribution = (R1MultivariateNormal) jointPosteriorMetrics.joint();

  288.         R1MultivariateNormal posteriorDistribution =
  289.             (R1MultivariateNormal) jointPosteriorMetrics.posterior();

  290.         double[] assetSpacePriorReturnsArray = priorDistribution.mean();

  291.         double[] assetSpaceJointReturnsArray = jointDistribution.mean();

  292.         double[][] aadblAssetSpaceJointCovariance = jointDistribution.covariance().covarianceMatrix();

  293.         double[][] aadblAssetSpacePosteriorCovariance =
  294.             posteriorDistribution.covariance().covarianceMatrix();

  295.         ForwardReverseHoldingsAllocation posteriorForwardReverseOptimizationOutput =
  296.             ForwardReverseHoldingsAllocation.Forward (
  297.                 assetIDArray,
  298.                 assetSpaceJointReturnsArray,
  299.                 assetExcessReturnsCovarianceMatrix,
  300.                 riskAversion
  301.             );

  302.         double[] posteriorWeightArray =
  303.             posteriorForwardReverseOptimizationOutput.optimalPortfolio().weightArray();

  304.         System.out.println ("\n\t|---------------------------||");

  305.         System.out.println ("\t| TAU            => " + FormatUtil.FormatDouble (tau, 1, 4, 1.) + " ||");

  306.         System.out.println (
  307.             "\t| RISK AVERSION  => " + FormatUtil.FormatDouble (riskAversion, 1, 4, 1.) + " ||"
  308.         );

  309.         System.out.println (
  310.             "\t| RISK FREE RATE => " + FormatUtil.FormatDouble (riskFreeRate, 1, 4, 1.) + " ||"
  311.         );

  312.         System.out.println ("\t|---------------------------||");

  313.         System.out.println ("\n\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  314.         System.out.println ("\t|                                               PRIOR CROSS ASSET COVARIANCE MATRIX                                                       ||");

  315.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  316.         for (int assetIndexI = 0;
  317.             assetIndexI < assetIDArray.length;
  318.             ++assetIndexI)
  319.         {
  320.             String dump = "\t| " + assetIDArray[assetIndexI] + " ";

  321.             for (int assetIndexJ = 0;
  322.                 assetIndexJ < assetIDArray.length;
  323.                 ++assetIndexJ)
  324.             {
  325.                 dump += "|" + FormatUtil.FormatDouble (
  326.                     assetExcessReturnsCovarianceMatrix[assetIndexI][assetIndexJ], 1, 8, 1.
  327.                 ) + " ";
  328.             }

  329.             System.out.println (dump + "||");
  330.         }

  331.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  332.         System.out.println ("\n\t|---------------------------------------------------------------------------------------------||");

  333.         System.out.println ("\t|                         VIEW SCOPING ASSET PROJECTION LOADING                               ||");

  334.         System.out.println ("\t|---------------------------------------------------------------------------------------------||");

  335.         for (int viewIndex = 0;
  336.             viewIndex < assetSpaceViewProjectionMatrix.length;
  337.             ++viewIndex)
  338.         {
  339.             String dump = "\t|  #" + viewIndex + " ";

  340.             for (int assetIndex = 0;
  341.                 assetIndex < assetIDArray.length;
  342.                 ++assetIndex)
  343.             {
  344.                 dump += "| " + FormatUtil.FormatDouble (
  345.                     assetSpaceViewProjectionMatrix[viewIndex][assetIndex], 1, 5, 1.
  346.                 ) + " ";
  347.             }

  348.             System.out.println (dump + "||");
  349.         }

  350.         System.out.println ("\t|---------------------------------------------------------------------------------------------||");

  351.         System.out.println ("\n\t|----------------------------------------------||");

  352.         for (int viewIndexI = 0;
  353.             viewIndexI < assetSpaceViewProjectionMatrix.length;
  354.             ++viewIndexI)
  355.         {
  356.             String dump = "\t|  #" + viewIndexI + " ";

  357.             for (int viewIndexJ = 0;
  358.                 viewIndexJ < assetSpaceViewProjectionMatrix.length;
  359.                 ++viewIndexJ)
  360.             {
  361.                 dump += "|" + FormatUtil.FormatDouble (
  362.                     projectionExcessReturnsCovarianceMatrix[viewIndexI][viewIndexJ], 1, 6, 1.
  363.                 ) + " ";
  364.             }

  365.             System.out.println (
  366.                 dump + "|" + FormatUtil.FormatDouble (
  367.                     projectionExpectedExcessReturnsArray[viewIndexI], 1, 2, 100.
  368.                 ) + "% ||"
  369.             );
  370.         }

  371.         System.out.println ("\t|----------------------------------------------||");

  372.         System.out.println ("\n\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  373.         System.out.println ("\t|                                               JOINT CROSS ASSET COVARIANCE MATRIX                                                       ||");

  374.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  375.         for (int assetIndexI = 0;
  376.             assetIndexI < assetIDArray.length;
  377.             ++assetIndexI)
  378.         {
  379.             String dump = "\t| " + assetIDArray[assetIndexI] + " ";

  380.             for (int assetIndexJ = 0;
  381.                 assetIndexJ < assetIDArray.length;
  382.                 ++assetIndexJ)
  383.             {
  384.                 dump += "|" + FormatUtil.FormatDouble (
  385.                     aadblAssetSpaceJointCovariance[assetIndexI][assetIndexJ], 1, 8, 1.
  386.                 ) + " ";
  387.             }

  388.             System.out.println (dump + "||");
  389.         }

  390.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  391.         System.out.println ("\n\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  392.         System.out.println ("\t|                                             POSTERIOR CROSS ASSET COVARIANCE MATRIX                                                     ||");

  393.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||");

  394.         for (int assetIndexI = 0;
  395.             assetIndexI < assetIDArray.length;
  396.             ++assetIndexI)
  397.         {
  398.             String dump = "\t| " + assetIDArray[assetIndexI] + " ";

  399.             for (int assetIndexJ = 0;
  400.                 assetIndexJ < assetIDArray.length;
  401.                 ++assetIndexJ)
  402.             {
  403.                 dump += "|" + FormatUtil.FormatDouble (
  404.                     aadblAssetSpacePosteriorCovariance[assetIndexI][assetIndexJ], 1, 8, 1.
  405.                 ) + " ";
  406.             }

  407.             System.out.println (dump + "||");
  408.         }

  409.         System.out.println ("\t|-----------------------------------------------------------------------------------------------------------------------------------------||\n");

  410.         System.out.println ("\t|----------------------------------------------------||");

  411.         System.out.println ("\t|               JOINT/POSTERIOR RETURN               ||");

  412.         System.out.println ("\t|----------------------------------------------------||");

  413.         System.out.println ("\t|                 ID                => DROP  | IDZO  ||");

  414.         System.out.println ("\t|----------------------------------------------------||");

  415.         for (int viewIndex = 0;
  416.             viewIndex < assetSpaceJointReturnsReconcilerArray.length;
  417.             ++viewIndex)
  418.         {
  419.             System.out.println (
  420.                 "\t| [" + assetIDArray[viewIndex] + "] =>" +
  421.                 FormatUtil.FormatDouble (assetSpaceJointReturnsArray[viewIndex], 1, 2, 100.) + "% |" +
  422.                 FormatUtil.FormatDouble (assetSpaceJointReturnsReconcilerArray[viewIndex], 1, 2, 100.) + "% ||"
  423.             );
  424.         }

  425.         System.out.println ("\t|----------------------------------------------------||\n");

  426.         System.out.println ("\t|----------------------------------------------------||");

  427.         System.out.println ("\t|           RETURNS DEVIATION RECONCILER             ||");

  428.         System.out.println ("\t|----------------------------------------------------||");

  429.         System.out.println ("\t|                 ID                => DROP  | IDZO  ||");

  430.         System.out.println ("\t|----------------------------------------------------||");

  431.         for (int assetIndex = 0;
  432.             assetIndex < assetSpacePriorReturnsArray.length;
  433.             ++assetIndex)
  434.         {
  435.             System.out.println (
  436.                 "\t| [" + assetIDArray[assetIndex] + "] =>" +
  437.                 FormatUtil.FormatDouble (
  438.                     assetSpaceJointReturnsArray[assetIndex] - assetSpacePriorReturnsArray[assetIndex],
  439.                     1, 2, 100.
  440.                 ) + "% |" +
  441.                 FormatUtil.FormatDouble (posteriorPriorDeviationReconcilerArray[assetIndex], 1, 2, 100.)
  442.                     + "% ||"
  443.             );
  444.         }

  445.         System.out.println ("\t|----------------------------------------------------||\n");

  446.         ForwardOptimizationWeights (
  447.             posteriorForwardReverseOptimizationOutput,
  448.             posteriorPortfolioWeightReconcilerArray,
  449.             2,
  450.             2,
  451.             "\t|               POSTERIOR WEIGHTS RECONCILER             ||"
  452.         );

  453.         System.out.println ("\t|--------------------------------------------------------||");

  454.         System.out.println ("\t|              WEIGHT DEVIATION RECONCILER               ||");

  455.         System.out.println ("\t|--------------------------------------------------------||");

  456.         System.out.println ("\t|                 ID                =>   DROP  |   IDZO  ||");

  457.         System.out.println ("\t|--------------------------------------------------------||");

  458.         for (int assetIndex = 0;
  459.             assetIndex < assetEquilibriumWeightArray.length;
  460.             ++assetIndex)
  461.         {
  462.             System.out.println (
  463.                 "\t| [" + assetIDArray[assetIndex] + "] => " +
  464.                 FormatUtil.FormatDouble (
  465.                     posteriorWeightArray[assetIndex] - assetEquilibriumWeightArray[assetIndex], 2, 2, 100.
  466.                 ) + "% | " +
  467.                 FormatUtil.FormatDouble (posteriorWeightDeviationReconcilerArray[assetIndex], 2, 2, 100.)
  468.                     + "% ||"
  469.             );
  470.         }

  471.         System.out.println ("\t|--------------------------------------------------------||\n");

  472.         EnvManager.TerminateEnv();
  473.     }
  474. }