CreateFloatLeg Example VBNET

VB.NET Example - CreateFloatLeg![]() ![]() ![]() ![]() ![]() ' ################################################################################## ' The first function here CreateFloatLeg(), contains a series of ' function calls leading upto the main function call, the second function ' within this file ( CreateFloatLegPart() ). ' 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. ' ################################################################################## ![]() Imports 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.![]() Imports 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. Global nCTLegsGlobal As Integer ' 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 Global oEmptyRange As CTQL.CTRangeData Public Function VB_EX_CreateFloatLeg() As String![]() nCTLegsGlobal = nCTLegsGlobal + 1 ![]() Dim szErrorMsg As String Try![]() ![]() ' EURO calendar used for holiday adjustments.![]() Dim MyEuroCal As String MyEuroCal = _ CALEUROPart()![]() ![]() ![]() ' UK date calendar used within the UK stock exchange.![]() Dim MyCALUKExchange As String MyCALUKExchange = _ CALUKExchangePart()![]() ![]() ![]() ' Creates a centralized valuation date object.![]() Dim MyValuationDate As String MyValuationDate = _ ValueDateObjPart()![]() ![]() ![]() ' Generates a schedule of start and end dates, given the initial ' start date and unadjusted final end dates. Dim MySchedule As String MySchedule = _ MakeSchedulePart( _ MyEuroCal)![]() ![]() ![]() ' Creates a Deposit template which is almost identical to a Libor ' Index, but without the YieldCurve information. Dim MyDepoTPL As String 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. Dim MySwapTPL As String MySwapTPL = _ CreateSwapTemplatePart( _ MyEuroCal, _ MyDepoTPL)![]() ![]() ![]() ' Creates a SABR curve to model the dynamics of the volatility ' curve (smile). Dim MySABRVolCurve As String MySABRVolCurve = _ SABRVolCurvePart( _ MyValuationDate, _ MyDepoTPL, _ MySwapTPL)![]() ![]() ![]() ' Creates a yield curve using market rates (No cross-currency ' Swaps). Dim MyYCInterpOnDCF As String MyYCInterpOnDCF = _ MKTYC_DPart( _ MyValuationDate, _ MyDepoTPL, _ MySwapTPL)![]() ![]() ![]() ' Creates a new Index code. Dim MyNewIndex As String MyNewIndex = _ CreateIndexPart( _ MyCALUKExchange, _ MyEuroCal, _ MyYCInterpOnDCF)![]() ![]() ![]() ' Creates a market object which is an aggregate of interest rate ' market objects (Discounting curve and Interest rate volatility ' curve (volcurve)). Dim MyMarket As String MyMarket = _ CreateMKTPart( _ MyYCInterpOnDCF, _ MySABRVolCurve)![]() ![]() ![]() ' Creates a floating rate leg. Dim MyCreateFloatLeg As String MyCreateFloatLeg = _ CreateFloatLegPart( _ MySchedule, _ MyNewIndex, _ MyMarket)![]() ' This is the result we are looking for. VB_EX_CreateFloatLeg = MyCreateFloatLeg![]() Catch e As Exception szErrorMsg = e.Message Throw e Catch e As System.ApplicationException szData = e.Message End Try End Function ![]() ![]() ' ///////////////////////////////////////////////////////////////////![]() Private Function CreateFloatLegPart( _ MySchedule As String, _ MyNewIndex As String, _ MyMarket As String) As String![]() ![]() ' Create example range for parameter CreateFloatLeg_Notional Dim CreateFloatLeg_Notional _ As CTQL.CTRangeData ![]() Dim arrBCreateFloatLeg_Notional As Integer() = { _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000, _ 5000000 _ ' Array Data } Dim arrCreateFloatLeg_Notional As CTQL.IntVector = _ New CTQL.IntVector(arrBCreateFloatLeg_Notional) ' Second parameter determines whether the array is a column array (false) or a row array (true) CreateFloatLeg_Notional = New CTQL.CTRangeData(arrCreateFloatLeg_Notional, False) ' Create example range for parameter CreateFloatLeg_PrincipalPayments Dim CreateFloatLeg_PrincipalPayments _ As CTQL.CTRangeData ![]() Dim arrBCreateFloatLeg_PrincipalPayments As Integer() = { _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0, _ 0 _ ' Array Data } Dim arrCreateFloatLeg_PrincipalPayments As CTQL.IntVector = _ New CTQL.IntVector(arrBCreateFloatLeg_PrincipalPayments) ' Second parameter determines whether the array is a column array (false) or a row array (true) CreateFloatLeg_PrincipalPayments = New CTQL.CTRangeData(arrCreateFloatLeg_PrincipalPayments, False) ' Create example range for parameter CreateFloatLeg_Margin Dim CreateFloatLeg_Margin _ As CTQL.CTRangeData ![]() Dim arrBCreateFloatLeg_Margin As Double() = { _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002, _ 0.0002 _ ' Array Data } Dim arrCreateFloatLeg_Margin As CTQL.DoubleVector = _ New CTQL.DoubleVector(arrBCreateFloatLeg_Margin) ' Second parameter determines whether the array is a column array (false) or a row array (true) CreateFloatLeg_Margin = New CTQL.CTRangeData(arrCreateFloatLeg_Margin, False) ![]() ![]() ![]() ' Key value to use as a handle for the created object Dim MyCreateFloatLeg As String MyCreateFloatLeg = "MyCreateFloatLeg" + "_" + CStr(nCTLegsGlobal)![]() ![]() ' When creating this object for the first time, set this parameter ' to a positive value. Dim Reload As Integer Reload = 1![]() ![]() ' Whether you would like to PAY or REC this leg. Dim PayRec As CTIEnums.PAYRECEnum PayRec = CTIEnums.PAYRECEnum.PAYREC_REC![]() ![]() ' A positive factor value you wish to multiply the Floating-Reset ' Rate/Fixed-Coupon Rate by (Usually 1). Dim Gearing As Integer Gearing = 1![]() ![]() ' Currency of the Notional amount. Dim Ccy As CTIEnums.CCYEnum Ccy = CTIEnums.CCYEnum.CCY_EUR![]() ![]() ' Payment Business Day Convention. Dim BusDayConv As CTIEnums.BDCEnum BusDayConv = CTIEnums.BDCEnum.BDC_modifiedfollowing![]() ![]() ' Payment DayCounter. Dim DayCount As CTIEnums.DayCountEnum DayCount = CTIEnums.DayCountEnum.DayCount_actual365_fixed![]() ![]() ' Whether you wish to exchange the principal amount(s) at the ' start and termination of the leg contract. Dim ExchangePrincipal As Boolean ExchangePrincipal = False![]() ![]() ' If a CMS index is specified (within the parameter 'IndexKey') ' and the 'CMSAlgo' parameter within this CMS Index has been set ' to 'Hull' then the correlation between swap rates and fwd rates ' is required. Dim SMPFWDRho As Double SMPFWDRho = 0.8![]() ' Excel function call is : "CT.LEG.CreateFloatLeg()"![]() ' Creates a floating rate leg. Dim rCreateFloatLeg As String Dim oCTLegs As New CTQL.CTLegs rCreateFloatLeg = CTQL.CTLegsSA.CreateFloatLeg( _ MyCreateFloatLeg, _ Reload, _ PayRec, _ Gearing, _ CreateFloatLeg_Notional, _ CreateFloatLeg_PrincipalPayments, _ Ccy, _ MySchedule, _ BusDayConv, _ DayCount, _ MyNewIndex, _ CreateFloatLeg_Margin, _ ExchangePrincipal, _ MyMarket, _ SMPFWDRho)![]() ![]() CreateFloatLegPart = rCreateFloatLeg End Function ![]() ![]() ![]() ![]() |