GenericLMM_MCPricer Example CS

C# Example - GenericLMM_MCPricer![]() ![]() ![]() ![]() ![]() // ################################################################################## // The first function here GenericLMM_MCPricer(), contains a series of // function calls leading upto the main function call, the second function // within this file ( GenericLMM_MCPricerPart() ). // which contains the answer that we are looking for.![]() // The first function here is simply an example of how to construct the parameters // in order acquire either a string Key (that is to be passed to other functions) // or a computed result.![]() // If you are viewing this source code from the chm or web help file you can use the // outlining features to collapse certain sections of the code for better readability. // ################################################################################## ![]() using System;![]() // Optional using instruction. We will use a mix of utilising fully qualified names (in the case of the financial objects) // and using the reduced version (in the case of declaring enumerations). // This is just to demostrate both types of coding.![]() using CTQL; // You need to add a reference to the QuantToolsNET.v2.dll also![]() // Some global parameter in order to append to user defined keys. // We use it here to ensure that we have unique Keys (in the case several of our examples // use the same key-name) // In normal use, a user defined string will be used and so this variable will be pointless. static int nCTLMMMCPricerGlobal; // Used by function parameters that take an optional range value. // In Excel we simply omit the value, within the API functions, // we pass an empty range object static CTQL.CTRangeData oEmptyRange = new CTQL.CTRangeData(); public string CS_EX_GenericLMM_MCPricer() { nCTLMMMCPricerGlobal += 1; string szErrorMsg = "";![]() try {![]() ![]() // Creates an one dimensional interpolation object. ![]() string MyInterpObject1D; MyInterpObject1D = InterpObject1DPart(); ![]() ![]() // Creates an one dimensional interpolation object. ![]() string MyInterpObject1D_2; MyInterpObject1D_2 = InterpObject1D__2Part(); ![]() ![]() // Creates a two dimensional interpolation object. ![]() string MyInterpObject2D; MyInterpObject2D = InterpObject2DPart(); ![]() ![]() // Creates a two dimensional interpolation object. ![]() string MyInterpObject2D_2; MyInterpObject2D_2 = InterpObject2D__2Part(); ![]() ![]() // UK date calendar used within the UK stock exchange. ![]() string MyCALUKExchange; MyCALUKExchange = CALUKExchangePart(); ![]() ![]() // EURO calendar used for holiday adjustments. ![]() string MyEuroCal; MyEuroCal = CALEUROPart(); ![]() ![]() // Creates a centralized valuation date object. ![]() string MyValuationDate; MyValuationDate = ValueDateObjPart(); ![]() ![]() // Creates a Deposit template which is almost identical to a Libor // Index, but without the YieldCurve information. string MyDepoTPL; MyDepoTPL = CreateDepoTemplatePart( MyCALUKExchange, MyEuroCal); ![]() ![]() // Creates a Swap template which is almost identical to the definition // of the parameters of a swap contract, but without the swap duration, // buysell, and YieldCurve information. string MySwapTPL; MySwapTPL = CreateSwapTemplatePart( MyEuroCal, MyDepoTPL); ![]() ![]() // Creates a yield curve using market rates (No cross-currency // Swaps). string MyMiniYC; MyMiniYC = MKTYC_D__3Part( MyValuationDate, MyDepoTPL, MySwapTPL); ![]() ![]() // Creates a new Index code. string MyNewIndex2; MyNewIndex2 = CreateIndex__2Part( MyCALUKExchange, MyEuroCal, MyMiniYC); ![]() ![]() // Creates a Libor Forward Model Process container object. string MyLMMProcess2; MyLMMProcess2 = LMMProcess2Part( MyNewIndex2); ![]() ![]() // Creates a an extended linear-exponential volatility model for // the libor market model. string My3rdLMMLinearExpVolModel2; My3rdLMMLinearExpVolModel2 = LMMLinearExpVolModel2__3Part( MyLMMProcess2); ![]() ![]() // Creates an extended exponential correlation model for the libor // market model. string My2ndLMMLinearExpCorrModel2; My2ndLMMLinearExpCorrModel2 = LMMLinearExpCorrModel2__2Part( MyLMMProcess2); ![]() ![]() // Given volatility and correlation specification objects, creates // a Libor Forward Market Simulation Process object to be used // within the 'CapeTools LMM Process Simulation' or 'CapeTools // Generic IR LMM MonteCarlo Pricer' category of functions. string MyLMMSimProcess; MyLMMSimProcess = LMMSimProcessPart( MyLMMProcess2, My3rdLMMLinearExpVolModel2, My2ndLMMLinearExpCorrModel2); ![]() ![]() // Creates a generic pricing monte carlo object given a process // object and a pricing grid. string MyGenericLMM_MCPricer; MyGenericLMM_MCPricer = GenericLMM_MCPricerPart( MyLMMSimProcess, MyInterpObject1D, MyInterpObject1D_2, MyInterpObject2D, MyInterpObject2D_2); // This is the result we are looking for. return MyGenericLMM_MCPricer; ![]() } catch(Exception e) { szErrorMsg = e.Message; throw e; } } ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string GenericLMM_MCPricerPart( string MyLMMSimProcess, string MyInterpObject1D, string MyInterpObject1D_2, string MyInterpObject2D, string MyInterpObject2D_2) {![]() // Create example range for parameter GenericLMM_MCPricer_PayOffTable CTQL.CTRangeData GenericLMM_MCPricer_PayOffTable = new CTQL.CTRangeData(); System.Text.StringBuilder GenericLMM_MCPricer_PayOffTable_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. GenericLMM_MCPricer_PayOffTable_builder.Append("{"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2006# | | | | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Oct/2006# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#22/Jan/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Apr/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Jul/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#22/Oct/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;"); GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | max(GridColMin(cCol-1, 1, cRow) - LiborMin(1, cRow), 0.0) * DCF(cRow) * Cvg(cRow)"); GenericLMM_MCPricer_PayOffTable_builder.Append("}"); GenericLMM_MCPricer_PayOffTable.RangeFromStr ( GenericLMM_MCPricer_PayOffTable_builder.ToString() ); // Create example range for parameter GenericLMM_MCPricer_ConstParams CTQL.CTRangeData GenericLMM_MCPricer_ConstParams = new CTQL.CTRangeData(); System.Text.StringBuilder GenericLMM_MCPricer_ConstParams_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. GenericLMM_MCPricer_ConstParams_builder.Append("{"); GenericLMM_MCPricer_ConstParams_builder.Append("_a | 0.0001 ;"); GenericLMM_MCPricer_ConstParams_builder.Append("_b | 20 ;"); GenericLMM_MCPricer_ConstParams_builder.Append("_c | 2.5 ;"); GenericLMM_MCPricer_ConstParams_builder.Append("_var1 | 40"); GenericLMM_MCPricer_ConstParams_builder.Append("}"); GenericLMM_MCPricer_ConstParams.RangeFromStr ( GenericLMM_MCPricer_ConstParams_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string MyGenericLMM_MCPricer = "MyGenericLMM_MCPricer" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // With the PayOff table, the first column represents event dates. bool ValidateDates = false;![]() // The number of simulations. int NoOfSims = 10;![]() // Excel function call would be this - "CT.PRO.GenericLMM_MCPricer()"![]() // Creates a generic pricing monte carlo object given a process // object and a pricing grid. string rGenericLMM_MCPricer; rGenericLMM_MCPricer = CTQL.CTLMMMCPricerSA.GenericLMM_MCPricer( MyGenericLMM_MCPricer, Reload, MyLMMSimProcess, GenericLMM_MCPricer_PayOffTable, ValidateDates, NoOfSims, GenericLMM_MCPricer_ConstParams, MyInterpObject1D, MyInterpObject1D_2, MyInterpObject2D, MyInterpObject2D_2);![]() ![]() return rGenericLMM_MCPricer; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string LMMSimProcessPart( string MyLMMProcess2, string My3rdLMMLinearExpVolModel2, string My2ndLMMLinearExpCorrModel2) {![]() ![]() ![]() // Key value to use as a handle for the created object string MyLMMSimProcess = "MyLMMSimProcess" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // The number of simulations. int NoOfSims = 10;![]() // Seed value. int Seed = 0;![]() // Excel function call would be this - "CT.PRO.LMMSimProcess()"![]() // Given volatility and correlation specification objects, creates // a Libor Forward Market Simulation Process object to be used // within the 'CapeTools LMM Process Simulation' or 'CapeTools // Generic IR LMM MonteCarlo Pricer' category of functions. string rLMMSimProcess; rLMMSimProcess = CTQL.CTLMMProcessesSA.LMMSimProcess( MyLMMSimProcess, Reload, MyLMMProcess2, My3rdLMMLinearExpVolModel2, My2ndLMMLinearExpCorrModel2, NoOfSims, Seed);![]() ![]() return rLMMSimProcess; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string InterpObject1DPart() {![]() // Create example range for parameter InterpObject1D_XArray CTQL.CTRangeData InterpObject1D_XArray; ![]() double[] arrBInterpObject1D_XArray = { 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0 // Array Data }; CTQL.DoubleVector arrInterpObject1D_XArray = new CTQL.DoubleVector(arrBInterpObject1D_XArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject1D_XArray = new CTQL.CTRangeData(arrInterpObject1D_XArray, false); // Create example range for parameter InterpObject1D_YArray CTQL.CTRangeData InterpObject1D_YArray; ![]() double[] arrBInterpObject1D_YArray = { 0.02, 0.025, 0.03, 0.035, 0.04, 0.045, 0.05, 0.055, 0.06, 0.065 // Array Data }; CTQL.DoubleVector arrInterpObject1D_YArray = new CTQL.DoubleVector(arrBInterpObject1D_YArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject1D_YArray = new CTQL.CTRangeData(arrInterpObject1D_YArray, false); ![]() ![]() // Key Handle to be used for the new interpolation object. string MyInterpObject1D = "MyInterpObject1D" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Interpolation methodology to utilise. CTIEnums.InterpEnum InterpMethod = CTIEnums.InterpEnum.Interp_LINEAR;![]() // Excel function call would be this - "CT.INTERP.InterpObject1D()"![]() // Creates an one dimensional interpolation object. string rInterpObject1D; rInterpObject1D = CTQL.CTUtilsSA.InterpObject1D( MyInterpObject1D, Reload, InterpObject1D_XArray, InterpObject1D_YArray, InterpMethod);![]() ![]() return rInterpObject1D; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string InterpObject1D__2Part() {![]() // Create example range for parameter InterpObject1D__2_XArray CTQL.CTRangeData InterpObject1D__2_XArray; ![]() double[] arrBInterpObject1D__2_XArray = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 // Array Data }; CTQL.DoubleVector arrInterpObject1D__2_XArray = new CTQL.DoubleVector(arrBInterpObject1D__2_XArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject1D__2_XArray = new CTQL.CTRangeData(arrInterpObject1D__2_XArray, false); // Create example range for parameter InterpObject1D__2_YArray CTQL.CTRangeData InterpObject1D__2_YArray; ![]() double[] arrBInterpObject1D__2_YArray = { 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.045, 0.05, 0.055, 0.06 // Array Data }; CTQL.DoubleVector arrInterpObject1D__2_YArray = new CTQL.DoubleVector(arrBInterpObject1D__2_YArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject1D__2_YArray = new CTQL.CTRangeData(arrInterpObject1D__2_YArray, false); ![]() ![]() // Key Handle to be used for the new interpolation object. string MyInterpObject1D_2 = "MyInterpObject1D_2" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Interpolation methodology to utilise. CTIEnums.InterpEnum InterpMethod = CTIEnums.InterpEnum.Interp_LINEAR;![]() // Excel function call would be this - "CT.INTERP.InterpObject1D()"![]() // Creates an one dimensional interpolation object. string rInterpObject1D__2; rInterpObject1D__2 = CTQL.CTUtilsSA.InterpObject1D( MyInterpObject1D_2, Reload, InterpObject1D__2_XArray, InterpObject1D__2_YArray, InterpMethod);![]() ![]() return rInterpObject1D__2; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string InterpObject2DPart() {![]() // Create example range for parameter InterpObject2D_XArray CTQL.CTRangeData InterpObject2D_XArray; ![]() double[] arrBInterpObject2D_XArray = { 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0 // Array Data }; CTQL.DoubleVector arrInterpObject2D_XArray = new CTQL.DoubleVector(arrBInterpObject2D_XArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject2D_XArray = new CTQL.CTRangeData(arrInterpObject2D_XArray, false); // Create example range for parameter InterpObject2D_YArray CTQL.CTRangeData InterpObject2D_YArray; ![]() double[] arrBInterpObject2D_YArray = { 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0 // Array Data }; CTQL.DoubleVector arrInterpObject2D_YArray = new CTQL.DoubleVector(arrBInterpObject2D_YArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject2D_YArray = new CTQL.CTRangeData(arrInterpObject2D_YArray, false); // Create example range for parameter InterpObject2D_ZMatrix CTQL.CTRangeData InterpObject2D_ZMatrix = new CTQL.CTRangeData(); System.Text.StringBuilder InterpObject2D_ZMatrix_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. InterpObject2D_ZMatrix_builder.Append("{"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3"); InterpObject2D_ZMatrix_builder.Append("}"); InterpObject2D_ZMatrix.RangeFromStr ( InterpObject2D_ZMatrix_builder.ToString() ); ![]() ![]() // Key Handle to be used for the new interpolation object. string MyInterpObject2D = "MyInterpObject2D" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Interpolation methodology to utilise. CTIEnums.InterpEnum InterpMethod = CTIEnums.InterpEnum.Interp_LINEAR;![]() // Excel function call would be this - "CT.INTERP.InterpObject2D()"![]() // Creates a two dimensional interpolation object. string rInterpObject2D; rInterpObject2D = CTQL.CTUtilsSA.InterpObject2D( MyInterpObject2D, Reload, InterpObject2D_XArray, InterpObject2D_YArray, InterpObject2D_ZMatrix, InterpMethod);![]() ![]() return rInterpObject2D; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string InterpObject2D__2Part() {![]() // Create example range for parameter InterpObject2D__2_XArray CTQL.CTRangeData InterpObject2D__2_XArray; ![]() double[] arrBInterpObject2D__2_XArray = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 // Array Data }; CTQL.DoubleVector arrInterpObject2D__2_XArray = new CTQL.DoubleVector(arrBInterpObject2D__2_XArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject2D__2_XArray = new CTQL.CTRangeData(arrInterpObject2D__2_XArray, false); // Create example range for parameter InterpObject2D__2_YArray CTQL.CTRangeData InterpObject2D__2_YArray; ![]() double[] arrBInterpObject2D__2_YArray = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 // Array Data }; CTQL.DoubleVector arrInterpObject2D__2_YArray = new CTQL.DoubleVector(arrBInterpObject2D__2_YArray); // Second parameter determines whether the array is a column array (false) or a row array (true) InterpObject2D__2_YArray = new CTQL.CTRangeData(arrInterpObject2D__2_YArray, false); // Create example range for parameter InterpObject2D__2_ZMatrix CTQL.CTRangeData InterpObject2D__2_ZMatrix = new CTQL.CTRangeData(); System.Text.StringBuilder InterpObject2D__2_ZMatrix_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. InterpObject2D__2_ZMatrix_builder.Append("{"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 ;"); InterpObject2D__2_ZMatrix_builder.Append("0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3"); InterpObject2D__2_ZMatrix_builder.Append("}"); InterpObject2D__2_ZMatrix.RangeFromStr ( InterpObject2D__2_ZMatrix_builder.ToString() ); ![]() ![]() // Key Handle to be used for the new interpolation object. string MyInterpObject2D_2 = "MyInterpObject2D_2" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Interpolation methodology to utilise. CTIEnums.InterpEnum InterpMethod = CTIEnums.InterpEnum.Interp_LINEAR;![]() // Excel function call would be this - "CT.INTERP.InterpObject2D()"![]() // Creates a two dimensional interpolation object. string rInterpObject2D__2; rInterpObject2D__2 = CTQL.CTUtilsSA.InterpObject2D( MyInterpObject2D_2, Reload, InterpObject2D__2_XArray, InterpObject2D__2_YArray, InterpObject2D__2_ZMatrix, InterpMethod);![]() ![]() return rInterpObject2D__2; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string LMMProcess2Part( string MyNewIndex2) {![]() ![]() ![]() // Key value to use as a handle for the created object string MyLMMProcess2 = "MyLMMProcess2" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // The start date of interest. CTQL.Date StartDate = new CTQL.Date("21/7/2006", "dd/mm/yyyy");![]() // The number of libor rates (from the spot date) that will be // constructed. int NoOfRates = 20;![]() // Excel function call would be this - "CT.MOD.LMMProcess2()"![]() // Creates a Libor Forward Model Process container object. string rLMMProcess2; rLMMProcess2 = CTQL.CTLMMVolCorrModelsSA.LMMProcess2( MyLMMProcess2, Reload, StartDate.serialNumber(), MyNewIndex2, NoOfRates);![]() ![]() return rLMMProcess2; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string LMMLinearExpVolModel2__3Part( string MyLMMProcess2) {![]() // Create example range for parameter LMMLinearExpVolModel2__3_weights CTQL.CTRangeData LMMLinearExpVolModel2__3_weights = new CTQL.CTRangeData(); System.Text.StringBuilder LMMLinearExpVolModel2__3_weights_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. LMMLinearExpVolModel2__3_weights_builder.Append("{"); LMMLinearExpVolModel2__3_weights_builder.Append("1 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.93959593 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.93959593 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.161423829 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.161423829 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.136454663 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.136454663 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.085602199 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.085602199 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.00614192 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("1.00614192 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.944104283 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.944104283 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.886468038 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.886468038 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.827628321 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.827628321 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.897708504 ;"); LMMLinearExpVolModel2__3_weights_builder.Append("0.897708504"); LMMLinearExpVolModel2__3_weights_builder.Append("}"); LMMLinearExpVolModel2__3_weights.RangeFromStr ( LMMLinearExpVolModel2__3_weights_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string My3rdLMMLinearExpVolModel2 = "My3rdLMMLinearExpVolModel2" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // 'a' parameter that is to be used within the linear exponential // volatility model. double a = 0.086592854;![]() // 'b' parameter that is to be used within the linear exponential // volatility model. double b = 0.105234154;![]() // 'c' parameter that is to be used within the linear exponential // volatility model. double c = 0.658891667;![]() // 'd' parameter that is to be used within the linear exponential // volatility model. double d = 0.06117745;![]() // Excel function call would be this - "CT.MOD.LMMLinearExpVolModel2()"![]() // Creates a an extended linear-exponential volatility model for // the libor market model. string rLMMLinearExpVolModel2__3; rLMMLinearExpVolModel2__3 = CTQL.CTLMMVolCorrModelsSA.LMMLinearExpVolModel2( My3rdLMMLinearExpVolModel2, Reload, MyLMMProcess2, a, b, c, d, LMMLinearExpVolModel2__3_weights);![]() ![]() return rLMMLinearExpVolModel2__3; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string LMMLinearExpCorrModel2__2Part( string MyLMMProcess2) {![]() ![]() ![]() // Key value to use as a handle for the created object string My2ndLMMLinearExpCorrModel2 = "My2ndLMMLinearExpCorrModel2" + "_" + System.Convert.ToString(nCTLMMMCPricerGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // rho. double rho = 0.1;![]() // Correlation rate. double beta = 0.8;![]() // Excel function call would be this - "CT.MOD.LMMLinearExpCorrModel2()"![]() // Creates an extended exponential correlation model for the libor // market model. string rLMMLinearExpCorrModel2__2; rLMMLinearExpCorrModel2__2 = CTQL.CTLMMVolCorrModelsSA.LMMLinearExpCorrModel2( My2ndLMMLinearExpCorrModel2, Reload, MyLMMProcess2, rho, beta);![]() ![]() return rLMMLinearExpCorrModel2__2; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CreateIndex__2Part( string MyCALUKExchange, string MyEuroCal, string MyMiniYC) {![]() // Create example range for parameter CreateIndex__2_BasisSwaps CTQL.CTRangeData CreateIndex__2_BasisSwaps = new CTQL.CTRangeData(); System.Text.StringBuilder CreateIndex__2_BasisSwaps_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. CreateIndex__2_BasisSwaps_builder.Append("{"); CreateIndex__2_BasisSwaps_builder.Append("'1Y' | 3.5 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'2Y' | 3 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'3Y' | 3.25 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'4Y' | 3.25 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'5Y' | 3.25 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'7Y' | 3.25 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'10Y' | 3.25 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'15Y' | 3 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'20Y' | 2.75 | True ;"); CreateIndex__2_BasisSwaps_builder.Append("'30Y' | 2.75 | True"); CreateIndex__2_BasisSwaps_builder.Append("}"); CreateIndex__2_BasisSwaps.RangeFromStr ( CreateIndex__2_BasisSwaps_builder.ToString() ); // Create example range for parameter CreateIndex__2_PastFixings CTQL.CTRangeData CreateIndex__2_PastFixings = new CTQL.CTRangeData(); System.Text.StringBuilder CreateIndex__2_PastFixings_builder = new System.Text.StringBuilder(100); // We could set the value for each cell individually, but for display // purposes, this is quicker and more informative. CreateIndex__2_PastFixings_builder.Append("{"); CreateIndex__2_PastFixings_builder.Append("#21/Mar/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#22/Mar/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#23/Mar/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#24/Mar/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#25/Mar/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#28/Mar/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#29/Mar/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#30/Mar/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#31/Mar/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#1/Apr/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#4/Apr/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#5/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#6/Apr/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#7/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#8/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#11/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#12/Apr/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#13/Apr/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#14/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#15/Apr/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#18/Apr/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#19/Apr/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#20/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#21/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#22/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#25/Apr/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#26/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#27/Apr/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#28/Apr/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#29/Apr/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#2/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#3/May/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#4/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#5/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#6/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#9/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#10/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#11/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#12/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#13/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#16/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#17/May/2005# | 0.0354 ;" |