HullAndWhiteOneFactor.CapHW1.HWCap C# (CSharp) Method

HWCap() public method

Calculates the price of a cap within the Hull-White model.
public HWCap ( double a, double sigma, double K, double deltaK, double T ) : double
a double /// Hull-White alpha parameter. ///
sigma double /// Hull-White sigma parameter. ///
K double /// Strike rate. ///
deltaK double /// Time period between caplets expressed in year fraction. ///
T double /// Cap maturity. ///
return double
        public double HWCap(double a, double sigma, double K, double deltaK, double T)
        {
            double KK = 1.0 / (1.0 + K * deltaK);
            double NP = Math.Round(T / deltaK);
            int np = (int)NP;
            double CA = 0;
            double[] s = new double[np];
            s[0] = deltaK;
            double[] caplets = new double[np - 1];
            for (int i = 1; i < s.Length; i++)
            {
                s[i] = s[i - 1] + deltaK;
                caplets[i - 1] = HWCaplet(a, sigma, s[i - 1], s[i], KK);
                CA = CA + caplets[i - 1];
            }

            return CA;
        }

Usage Example

        public void Test()
        {
            double[,] values = { { .5,  .015 },
                                 {  1, .0165 },
                                 {  2, .0168 },
                                 {  3, .0172 },
                                 {  5, .0182 },
                                 {  8, .0210 },
                                 { 10,  .025 },
                                 { 15,  .031 },
                                 { 20,  .035 },
                                 { 30,  .037 },
                                 { 40,  .038 }, };

            Function zeroratecurve = new PFunction(null);

            zeroratecurve.Expr = values;
            (zeroratecurve as PFunction).m_Function.iType = EInterpolationType.LINEAR;

            // Execute the test.
            CapHW1 hwc = new CapHW1(zeroratecurve);

            // CAP and FLOOR Tests.
            double[] results = new double[2];
            results[0] = hwc.HWCap(0.14, 0.02, 0.02, 0.5, 1);
            results[1] = hwc.HWCap(0.14, 0.02, 0.02, 0.5, 2);

            Console.WriteLine("CAP 2 col 1 row:" + results[0]);
            Console.WriteLine("CAP 2 col 2 row:" + results[1]);

            // Check the results with previously manually calculated values.
            double[] targets = { 0.00214717607719883, 0.0084939015243779 };

            double eps = 10e-6;

            for (int r = 0; r < results.Length; r++)
            {
                Assert.LessOrEqual(Math.Abs(targets[r] - results[r]), eps);
            }
        }
All Usage Examples Of HullAndWhiteOneFactor.CapHW1::HWCap