ImpliedBlackVolatility.java

  1. package org.drip.dynamics.sabr;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

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

  78. /**
  79.  * <i>ImpliedBlackVolatility</i> contains the Output of the Black Volatility Implication Calculations.
  80.  *
  81.  *  <br><br>
  82.  *  <ul>
  83.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ProductCore.md">Product Core Module</a></li>
  84.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/FixedIncomeAnalyticsLibrary.md">Fixed Income Analytics</a></li>
  85.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/dynamics/README.md">HJM, Hull White, LMM, and SABR Dynamic Evolution Models</a></li>
  86.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/dynamics/sabr/README.md">SABR Based Latent State Evolution</a></li>
  87.  *  </ul>
  88.  *
  89.  * @author Lakshmi Krishnamurthy
  90.  */

  91. public class ImpliedBlackVolatility {
  92.     private double _dblA = java.lang.Double.NaN;
  93.     private double _dblB = java.lang.Double.NaN;
  94.     private double _dblZ = java.lang.Double.NaN;
  95.     private double _dblTTE = java.lang.Double.NaN;
  96.     private double _dblChiZ = java.lang.Double.NaN;
  97.     private double _dblStrike = java.lang.Double.NaN;
  98.     private double _dblATMForwardRate = java.lang.Double.NaN;
  99.     private double _dblImpliedVolatility = java.lang.Double.NaN;

  100.     /**
  101.      * ImpliedBlackVolatility Constructor
  102.      *
  103.      * @param dblStrike Strike
  104.      * @param dblATMForwardRate Forward Rate
  105.      * @param dblTTE Time To Expiry
  106.      * @param dblA A
  107.      * @param dblZ Z
  108.      * @param dblChiZ Chi (Z)
  109.      * @param dblB B
  110.      * @param dblImpliedVolatility The Implied Volatility
  111.      *
  112.      * @throws java.lang.Exception Thrown if the Inputs are invalid
  113.      */

  114.     public ImpliedBlackVolatility (
  115.         final double dblStrike,
  116.         final double dblATMForwardRate,
  117.         final double dblTTE,
  118.         final double dblA,
  119.         final double dblZ,
  120.         final double dblChiZ,
  121.         final double dblB,
  122.         final double dblImpliedVolatility)
  123.         throws java.lang.Exception
  124.     {
  125.         if (!org.drip.numerical.common.NumberUtil.IsValid (_dblStrike = dblStrike) ||
  126.             !org.drip.numerical.common.NumberUtil.IsValid (_dblATMForwardRate = dblATMForwardRate) ||
  127.                 !org.drip.numerical.common.NumberUtil.IsValid (_dblTTE = dblTTE) ||
  128.                     !org.drip.numerical.common.NumberUtil.IsValid (_dblA = dblA) ||
  129.                         !org.drip.numerical.common.NumberUtil.IsValid (_dblZ = dblZ) ||
  130.                             !org.drip.numerical.common.NumberUtil.IsValid (_dblChiZ = dblChiZ) ||
  131.                                 !org.drip.numerical.common.NumberUtil.IsValid (_dblB = dblB) ||
  132.                                     !org.drip.numerical.common.NumberUtil.IsValid (_dblImpliedVolatility =
  133.                                         dblImpliedVolatility))
  134.             throw new java.lang.Exception ("ImpliedBlackVolatility ctr: Invalid Inputs");
  135.     }

  136.     /**
  137.      * Retrieve the Strike
  138.      *
  139.      * @return The Strike
  140.      */

  141.     public double strike()
  142.     {
  143.         return _dblStrike;
  144.     }

  145.     /**
  146.      * Retrieve the ATM Forward Rate
  147.      *
  148.      * @return The ATM Forward Rate
  149.      */

  150.     public double atmForwardRate()
  151.     {
  152.         return _dblATMForwardRate;
  153.     }

  154.     /**
  155.      * Retrieve TTE
  156.      *
  157.      * @return TTE
  158.      */

  159.     public double tte()
  160.     {
  161.         return _dblTTE;
  162.     }

  163.     /**
  164.      * Retrieve A
  165.      *
  166.      * @return A
  167.      */

  168.     public double a()
  169.     {
  170.         return _dblA;
  171.     }

  172.     /**
  173.      * Retrieve Z
  174.      *
  175.      * @return Z
  176.      */

  177.     public double z()
  178.     {
  179.         return _dblZ;
  180.     }

  181.     /**
  182.      * Retrieve Chi
  183.      *
  184.      * @return Chi
  185.      */

  186.     public double chi()
  187.     {
  188.         return _dblChiZ;
  189.     }

  190.     /**
  191.      * Retrieve B
  192.      *
  193.      * @return B
  194.      */

  195.     public double b()
  196.     {
  197.         return _dblB;
  198.     }

  199.     /**
  200.      * Retrieve the Implied Volatility
  201.      *
  202.      * @return The Implied Volatility
  203.      */

  204.     public double impliedVolatility()
  205.     {
  206.         return _dblImpliedVolatility;
  207.     }
  208. }