CreateCashFlowLeg Example CS

High level view of the code structure (resulting in the final function call to CreateCashFlowLeg() )
C# Example - CreateCashFlowLeg![]() ![]() ![]() ![]() ![]() // ################################################################################## // The first function here CreateCashFlowLeg(), contains a series of // function calls leading upto the main function call, the second function // within this file ( CreateCashFlowLegPart() ). // 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 nCTFIXLegsGlobal; // 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_CreateCashFlowLeg() { nCTFIXLegsGlobal += 1; string szErrorMsg = "";![]() try {![]() ![]() // EURO calendar used for holiday adjustments. ![]() string MyEuroCal; MyEuroCal = CALEUROPart(); ![]() ![]() // Creates a centralized valuation date object. ![]() string MyValuationDate; MyValuationDate = ValueDateObjPart(); ![]() ![]() // UK date calendar used within the UK stock exchange. ![]() string MyCALUKExchange; MyCALUKExchange = CALUKExchangePart(); ![]() ![]() // Generates a schedule of start and end dates, given the initial // start date and unadjusted final end dates. string MySchedule; MySchedule = MakeSchedulePart( MyEuroCal); ![]() ![]() // 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 MyYCInterpOnDCF; MyYCInterpOnDCF = MKTYC_DPart( MyValuationDate, MyDepoTPL, MySwapTPL); ![]() ![]() // Creates a SABR curve to model the dynamics of the volatility // curve (smile). string MySABRVolCurve; MySABRVolCurve = SABRVolCurvePart( MyValuationDate, MyDepoTPL, MySwapTPL); ![]() ![]() // Creates a market object which is an aggregate of interest rate // market objects (Discounting curve and Interest rate volatility // curve (volcurve)). string MyMarket; MyMarket = CreateMKTPart( MyYCInterpOnDCF, MySABRVolCurve); ![]() ![]() // Creates a CashFlow leg which pays a predetermined amount at // each date. string MyCreateCashFlowLeg; MyCreateCashFlowLeg = CreateCashFlowLegPart( MySchedule, MyMarket); // This is the result we are looking for. return MyCreateCashFlowLeg; ![]() } catch(Exception e) { szErrorMsg = e.Message; throw e; } } ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CreateCashFlowLegPart( string MySchedule, string MyMarket) {![]() // Create example range for parameter CreateCashFlowLeg_Notional CTQL.CTRangeData CreateCashFlowLeg_Notional; ![]() int[] arrBCreateCashFlowLeg_Notional = { 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000 // Array Data }; CTQL.IntVector arrCreateCashFlowLeg_Notional = new CTQL.IntVector(arrBCreateCashFlowLeg_Notional); // Second parameter determines whether the array is a column array (false) or a row array (true) CreateCashFlowLeg_Notional = new CTQL.CTRangeData(arrCreateCashFlowLeg_Notional, false); ![]() ![]() // Key value to use as a handle for the created object string MyCreateCashFlowLeg = "MyCreateCashFlowLeg" + "_" + System.Convert.ToString(nCTFIXLegsGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Whether you would like to PAY or REC this leg. CTIEnums.PAYRECEnum PayRec = CTIEnums.PAYRECEnum.PAYREC_PAY;![]() // A positive factor value you wish to multiply the Floating-Reset // Rate/Fixed-Coupon Rate by (Usually 1). int Gearing = 1;![]() // Currency of the Notional amount. CTIEnums.CCYEnum Ccy = CTIEnums.CCYEnum.CCY_EUR;![]() // Payment Business Day Convention. CTIEnums.BDCEnum BusDayConv = CTIEnums.BDCEnum.BDC_modifiedfollowing;![]() // Whether you wish to exchange the principal amount(s) at the // start and termination of the leg contract. bool ExchangePrincipal = false;![]() // Excel function call would be this - "CT.LEG.CreateCashFlowLeg()"![]() // Creates a CashFlow leg which pays a predetermined amount at // each date. string rCreateCashFlowLeg; rCreateCashFlowLeg = CTQL.CTFIXLegsSA.CreateCashFlowLeg( MyCreateCashFlowLeg, Reload, PayRec, Gearing, CreateCashFlowLeg_Notional, Ccy, MySchedule, BusDayConv, ExchangePrincipal, MyMarket);![]() ![]() return rCreateCashFlowLeg; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string MakeSchedulePart( string MyEuroCal) {![]() ![]() ![]() // Key value to use as a handle for the created object string MySchedule = "MySchedule" + "_" + System.Convert.ToString(nCTFIXLegsGlobal);![]() // When creating this object for the first time, set this parameter // to a positive value. int Reload = 1;![]() // Initial Start Date. CTQL.Date StartDate = new CTQL.Date("21/7/2006", "dd/mm/yyyy");![]() // Final End Date. CTQL.Date EndDate = new CTQL.Date("21/7/2011", "dd/mm/yyyy");![]() // Frequency of the schedule. CTIEnums.FreqEnum Freq = CTIEnums.FreqEnum.Freq_quarterly;![]() // 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;![]() // Setting this value a 0 (or an empty date) imply that the date // generation routine will define a first odd and/or last odd coupon // periods if needed (based on the dates passed to the 'StartDate' // and 'EndDate' parameters and the value of the 'startFromEnd' // parameter). int stubDate = 0;![]() // Setting this parameter to 'false' imply that date generation // will start from the StartDate and then add whole coupon periods // until the EndDate is reached. bool startFromEnd = true;![]() // If during coupon date generation, there is a last odd coupon // period but you wish to merge this with the pervious, full, coupon // period, set the 'longFinal' parameter to true. bool longFinal = false;![]() // Excel function call would be this - "CT.SCH.MakeSchedule()"![]() // Generates a schedule of start and end dates, given the initial // start date and unadjusted final end dates. string rMakeSchedule; rMakeSchedule = CTQL.CTCalendarsSA.MakeSchedule( MySchedule, Reload, MyEuroCal, StartDate.serialNumber(), EndDate.serialNumber(), Freq, BusDayConv, stubDate, startFromEnd, longFinal);![]() ![]() return rMakeSchedule; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string CreateMKTPart( string MyYCInterpOnDCF, string MySABRVolCurve) {![]() ![]() ![]() // Key value to use as a handle for the created object string MyMarket = "MyMarket" + "_" + System.Convert.ToString(nCTFIXLegsGlobal);![]() // 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.MKT.CreateMKT()"![]() // Creates a market object which is an aggregate of interest rate // market objects (Discounting curve and Interest rate volatility // curve (volcurve)). string rCreateMKT; rCreateMKT = CTQL.CTCurvesSA.CreateMKT( MyMarket, Reload, MyYCInterpOnDCF, MySABRVolCurve);![]() ![]() return rCreateMKT; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() 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(nCTFIXLegsGlobal);![]() // 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_DPart( string MyValuationDate, string MyDepoTPL, string MySwapTPL) {![]() // Create example range for parameter MKTYC_D_oTenorsRates CTQL.CTRangeData MKTYC_D_oTenorsRates = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D_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_oTenorsRates_builder.Append("{"); MKTYC_D_oTenorsRates_builder.Append("'7D' | 3.5 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'14D' | 3.51 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'1M' | 3.53 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'2M' | 3.56 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'3M' | 3.59 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'4M' | 3.62 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'5M' | 3.65 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'6M' | 3.68 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'7M' | 3.7 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'8M' | 3.72 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'9M' | 3.73 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'10M' | 3.75 | True ;"); MKTYC_D_oTenorsRates_builder.Append("'11M' | 3.78 | True"); MKTYC_D_oTenorsRates_builder.Append("}"); MKTYC_D_oTenorsRates.RangeFromStr ( MKTYC_D_oTenorsRates_builder.ToString() ); // Create example range for parameter MKTYC_D_oRange2 CTQL.CTRangeData MKTYC_D_oRange2 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D_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_oRange2_builder.Append("{"); MKTYC_D_oRange2_builder.Append("'12X15' | 4.03 | True ;"); MKTYC_D_oRange2_builder.Append("'15X18' | 4.07 | True ;"); MKTYC_D_oRange2_builder.Append("'18X21' | 4.11 | True ;"); MKTYC_D_oRange2_builder.Append("'21X24' | 4.15 | True ;"); MKTYC_D_oRange2_builder.Append("'24X27' | 4.43 | True ;"); MKTYC_D_oRange2_builder.Append("'27X30' | 4.48 | True ;"); MKTYC_D_oRange2_builder.Append("'30X33' | 4.53 | True ;"); MKTYC_D_oRange2_builder.Append("'33X36' | 4.58 | True ;"); MKTYC_D_oRange2_builder.Append("'36X39' | 4.84 | True ;"); MKTYC_D_oRange2_builder.Append("'39X42' | 4.9 | True ;"); MKTYC_D_oRange2_builder.Append("'42X45' | 4.96 | True"); MKTYC_D_oRange2_builder.Append("}"); MKTYC_D_oRange2.RangeFromStr ( MKTYC_D_oRange2_builder.ToString() ); // Create example range for parameter MKTYC_D_oRange3 CTQL.CTRangeData MKTYC_D_oRange3 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D_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_oRange3_builder.Append("{"); MKTYC_D_oRange3_builder.Append("'5Y' | 4.33 | True ;"); MKTYC_D_oRange3_builder.Append("'7Y' | 4.37 | True ;"); MKTYC_D_oRange3_builder.Append("'9Y' | 4.41 | True ;"); MKTYC_D_oRange3_builder.Append("'11Y' | 4.43 | True ;"); MKTYC_D_oRange3_builder.Append("'13Y' | 4.46 | True ;"); MKTYC_D_oRange3_builder.Append("'15Y' | 4.49 | True ;"); MKTYC_D_oRange3_builder.Append("'17Y' | 4.53 | True ;"); MKTYC_D_oRange3_builder.Append("'19Y' | 4.55 | True ;"); MKTYC_D_oRange3_builder.Append("'21Y' | 4.57 | True ;"); MKTYC_D_oRange3_builder.Append("'23Y' | 4.59 | True ;"); MKTYC_D_oRange3_builder.Append("'25Y' | 4.62 | True"); MKTYC_D_oRange3_builder.Append("}"); MKTYC_D_oRange3.RangeFromStr ( MKTYC_D_oRange3_builder.ToString() ); // Create example range for parameter MKTYC_D_oRange4 CTQL.CTRangeData MKTYC_D_oRange4 = new CTQL.CTRangeData(); System.Text.StringBuilder MKTYC_D_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_oRange4_builder.Append("{"); MKTYC_D_oRange4_builder.Append("'30Y' | 4.76 | True ;"); MKTYC_D_oRange4_builder.Append("'31Y' | 4.8 | True ;"); MKTYC_D_oRange4_builder.Append("'32Y' | 4.84 | True ;"); MKTYC_D_oRange4_builder.Append("'33Y' | 4.88 | True ;"); MKTYC_D_oRange4_builder.Append("'34Y' | 4.92 | True ;"); MKTYC_D_oRange4_builder.Append("'35Y' | 4.95 | True ;"); MKTYC_D_oRange4_builder.Append("'36Y' | 4.99 | True ;"); MKTYC_D_oRange4_builder.Append("'37Y' | 5.02 | True ;"); MKTYC_D_oRange4_builder.Append("'38Y' | 5.07 | True ;"); MKTYC_D_oRange4_builder.Append("'39Y' | 5.11 | True ;"); MKTYC_D_oRange4_builder.Append("'40Y' | 5.16 | True"); MKTYC_D_oRange4_builder.Append("}"); MKTYC_D_oRange4.RangeFromStr ( MKTYC_D_oRange4_builder.ToString() ); ![]() ![]() // Key value to use as a handle for the created object string MyYCInterpOnDCF = "MyYCInterpOnDCF" + "_" + System.Convert.ToString(nCTFIXLegsGlobal);![]() // 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 = "MyYC_InterpOnDCF";![]() // 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; rMKTYC_D = CTQL.CTCurvesSA.MKTYC_D( MyYCInterpOnDCF, Reload, CurveName, MyValuationDate, MKTYC_D_oTenorsRates, MKTYC_D_oRange2, MKTYC_D_oRange3, MKTYC_D_oRange4, InterpMethod, Spread, DayCount, DepoOvrWrtFuts, FutsOvrWrtSwps, MyDepoTPL, MySwapTPL, Extrapolate);![]() ![]() return rMKTYC_D; } ![]() ![]() ![]() // ///////////////////////////////////////////////////////////////////![]() private string SABRVolCurvePart( string MyValuationDate, string MyDepoTPL, string MySwapTPL) {![]() // Create example range for parameter SABRVolCurve_ATMRange CTQL.CTRangeData SABRVolCurve_ATMRange = new CTQL.CTRangeData(); System.Text.StringBuilder SABRVolCurve_ATMRange_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. SABRVolCurve_ATMRange_builder.Append("{"); SABRVolCurve_ATMRange_builder.Append("'Opt\\Und' | '3M' | '6M' | '9M' | '12M' | '2Y' | '4Y' | '6Y' | '8Y' | '10Y' | '12Y' | '14Y' | '16Y' ;"); SABRVolCurve_ATMRange_builder.Append("'3M' | 18 | 18.01 | 18.02 | 18.02 | 18.03 | 18.04 | 18.05 | 18.06 | 18.07 | 18.07 | 18.08 | 18.09 ;"); SABRVolCurve_ATMRange_builder.Append("'6M' | 18.1 | 18.11 | 18.12 | 18.12 | 18.13 | 18.14 | 18.15 | 18.16 | 18.17 | 18.17 | 18.18 | 18.19 ;"); SABRVolCurve_ATMRange_builder.Append("'9M' | 18.19 | 18.2 | 18.21 | 18.22 | 18.22 | 18.23 | 18.24 | 18.25 | 18.26 | 18.26 | 18.27 | 18.28 ;"); SABRVolCurve_ATMRange_builder.Append("'12M' | 18.29 | 18.29 | 18.3 | 18.31 | 18.32 | 18.32 | 18.33 | 18.34 | 18.34 | 18.35 | 18.36 | 18.37 ;"); SABRVolCurve_ATMRange_builder.Append("'2Y' | 18.37 | 18.38 | 18.39 | 18.4 | 18.41 | 18.42 | 18.42 | 18.43 | 18.44 | 18.44 | 18.45 | 18.46 ;"); SABRVolCurve_ATMRange_builder.Append("'4Y' | 18.46 | 18.47 | 18.48 | 18.48 | 18.49 | 18.5 | 18.5 | 18.51 | 18.52 | 18.53 | 18.53 | 18.54 ;"); SABRVolCurve_ATMRange_builder.Append("'6Y' | 18.55 | 18.55 | 18.56 | 18.57 | 18.57 | 18.58 | 18.59 | 18.6 | 18.6 | 18.61 | 18.62 | 18.62 ;"); SABRVolCurve_ATMRange_builder.Append("'8Y' | 18.63 | 18.64 | 18.64 | 18.65 | 18.66 | 18.66 | 18.67 | 18.68 | 18.69 | 18.69 | 18.7 | 18.71 ;"); SABRVolCurve_ATMRange_builder.Append("'10Y' | 18.71 | 18.72 | 18.73 | 18.74 | 18.75 | 18.75 | 18.76 | 18.77 | 18.78 | 18.79 | 18.79 | 18.8 ;"); SABRVolCurve_ATMRange_builder.Append("'12Y' | 18.81 | 18.81 | 18.82 | 18.83 | 18.84 | 18.84 | 18.85 | 18.86 | 18.87 | 18.87 | 18.88 | 18.88 ;"); SABRVolCurve_ATMRange_builder.Append("'14Y' | 18.89 | 18.9 | 18.91 | 18.92 | 18.92 | 18.93 | 18.94 | 18.95 | 18.96 | 18.96 | 18.97 | 18.98 ;"); SABRVolCurve_ATMRange_builder.Append("'16Y' | 18.99 | 18.99 | 19 | 19.01 | 19.02 | 19.03 | 19.04 | 19.05 | 19.05 | 19.06 | 19.07 | 19.07 ;"); SABRVolCurve_ATMRange_builder.Append("'18Y' | 19.08 | 19.08 | 19.09 | 19.1 | 19.11 | 19.11 | 19.12 | 19.13 | 19.13 | 19.14 | 19.15 | 19.16 ;"); SABRVolCurve_ATMRange_builder.Append("'20Y' | 19.16 | 19.17 | 19.18 | 19.18 | 19.19 | 19.2 | 19.21 | 19.21 | 19.22 | 19.22 | 19.23 | 19.24 ;"); SABRVolCurve_ATMRange_builder.Append("'22Y' | 19.25 | 19.26 | 19.26 | 19.27 | 19.28 | 19.29 | 19.29 | 19.3 | 19.31 | 19.32 | 19.32 | 19.33"); SABRVolCurve_ATMRange_builder.Append("}"); SABRVolCurve_ATMRange.RangeFromStr ( SABRVolCurve_ATMRange_builder.ToString() ); // Create example range for parameter SABRVolCurve_ALPHARange CTQL.CTRangeData SABRVolCurve_ALPHARange = new CTQL.CTRangeData(); System.Text.StringBuilder SABRVolCurve_ALPHARange_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. SABRVolCurve_ALPHARange_builder.Append("{"); SABRVolCurve_ALPHARange_builder.Append("'Opt\\Und' | '3M' | '6M' | '9M' | '12M' | '2Y' | '4Y' | '6Y' | '8Y' | '10Y' | '12Y' | '14Y' | '16Y' ;"); SABRVolCurve_ALPHARange_builder.Append("'3M' | 0.4 | 0.4 | 0.4 | 0.4 | 0.41 | 0.41 | 0.41 | 0.41 | 0.41 | 0.41 | 0.41 | 0.42 ;"); SABRVolCurve_ALPHARange_builder.Append("'6M' | 0.42 | 0.42 | 0.42 | 0.42 | 0.42 | 0.42 | 0.43 | 0.43 | 0.43 | 0.43 | 0.43 | 0.43 ;"); SABRVolCurve_ALPHARange_builder.Append("'9M' | 0.43 | 0.44 | 0.44 | 0.44 | 0.44 | 0.44 | 0.44 | 0.45 | 0.45 | 0.45 | 0.45 | 0.45 ;"); SABRVolCurve_ALPHARange_builder.Append("'12M' | 0.45 | 0.45 | 0.46 | 0.46 | 0.46 | 0.46 | 0.46 | 0.46 | 0.46 | 0.47 | 0.47 | 0.47 ;"); SABRVolCurve_ALPHARange_builder.Append("'2Y' | 0.47 | 0.47 | 0.47 | 0.47 | 0.48 | 0.48 | 0.48 | 0.48 | 0.48 | 0.48 | 0.49 | 0.49 ;"); SABRVolCurve_ALPHARange_builder.Append("'4Y' | 0.49 | 0.49 | 0.49 | 0.49 | 0.49 | 0.49 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 ;"); SABRVolCurve_ALPHARange_builder.Append("'6Y' | 0.51 | 0.51 | 0.51 | 0.51 | 0.51 | 0.51 | 0.52 | 0.52 | 0.52 | 0.52 | 0.52 | 0.52 ;"); SABRVolCurve_ALPHARange_builder.Append("'8Y' | 0.52 | 0.53 | 0.53 | 0.53 | 0.53 | 0.53 | 0.53 | 0.53 | 0.54 | 0.54 | 0.54 | 0.54 ;"); SABRVolCurve_ALPHARange_builder.Append("'10Y' | 0.54 | 0.54 | 0.54 | 0.55 | 0.55 | 0.55 | 0.55 | 0.55 | 0.55 | 0.55 | 0.56 | 0.56 ;"); SABRVolCurve_ALPHARange_builder.Append("'12Y' | 0.56 | 0.56 | 0.56 | 0.56 | 0.56 | 0.57 | 0.57 | 0.57 | 0.57 | 0.57 | 0.57 | 0.57 ;"); SABRVolCurve_ALPHARange_builder.Append("'14Y' | 0.57 | 0.58 | 0.58 | 0.58 | 0.58 | 0.58 | 0.58 | 0.58 | 0.59 | 0.59 | 0.59 | 0.59 ;"); SABRVolCurve_ALPHARange_builder.Append("'16Y' | 0.59 | 0.59 | 0.59 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.61 | 0.61 ;"); SABRVolCurve_ALPHARange_builder.Append("'18Y' | 0.61 | 0.61 | 0.61 | 0.61 | 0.61 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 ;"); SABRVolCurve_ALPHARange_builder.Append("'20Y' | 0.63 | 0.63 | 0.63 | 0.63 | 0.63 | 0.63 | 0.64 | 0.64 | 0.64 | 0.64 | 0.64 | 0.64 ;"); SABRVolCurve_ALPHARange_builder.Append("'22Y' | 0.65 | 0.65 | 0.65 | 0.65 | 0.65 | 0.65 | 0.65 | 0.65 | 0.66 | 0.66 | 0.66 | 0.66"); SABRVolCurve_ALPHARange_builder.Append("}"); SABRVolCurve_ALPHARange.RangeFromStr ( SABRVolCurve_ALPHARange_builder.ToString() ); // Create example range for parameter SABRVolCurve_BETARange CTQL.CTRangeData SABRVolCurve_BETARange = new CTQL.CTRangeData(); System.Text.StringBuilder SABRVolCurve_BETARange_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. SABRVolCurve_BETARange_builder.Append("{"); SABRVolCurve_BETARange_builder.Append("'Opt\\Und' | '3M' | '6M' | '9M' | '12M' | '2Y' | '4Y' | '6Y' | '8Y' | '10Y' | '12Y' | '14Y' | '16Y' ;"); SABRVolCurve_BETARange_builder.Append("'3M' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'6M' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'9M' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'12M' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'2Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'4Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'6Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'8Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'10Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'12Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'14Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'16Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'18Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'20Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 ;"); SABRVolCurve_BETARange_builder.Append("'22Y' | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7 | 0.7"); SABRVolCurve_BETARange_builder.Append("}"); SABRVolCurve_BETARange.RangeFromStr ( SABRVolCurve_BETARange_builder.ToString() ); // Create example range for parameter SABRVolCurve_RHORange CTQL.CTRangeData SABRVolCurve_RHORange = new CTQL.CTRangeData(); System.Text.StringBuilder SABRVolCurve_RHORange_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. SABRVolCurve_RHORange_builder.Append("{"); SABRVolCurve_RHORange_builder.Append("'Opt\\Und' | '3M' | '6M' | '9M' | '12M' | '2Y' | '4Y' | '6Y' | '8Y' | '10Y' | '12Y' | '14Y' | '16Y' ;"); SABRVolCurve_RHORange_builder.Append("'3M' | 0.3 | 0.3 | 0.3 | 0.31 | 0.31 | 0.31 | 0.31 | 0.31 | 0.31 | 0.31 | 0.31 | 0.32 ;"); SABRVolCurve_RHORange_builder.Append("'6M' | 0.32 | 0.32 | 0.32 | 0.32 | 0.32 | 0.32 | 0.33 | 0.32 | 0.32 | 0.33 | 0.33 | 0.33 ;"); SABRVolCurve_RHORange_builder.Append("'9M' | 0.33 | 0.33 | 0.32 | 0.33 | 0.32 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 ;"); SABRVolCurve_RHORange_builder.Append("'12M' | 0.33 | 0.34 | 0.33 | 0.33 | 0.33 | 0.33 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 ;"); SABRVolCurve_RHORange_builder.Append("'2Y' | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.34 | 0.35 | 0.35 ;"); SABRVolCurve_RHORange_builder.Append("'4Y' | 0.35 | 0.35 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 | 0.36 ;"); SABRVolCurve_RHORange_builder.Append("'6Y' | 0.37 | 0.36 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 | 0.37 ;"); SABRVolCurve_RHORange_builder.Append("'8Y' | 0.38 | 0.38 | 0.38 | 0.37 | 0.37 | 0.37 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 ;"); SABRVolCurve_RHORange_builder.Append("'10Y' | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.37 | 0.38 | 0.37 | 0.38 | 0.38 | 0.38 ;"); SABRVolCurve_RHORange_builder.Append("'12Y' | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.38 | 0.39 | 0.39 | |