LMMDisplayStep Example CS

C# Example - LMMDisplayStep![]() ![]() ![]() ![]() ![]() // ################################################################################## // The first function here LMMDisplayStep(), contains a series of // function calls leading upto the main function call, the second function // within this file ( LMMDisplayStepPart() ). // 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 nCTLMMProcessSimGlobal; // 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 CTRangeData CS_EX_LMMDisplayStep() { nCTLMMProcessSimGlobal += 1; string szErrorMsg = "";![]() try {![]() ![]() // 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); ![]() ![]() // Displays the value of the LIBOR rates at a particular time step // across all simulations. CTRangeData resLMMDisplayStep; resLMMDisplayStep = LMMDisplayStepPart( MyLMMSimProcess); // This is the result we are looking for. return resLMMDisplayStep; ![]() } catch(Exception e) { szErrorMsg = e.Message; throw e; } } ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private CTRangeData LMMDisplayStepPart( string MyLMMSimProcess) { // Used by functions returning a range value. Via the szRangeDescription variable, you can inspect the results int _nRows, _nCols; string szRangeDescription;![]() ![]() ![]() // The index within the TimeLine range passed into the LMM Process // object (1-based). int TimeStep = 1;![]() // Excel function call would be this - "CT.PRO.LMMDisplayStep()"![]() // Displays the value of the LIBOR rates at a particular time step // across all simulations. CTRangeData rLMMDisplayStep; rLMMDisplayStep = (CTRangeData)CTQL.CTLMMProcessSimSA.LMMDisplayStep( MyLMMSimProcess, TimeStep);![]() _nRows = rLMMDisplayStep.GetRows(); _nCols = rLMMDisplayStep.GetCols(); szRangeDescription = rLMMDisplayStep.ToMatrixString();![]() ![]() ![]() return rLMMDisplayStep; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() 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(nCTLMMProcessSimGlobal);![]() // 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 LMMProcess2Part( string MyNewIndex2) {![]() ![]() ![]() // Key value to use as a handle for the created object string MyLMMProcess2 = "MyLMMProcess2" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // 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(nCTLMMProcessSimGlobal);![]() // 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(nCTLMMProcessSimGlobal);![]() // 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 ;"); CreateIndex__2_PastFixings_builder.Append("#18/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#19/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#20/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#23/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#24/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#25/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#26/May/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#27/May/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#30/May/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#31/May/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#1/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#2/Jun/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#3/Jun/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#6/Jun/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#7/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#8/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#9/Jun/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#10/Jun/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#13/Jun/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#14/Jun/2005# | 0.0357 ;"); CreateIndex__2_PastFixings_builder.Append("#15/Jun/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#16/Jun/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#17/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#20/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#21/Jun/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#22/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#23/Jun/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#24/Jun/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#27/Jun/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#28/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#29/Jun/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#30/Jun/2005# | 0.0355 ;"); CreateIndex__2_PastFixings_builder.Append("#1/Jul/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#4/Jul/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#5/Jul/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#6/Jul/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#7/Jul/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#8/Jul/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#11/Jul/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#12/Jul/2005# | 0.0354 ;"); CreateIndex__2_PastFixings_builder.Append("#13/Jul/2005# | 0.0353 ;"); CreateIndex__2_PastFixings_builder.Append("#14/Jul/2005# | 0.0356 ;"); CreateIndex__2_PastFixings_builder.Append("#15/Jul/2005# | 0.0353"); CreateIndex__2_PastFixings_builder.Append("}"); CreateIndex__2_PastFixings.RangeFromStr ( CreateIndex__2_PastFixings_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string MyNewIndex2 = "MyNewIndex2" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // New Index code to create string IndexCode = "3MEuroIndex2";![]() // Tenor of the index. string Tenor = "3M";![]() // Within a Floating leg object, where there are many fixing periods, // when fixing a rate there are two ways the end date of a fixing // period can be computed. bool LIBORMethod = true;![]() // Number of days for fixing a rate. int FixingDays = 2;![]() // Currency code in which default values will be copied CTIEnums.CCYEnum Ccy = CTIEnums.CCYEnum.CCY_EUR;![]() // Business day convention needed for day adjustments when an adjustment // moves the date into the preceding, following month. CTIEnums.BDCEnum BusDayConv = CTIEnums.BDCEnum.BDC_monthendreference;![]() // Daycounter required for year length calculations. CTIEnums.DayCountEnum DayCounter = CTIEnums.DayCountEnum.DayCount_actual365_fixed;![]() // Interpolation methodology to utilise when interpolating the // forward spread curve (generated from the interest basis swaps). CTIEnums.InterpEnum SpreadInterp = CTIEnums.InterpEnum.Interp_FORWARDSTEP;![]() // Excel function call would be this - "CT.IDX.CreateIndex()"![]() // Creates a new Index code. string rCreateIndex__2; rCreateIndex__2 = CTQL.CTIndexesSA.CreateIndex( MyNewIndex2, Reload, IndexCode, Tenor, LIBORMethod, FixingDays, Ccy, MyCALUKExchange, MyEuroCal, BusDayConv, DayCounter, CreateIndex__2_BasisSwaps, SpreadInterp, CreateIndex__2_PastFixings, MyMiniYC);![]() ![]() return rCreateIndex__2; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CALUKExchangePart() {![]() // Create example range for parameter CALUKExchange_AddHols CTQL.CTRangeData CALUKExchange_AddHols; ![]() int[] arrBCALUKExchange_AddHols = { CTQL.Date.serialNumber("1/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("2/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("3/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("4/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("5/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("6/2/2006", "dd/mm/yyyy") // Array Data }; CTQL.IntVector arrCALUKExchange_AddHols = new CTQL.IntVector(arrBCALUKExchange_AddHols); // Second parameter determines whether the array is a column array (false) or a row array (true) CALUKExchange_AddHols = new CTQL.CTRangeData(arrCALUKExchange_AddHols, false); // Create example range for parameter CALUKExchange_RemoveHols CTQL.CTRangeData CALUKExchange_RemoveHols; ![]() int[] arrBCALUKExchange_RemoveHols = { CTQL.Date.serialNumber("25/12/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("25/12/2007", "dd/mm/yyyy") // Array Data }; CTQL.IntVector arrCALUKExchange_RemoveHols = new CTQL.IntVector(arrBCALUKExchange_RemoveHols); // Second parameter determines whether the array is a column array (false) or a row array (true) CALUKExchange_RemoveHols = new CTQL.CTRangeData(arrCALUKExchange_RemoveHols, false); ![]() ![]() // Key value to use as a handle for the created object string MyCALUKExchange = "MyCALUKExchange" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Excel function call would be this - "CT.CAL.UK.Exchange()"![]() // UK date calendar used within the UK stock exchange. string rCALUKExchange; rCALUKExchange = CTQL.CTCalendarsSA.CALUKExchange( MyCALUKExchange, Reload, CALUKExchange_AddHols, CALUKExchange_RemoveHols);![]() ![]() return rCALUKExchange; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CALEUROPart() {![]() // Create example range for parameter CALEURO_AddHols CTQL.CTRangeData CALEURO_AddHols; ![]() int[] arrBCALEURO_AddHols = { CTQL.Date.serialNumber("1/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("2/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("3/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("4/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("5/2/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("6/2/2006", "dd/mm/yyyy") // Array Data }; CTQL.IntVector arrCALEURO_AddHols = new CTQL.IntVector(arrBCALEURO_AddHols); // Second parameter determines whether the array is a column array (false) or a row array (true) CALEURO_AddHols = new CTQL.CTRangeData(arrCALEURO_AddHols, false); // Create example range for parameter CALEURO_RemoveHols CTQL.CTRangeData CALEURO_RemoveHols; ![]() int[] arrBCALEURO_RemoveHols = { CTQL.Date.serialNumber("25/12/2006", "dd/mm/yyyy"), CTQL.Date.serialNumber("25/12/2007", "dd/mm/yyyy") // Array Data }; CTQL.IntVector arrCALEURO_RemoveHols = new CTQL.IntVector(arrBCALEURO_RemoveHols); // Second parameter determines whether the array is a column array (false) or a row array (true) CALEURO_RemoveHols = new CTQL.CTRangeData(arrCALEURO_RemoveHols, false); ![]() ![]() // Key value to use as a handle for the created object string MyEuroCal = "MyEuroCal" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Excel function call would be this - "CT.CAL.EURO()"![]() // EURO calendar used for holiday adjustments. string rCALEURO; rCALEURO = CTQL.CTCalendarsSA.CALEURO( MyEuroCal, Reload, CALEURO_AddHols, CALEURO_RemoveHols);![]() ![]() return rCALEURO; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string MKTYC_D__3Part( string MyValuationDate, string MyDepoTPL, string MySwapTPL) {![]() // Create example range for parameter MKTYC_D__3_oTenorsRates CTQL.CTRangeData MKTYC_D__3_oTenorsRates = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D__3_oTenorsRates_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. MKTYC_D__3_oTenorsRates_builder.Append("{"); MKTYC_D__3_oTenorsRates_builder.Append("'7D' | 3.48 | True ;"); MKTYC_D__3_oTenorsRates_builder.Append("'14D' | 3.49 | True ;"); MKTYC_D__3_oTenorsRates_builder.Append("'1M' | 3.5 | True ;"); MKTYC_D__3_oTenorsRates_builder.Append("'3M' | 3.7 | True ;"); MKTYC_D__3_oTenorsRates_builder.Append("'6M' | 3.9 | True"); MKTYC_D__3_oTenorsRates_builder.Append("}"); MKTYC_D__3_oTenorsRates.RangeFromStr ( MKTYC_D__3_oTenorsRates_builder.ToString() ); // Create example range for parameter MKTYC_D__3_oRange2 CTQL.CTRangeData MKTYC_D__3_oRange2 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D__3_oRange2_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. MKTYC_D__3_oRange2_builder.Append("{"); MKTYC_D__3_oRange2_builder.Append("'9M' | 4.1 | True ;"); MKTYC_D__3_oRange2_builder.Append("'12M' | 4.3 | True"); MKTYC_D__3_oRange2_builder.Append("}"); MKTYC_D__3_oRange2.RangeFromStr ( MKTYC_D__3_oRange2_builder.ToString() ); // Create example range for parameter MKTYC_D__3_oRange3 CTQL.CTRangeData MKTYC_D__3_oRange3 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D__3_oRange3_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. MKTYC_D__3_oRange3_builder.Append("{"); MKTYC_D__3_oRange3_builder.Append("'2Y' | 4.5 | True ;"); MKTYC_D__3_oRange3_builder.Append("'5Y' | 4.7 | True ;"); MKTYC_D__3_oRange3_builder.Append("'10Y' | 4.9 | True"); MKTYC_D__3_oRange3_builder.Append("}"); MKTYC_D__3_oRange3.RangeFromStr ( MKTYC_D__3_oRange3_builder.ToString() ); // Create example range for parameter MKTYC_D__3_oRange4 CTQL.CTRangeData MKTYC_D__3_oRange4 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D__3_oRange4_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. MKTYC_D__3_oRange4_builder.Append("{"); MKTYC_D__3_oRange4_builder.Append("'15Y' | 5.3 | True ;"); MKTYC_D__3_oRange4_builder.Append("'20Y' | 5.4 | True ;"); MKTYC_D__3_oRange4_builder.Append("'25Y' | 5.5 | True ;"); MKTYC_D__3_oRange4_builder.Append("'30Y' | 5.6 | True ;"); MKTYC_D__3_oRange4_builder.Append("'35Y' | 5.7 | True ;"); MKTYC_D__3_oRange4_builder.Append("'40Y' | 5.8 | True"); MKTYC_D__3_oRange4_builder.Append("}"); MKTYC_D__3_oRange4.RangeFromStr ( MKTYC_D__3_oRange4_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string MyMiniYC = "MyMiniYC" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // A tag used to identify this curve (case insensitive) if placed // within a Yieldcurve collection ( via the GroupedCurves() function // ). string CurveName = "MyMiniYC";![]() // Interpolation methodology to utilise when interpolating for // discount factors. CTIEnums.InterpEnum InterpMethod = CTIEnums.InterpEnum.Interp_LOGLINEAR;![]() // An optional flat spread value that will be added to all tenors. double Spread = 0.000;![]() // DayCounter for converting dates into year fractions. CTIEnums.DayCountEnum DayCount = CTIEnums.DayCountEnum.DayCount_actual365_fixed;![]() // If a cash (deposit) tenor's end date is after the earliest futures // expiry date within the curve, do we discard the cash tenor (false) // or keep it (true). bool DepoOvrWrtFuts = false;![]() // If a futures tenor's end date is after the earliest swap tenor's // end date within the curve, do we discard the futures tenor (false) // or keep it (true). bool FutsOvrWrtSwps = true;![]() // Whether the yieldCurve data should be extrapolated if a calculation // request that uses a date that is beyond the end date of the // yieldCurve (ie - a request for a 40 year discount factor, but // the curve is only built up to 30 years.) If false an error will // be returned. bool Extrapolate = true;![]() // Excel function call would be this - "CT.CRV.MKTYC_D()"![]() // Creates a yield curve using market rates (No cross-currency // Swaps). string rMKTYC_D__3; rMKTYC_D__3 = CTQL.CTCurvesSA.MKTYC_D( MyMiniYC, Reload, CurveName, MyValuationDate, MKTYC_D__3_oTenorsRates, MKTYC_D__3_oRange2, MKTYC_D__3_oRange3, MKTYC_D__3_oRange4, InterpMethod, Spread, DayCount, DepoOvrWrtFuts, FutsOvrWrtSwps, MyDepoTPL, MySwapTPL, Extrapolate);![]() ![]() return rMKTYC_D__3; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string ValueDateObjPart() {![]() ![]() ![]() // Key value to use as a handle for the created object string MyValuationDate = "MyValuationDate" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Valuation Date (typically equal to Today's date) CTQL.Date ValueDate = new CTQL.Date("19/7/2005", "dd/mm/yyyy");![]() // Excel function call would be this - "CT.DATE.ValueDateObj()"![]() // Creates a centralized valuation date object. string rValueDateObj; rValueDateObj = CTQL.CTUtilsSA.ValueDateObj( MyValuationDate, Reload, ValueDate.serialNumber());![]() ![]() return rValueDateObj; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CreateDepoTemplatePart( string MyCALUKExchange, string MyEuroCal) {![]() ![]() ![]() // Key value to use as a handle for the created object string MyDepoTPL = "MyDepoTPL" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // A friendly name that you wish to associate with this template string Name = "MyShortIndexTemplate";![]() // Number of days for fixing a rate. int FixingDays = 2;![]() // Currency in which default values will be copied CTIEnums.CCYEnum Ccy = CTIEnums.CCYEnum.CCY_EUR;![]() // Business day convention needed for day adjustments when an adjustment // moves the date into the preceding, following month. CTIEnums.BDCEnum BusDayConv = CTIEnums.BDCEnum.BDC_modifiedfollowing;![]() // Daycounter required for year length calculations. CTIEnums.DayCountEnum dayCounter = CTIEnums.DayCountEnum.DayCount_actual365_fixed;![]() // The Frequency (Length) of this template. CTIEnums.FreqEnum FLTLegFreq = CTIEnums.FreqEnum.Freq_quarterly;![]() // Within a Floating leg object, where there are many fixing periods, // when fixing a rate there are two ways the end date of a fixing // period can be computed. bool LIBORMethod = true;![]() // Excel function call would be this - "CT.TPL.CreateDepoTemplate()"![]() // Creates a Deposit template which is almost identical to a Libor // Index, but without the YieldCurve information. string rCreateDepoTemplate; rCreateDepoTemplate = CTQL.CTIndexesSA.CreateDepoTemplate( MyDepoTPL, Reload, Name, FixingDays, Ccy, MyCALUKExchange, MyEuroCal, BusDayConv, dayCounter, FLTLegFreq, LIBORMethod);![]() ![]() return rCreateDepoTemplate; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CreateSwapTemplatePart( string MyEuroCal, string MyDepoTPL) {![]() ![]() ![]() // Key value to use as a handle for the created object string MySwapTPL = "MySwapTPL" + "_" + System.Convert.ToString(nCTLMMProcessSimGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // A friendly name that you wish to associate with this template string Name = "MySwapIndexTemplate";![]() // Number of days for fixing a rate. int FixingDays = 2;![]() // Business day convention needed for day adjustments when an adjustment // moves the date into the preceding, following month. CTIEnums.BDCEnum CashFlowBDConv = CTIEnums.BDCEnum.BDC_modifiedfollowing;![]() // The Frequency of the FIX side of the swap. CTIEnums.FreqEnum CashFlowFreq = CTIEnums.FreqEnum.Freq_semiannual;![]() // Daycounter required for year length calculations. CTIEnums.DayCountEnum dayCounter = CTIEnums.DayCountEnum.DayCount_actual365_fixed;![]() // Excel function call would be this - "CT.TPL.CreateSwapTemplate()"![]() // 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 rCreateSwapTemplate; rCreateSwapTemplate = CTQL.CTIndexesSA.CreateSwapTemplate( MySwapTPL, Reload, Name, FixingDays, MyEuroCal, CashFlowBDConv, CashFlowFreq, dayCounter, MyDepoTPL);![]() ![]() return rCreateSwapTemplate; } ![]() ![]() ![]() ![]() |