public void TestAsianHybridCliquet5Y() { // DateTime valueDate = new DateTime(2009, 10, 20); //DateTime expiryDate = new DateTime(2015, 04, 19); SetUpExampleCliquet(); int nobsin = 13; int nobsout = 13; int numResets = nobsin + nobsout; int[] resetDays = new int[] { 0, 31, 61, 92, 123, 151, 182, 212, 243, 273, 304, 335, 365, 1643, 1673, 1704, 1734, 1765, 1796, 1826, 1857, 1887, 1918, 1949, 1977, 2008 }; double[] resetAmts = new double[numResets]; double[] vols = new double[numResets]; for (int idx = 0; idx < numResets; idx++) { resetAmts[idx] = 4861; vols[idx] = 0.35; } // resetAmts[4] = 6000; // resetAmts[5] = 4000; // resetAmts[9] = 3500; // resetAmts[11] = 4000; // resetAmts[12] = 6000; double floor = 0.0; double cap = 0.0; int numsimulations = 100000; CliquetPricer ah = new CliquetPricer("AsianHybrid", spot, strike, tau, divdays, dd, rtdays, rtamts, resetDays, resetAmts, vols, floor, cap, numsimulations, nobsin, nobsout, 3151, true); double[,] vpr = ah.GetPriceAndGreeks(); double stderr1 = vpr[0, 1]; double price = vpr[0, 0]; Assert.AreEqual(0.2632689, price, 2 * stderr1); }
public void TestTaurusCliquet1Y() { DateTime valueDate = new DateTime(2009, 08, 28); DateTime expiryDate = new DateTime(2009, 12, 15); double t = System.Convert.ToDouble(expiryDate.Subtract(valueDate).Days) / 365.0; double spot = 4200; double strike = 1; int[] ratedays = new int[] { 1, 2925 }; double[] rateamts = new double[] { 0.034932296, 0.0349322696 }; int[] resetDays = new int[] { -347, -317, -286, -256, -225, -194, -166, -135, -105, -74, -44, -13, 18, 48, 79, 109 }; double[] vols = new double[] { 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6 }; double[] resetAmts = new double[] { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 0 }; int[] divdays = new int[] { 0 }; double[] divamts = new double[] { 0.0 }; int numsimulations = 100000; int nobsin = 8; int nobsout = 8; double floor = 0; double cap = 0.067; CliquetPricer ah = new CliquetPricer("TaurusCliquet", spot, strike, t, divdays, divamts, ratedays, rateamts, resetDays, resetAmts, vols, floor, cap, numsimulations, nobsin, nobsout, 3151, true); double[,] vpr = ah.GetPriceAndGreeks(); double price = vpr[0, 0]; double stderr1 = vpr[0, 1]; Assert.AreEqual(0.05207, price, 2 * stderr1); }
public void TestMonteVanilla() { DateTime valueDate = new DateTime(2009, 08, 28); DateTime expiryDate = new DateTime(2009, 12, 15); double t = System.Convert.ToDouble(expiryDate.Subtract(valueDate).Days) / 365.0; double spot = 4200; double strike = 4200; int[] ratedays = new int[] { 1, 2925 }; double[] rateamts = new double[] { 0.034932296, 0.0349322696 }; int[] resetDays = new int[] { -347, -317, -286, -256, -225, -194, -166, -135, -105, -74, -44, -13, 18, 48, 79, 109 }; double[] vols = new double[] { 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.60, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6 }; double[] resetAmts = new double[] { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 0 }; int[] divdays = new int[] { 0 }; double[] divamts = new double[] { 0.0 }; int numsimulations = 100000; int nobsin = 8; int nobsout = 8; double floor = 0; double cap = 0.067; CliquetPricer ah = new CliquetPricer("Vanilla", spot, strike, t, divdays, divamts, ratedays, rateamts, resetDays, resetAmts, vols, floor, cap, numsimulations, nobsin, nobsout, 3151, true); double[,] vpr = ah.GetPriceAndGreeks(); double stderr1 = vpr[0, 1]; double stderr2 = vpr[1, 1]; double stderr3 = vpr[2, 1]; double stderr4 = vpr[3, 1]; double stderr5 = vpr[4, 1]; double delta = vpr[1, 0]; double gamma = vpr[2, 0]; double vega = vpr[3, 0]; double theta = vpr[4, 0]; double rho = vpr[5, 0]; Assert.AreEqual(566.1626786, vpr[0, 0], 2 * stderr1); Assert.AreEqual(0.57760, delta, 2 * stderr2); Assert.AreEqual(0.00028, gamma, 2 * stderr3); Assert.AreEqual(0.01 * 898.266, vega, 2 * stderr4); Assert.AreEqual(-2.65028, theta, 2 * stderr5); }