ForwardRateUpdate.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>ForwardRateUpdate</i> contains the Increment and Snapshot of the Forward Rate Latent State evolved
  80.  * through the SABR Dynamics.
  81.  *
  82.  *  <br><br>
  83.  *  <ul>
  84.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ProductCore.md">Product Core Module</a></li>
  85.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/FixedIncomeAnalyticsLibrary.md">Fixed Income Analytics</a></li>
  86.  *      <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>
  87.  *      <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>
  88.  *  </ul>
  89.  *
  90.  * @author Lakshmi Krishnamurthy
  91.  */

  92. public class ForwardRateUpdate extends org.drip.dynamics.evolution.LSQMPointUpdate {
  93.     private org.drip.state.identifier.ForwardLabel _lslForward = null;

  94.     /**
  95.      * ForwardRateUpdate Creator
  96.      *
  97.      * @param lslForward The Forward Rate Latent State Label
  98.      * @param iInitialDate The Initial Date
  99.      * @param iFinalDate The Final Date
  100.      * @param iTargetPointDate The Target Point Date
  101.      * @param dblForwardRate The Forward Rate
  102.      * @param dblForwardRateIncrement The Forward Rate Increment
  103.      * @param dblForwardRateVolatility The Forward Volatility
  104.      * @param dblForwardRateVolatilityIncrement The Forward Volatility Rate
  105.      *
  106.      * @return Instance of ForwardRateUpdate
  107.      */

  108.     public static final ForwardRateUpdate Create (
  109.         final org.drip.state.identifier.ForwardLabel lslForward,
  110.         final int iInitialDate,
  111.         final int iFinalDate,
  112.         final int iTargetPointDate,
  113.         final double dblForwardRate,
  114.         final double dblForwardRateIncrement,
  115.         final double dblForwardRateVolatility,
  116.         final double dblForwardRateVolatilityIncrement)
  117.     {
  118.         org.drip.dynamics.evolution.LSQMPointRecord lrSnapshot = new
  119.             org.drip.dynamics.evolution.LSQMPointRecord();

  120.         if (!lrSnapshot.setQM (lslForward,
  121.             org.drip.analytics.definition.LatentStateStatic.FORWARD_QM_FORWARD_RATE, dblForwardRate))
  122.             return null;

  123.         if (!lrSnapshot.setQM (org.drip.state.identifier.VolatilityLabel.Standard (lslForward),
  124.             org.drip.analytics.definition.LatentStateStatic.VOLATILITY_QM_SABR_VOLATILITY,
  125.                 dblForwardRateVolatility))
  126.             return null;

  127.         org.drip.dynamics.evolution.LSQMPointRecord lrIncrement = new
  128.             org.drip.dynamics.evolution.LSQMPointRecord();

  129.         if (!lrIncrement.setQM (lslForward,
  130.             org.drip.analytics.definition.LatentStateStatic.FORWARD_QM_FORWARD_RATE,
  131.                 dblForwardRateIncrement))
  132.             return null;

  133.         if (!lrIncrement.setQM (org.drip.state.identifier.VolatilityLabel.Standard (lslForward),
  134.             org.drip.analytics.definition.LatentStateStatic.VOLATILITY_QM_SABR_VOLATILITY,
  135.                 dblForwardRateVolatilityIncrement))
  136.             return null;

  137.         try {
  138.             return new ForwardRateUpdate (lslForward, iInitialDate, iFinalDate, iTargetPointDate, lrSnapshot,
  139.                 lrIncrement);
  140.         } catch (java.lang.Exception e) {
  141.             e.printStackTrace();
  142.         }

  143.         return null;
  144.     }

  145.     private ForwardRateUpdate (
  146.         final org.drip.state.identifier.ForwardLabel lslForward,
  147.         final int iInitialDate,
  148.         final int iFinalDate,
  149.         final int iViewDate,
  150.         final org.drip.dynamics.evolution.LSQMPointRecord lrSnapshot,
  151.         final org.drip.dynamics.evolution.LSQMPointRecord lrIncrement)
  152.         throws java.lang.Exception
  153.     {
  154.         super (iInitialDate, iFinalDate, iViewDate, lrSnapshot, lrIncrement);

  155.         if (null == (_lslForward = lslForward))
  156.             throw new java.lang.Exception ("ForwardRateUpdate ctr: Invalid Inputs");
  157.     }

  158.     /**
  159.      * Retrieve the Forward Rate
  160.      *
  161.      * @return The Forward Rate
  162.      *
  163.      * @throws java.lang.Exception Thrown if the Forward Rate is not available
  164.      */

  165.     public double forwardRate()
  166.         throws java.lang.Exception
  167.     {
  168.         return snapshot().qm (_lslForward,
  169.             org.drip.analytics.definition.LatentStateStatic.FORWARD_QM_FORWARD_RATE);
  170.     }

  171.     /**
  172.      * Retrieve the Forward Rate Increment
  173.      *
  174.      * @return The Forward Rate Increment
  175.      *
  176.      * @throws java.lang.Exception Thrown if the Forward Rate Increment is not available
  177.      */

  178.     public double forwardRateIncrement()
  179.         throws java.lang.Exception
  180.     {
  181.         return increment().qm (_lslForward,
  182.             org.drip.analytics.definition.LatentStateStatic.FORWARD_QM_FORWARD_RATE);
  183.     }

  184.     /**
  185.      * Retrieve the Forward Rate Volatility
  186.      *
  187.      * @return The Forward Rate Volatility
  188.      *
  189.      * @throws java.lang.Exception Thrown if the Forward Rate Volatility is not available
  190.      */

  191.     public double forwardRateVolatility()
  192.         throws java.lang.Exception
  193.     {
  194.         return snapshot().qm (org.drip.state.identifier.VolatilityLabel.Standard (_lslForward),
  195.             org.drip.analytics.definition.LatentStateStatic.VOLATILITY_QM_SABR_VOLATILITY);
  196.     }

  197.     /**
  198.      * Retrieve the Forward Rate Volatility Increment
  199.      *
  200.      * @return The Forward Rate Volatility Increment
  201.      *
  202.      * @throws java.lang.Exception Thrown if the Forward Rate Volatility Increment is not available
  203.      */

  204.     public double forwardRateVolatilityIncrement()
  205.         throws java.lang.Exception
  206.     {
  207.         return increment().qm (org.drip.state.identifier.VolatilityLabel.Standard (_lslForward),
  208.             org.drip.analytics.definition.LatentStateStatic.VOLATILITY_QM_SABR_VOLATILITY);
  209.     }
  210. }