ExpiryKVolMatrix Example CS

C# Example - ExpiryKVolMatrix![]() ![]() ![]() ![]() ![]() // ################################################################################## // The first function here ExpiryKVolMatrix(), contains a series of // function calls leading upto the main function call, the second function // within this file ( ExpiryKVolMatrixPart() ). // 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 nCTVolatiltyCurvesGlobal; // 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_ExpiryKVolMatrix() { nCTVolatiltyCurvesGlobal += 1; string szErrorMsg = "";![]() try {![]() ![]() // Creates a centralized valuation date object. ![]() string MyValuationDate; MyValuationDate = ValueDateObjPart(); ![]() ![]() // 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 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 volatility matrix. string MyExpiryKVolMatrix; MyExpiryKVolMatrix = ExpiryKVolMatrixPart( MyValuationDate, MyDepoTPL, MySwapTPL); // This is the result we are looking for. return MyExpiryKVolMatrix; ![]() } catch(Exception e) { szErrorMsg = e.Message; throw e; } } ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string ExpiryKVolMatrixPart( string MyValuationDate, string MyDepoTPL, string MySwapTPL) {![]() // Create example range for parameter ExpiryKVolMatrix_volRange CTQL.CTRangeData ExpiryKVolMatrix_volRange = new CTQL.CTRangeData(); System.Text.StringBuilder ExpiryKVolMatrix_volRange_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. ExpiryKVolMatrix_volRange_builder.Append("{"); ExpiryKVolMatrix_volRange_builder.Append("'Opt\\Strike' | 0.02 | 0.025 | 0.03 | 0.035 | 0.04 | 0.045 | 0.05 | 0.055 | 0.06 | 0.065 | 0.07 ;"); ExpiryKVolMatrix_volRange_builder.Append("'3M' | 21.33 | 20.33 | 19.53 | 18.93 | 18.53 | 18.33 | 18.53 | 18.93 | 19.53 | 20.33 | 21.33 ;"); ExpiryKVolMatrix_volRange_builder.Append("'6M' | 21.23 | 20.23 | 19.43 | 18.83 | 18.43 | 18.23 | 18.43 | 18.83 | 19.43 | 20.23 | 21.23 ;"); ExpiryKVolMatrix_volRange_builder.Append("'9M' | 21.29 | 20.29 | 19.49 | 18.89 | 18.49 | 18.29 | 18.49 | 18.89 | 19.49 | 20.29 | 21.29 ;"); ExpiryKVolMatrix_volRange_builder.Append("'12M' | 21.35 | 20.35 | 19.55 | 18.95 | 18.55 | 18.35 | 18.55 | 18.95 | 19.55 | 20.35 | 21.35 ;"); ExpiryKVolMatrix_volRange_builder.Append("'2Y' | 21.37 | 20.37 | 19.57 | 18.97 | 18.57 | 18.37 | 18.57 | 18.97 | 19.57 | 20.37 | 21.37 ;"); ExpiryKVolMatrix_volRange_builder.Append("'4Y' | 21.34 | 20.34 | 19.54 | 18.94 | 18.54 | 18.34 | 18.54 | 18.94 | 19.54 | 20.34 | 21.34 ;"); ExpiryKVolMatrix_volRange_builder.Append("'6Y' | 21.37 | 20.37 | 19.57 | 18.97 | 18.57 | 18.37 | 18.57 | 18.97 | 19.57 | 20.37 | 21.37 ;"); ExpiryKVolMatrix_volRange_builder.Append("'8Y' | 21.35 | 20.35 | 19.55 | 18.95 | 18.55 | 18.35 | 18.55 | 18.95 | 19.55 | 20.35 | 21.35 ;"); ExpiryKVolMatrix_volRange_builder.Append("'10Y' | 21.37 | 20.37 | 19.57 | 18.97 | 18.57 | 18.37 | 18.57 | 18.97 | 19.57 | 20.37 | 21.37 ;"); ExpiryKVolMatrix_volRange_builder.Append("'12Y' | 21.4 | 20.4 | 19.6 | 19 | 18.6 | 18.4 | 18.6 | 19 | 19.6 | 20.4 | 21.4 ;"); ExpiryKVolMatrix_volRange_builder.Append("'14Y' | 21.25 | 20.25 | 19.45 | 18.85 | 18.45 | 18.25 | 18.45 | 18.85 | 19.45 | 20.25 | 21.25 ;"); ExpiryKVolMatrix_volRange_builder.Append("'16Y' | 21.38 | 20.38 | 19.58 | 18.98 | 18.58 | 18.38 | 18.58 | 18.98 | 19.58 | 20.38 | 21.38 ;"); ExpiryKVolMatrix_volRange_builder.Append("'18Y' | 21.29 | 20.29 | 19.49 | 18.89 | 18.49 | 18.29 | 18.49 | 18.89 | 19.49 | 20.29 | 21.29 ;"); ExpiryKVolMatrix_volRange_builder.Append("'20Y' | 21.21 | 20.21 | 19.41 | 18.81 | 18.41 | 18.21 | 18.41 | 18.81 | 19.41 | 20.21 | 21.21 ;"); ExpiryKVolMatrix_volRange_builder.Append("'22Y' | 21.33 | 20.33 | 19.53 | 18.93 | 18.53 | 18.33 | 18.53 | 18.93 | 19.53 | 20.33 | 21.33"); ExpiryKVolMatrix_volRange_builder.Append("}"); ExpiryKVolMatrix_volRange.RangeFromStr ( ExpiryKVolMatrix_volRange_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string MyExpiryKVolMatrix = "MyExpiryKVolMatrix" + "_" + System.Convert.ToString(nCTVolatiltyCurvesGlobal);![]() // 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 Volatility curve collection ( via the GroupedVolCurves() // function ). string CurveName = "MyExpiryKVolMatrix";![]() // Number of days between the Exercise date of the options and // the STARTDATE of the instrument. int SettleDays = 2;![]() // Is the input volatility entered as a percentage value (true), // or the raw volatility value (false). bool DivideVolBy100 = true;![]() // The actual underlying that the Volatility matrix represents. string UndTenor = "5Y";![]() // DayCounter for converting dates into year fractions. CTIEnums.DayCountEnum DayCount = CTIEnums.DayCountEnum.DayCount_30360;![]() // Interpolation method to use when interpolating the curve for // vols, - LINEAR, LOGLINEAR, CUBIC. CTIEnums.InterpEnum InterpType = CTIEnums.InterpEnum.Interp_LINEAR;![]() // Excel function call would be this - "CT.CRV.ExpiryKVolMatrix()"![]() // Creates a volatility matrix. string rExpiryKVolMatrix; rExpiryKVolMatrix = CTQL.CTVolatiltyCurvesSA.ExpiryKVolMatrix( MyExpiryKVolMatrix, Reload, CurveName, MyValuationDate, SettleDays, ExpiryKVolMatrix_volRange, DivideVolBy100, UndTenor, MyDepoTPL, MySwapTPL, DayCount, InterpType);![]() ![]() return rExpiryKVolMatrix; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string ValueDateObjPart() {![]() ![]() ![]() // Key value to use as a handle for the created object string MyValuationDate = "MyValuationDate" + "_" + System.Convert.ToString(nCTVolatiltyCurvesGlobal);![]() // 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(nCTVolatiltyCurvesGlobal);![]() // 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(nCTVolatiltyCurvesGlobal);![]() // 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; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() 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(nCTVolatiltyCurvesGlobal);![]() // 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(nCTVolatiltyCurvesGlobal);![]() // 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; } ![]() ![]() ![]() ![]() |