CreateFloatLeg Example VBA





http://www.QuantTools.com
CapeTools FLOAT Legs function list
CreateFloatLeg function

Welcome | Documentation format | QuantTools Groups | QuantTools Categories | Licence

Key TAGs | Excel Index | API Index



Example Excel VBA Driver function. Preparing the parameters and the final function call (the result).

High level view of the code structure (resulting in the final function call to CreateFloatLeg() )

These are the financial QuantTools function calls that are used within the examples :





The objects generated by these functions are inter-connected in the following way :




VBA 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. 
    '     ##################################################################################
        


' Add a reference to the CTQL_VBA_API.xla file via the Tools->Reference menu (within the VBA editor).
' This holds VBA class objects for communicating with the CTQuantToolsXL20.dll Excel Addin
' This XLA does not use COM and has access to all the financial objects created via the spreadsheet functions.


' 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 Long
    
    
Public Function VB_EX_CreateFloatLeg() As String

    nCTLegsGlobal = nCTLegsGlobal + 1
            
    
On Error GoTo err_Generic
        
            
    

    '    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

            
    
    Exit Function
err_Generic:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description    
    
            
End Function                
        


' ///////////////////////////////////////////////////////////////////

Private Function CreateFloatLegPart( _
    MySchedule As String, _                
    MyNewIndex As String, _                
    MyMarket As String) As String


    
        '  Create example range for parameter CreateFloatLeg_Notional

        ' Column vector of 20 rows (indexed from 0, highest index of 19)
        Dim CreateFloatLeg_Notional(19, 0) As Variant
                
        CreateFloatLeg_Notional(0, 0) = 5000000
        CreateFloatLeg_Notional(1, 0) = 5000000
        CreateFloatLeg_Notional(2, 0) = 5000000
        CreateFloatLeg_Notional(3, 0) = 5000000
        CreateFloatLeg_Notional(4, 0) = 5000000
        CreateFloatLeg_Notional(5, 0) = 5000000
        CreateFloatLeg_Notional(6, 0) = 5000000
        CreateFloatLeg_Notional(7, 0) = 5000000
        CreateFloatLeg_Notional(8, 0) = 5000000
        CreateFloatLeg_Notional(9, 0) = 5000000
        CreateFloatLeg_Notional(10, 0) = 5000000
        CreateFloatLeg_Notional(11, 0) = 5000000
        CreateFloatLeg_Notional(12, 0) = 5000000
        CreateFloatLeg_Notional(13, 0) = 5000000
        CreateFloatLeg_Notional(14, 0) = 5000000
        CreateFloatLeg_Notional(15, 0) = 5000000
        CreateFloatLeg_Notional(16, 0) = 5000000
        CreateFloatLeg_Notional(17, 0) = 5000000
        CreateFloatLeg_Notional(18, 0) = 5000000
        CreateFloatLeg_Notional(19, 0) = 5000000
        
            
        '  Create example range for parameter CreateFloatLeg_PrincipalPayments

        ' Column vector of 20 rows (indexed from 0, highest index of 19)
        Dim CreateFloatLeg_PrincipalPayments(19, 0) As Variant
                
        CreateFloatLeg_PrincipalPayments(0, 0) = 0
        CreateFloatLeg_PrincipalPayments(1, 0) = 0
        CreateFloatLeg_PrincipalPayments(2, 0) = 0
        CreateFloatLeg_PrincipalPayments(3, 0) = 0
        CreateFloatLeg_PrincipalPayments(4, 0) = 0
        CreateFloatLeg_PrincipalPayments(5, 0) = 0
        CreateFloatLeg_PrincipalPayments(6, 0) = 0
        CreateFloatLeg_PrincipalPayments(7, 0) = 0
        CreateFloatLeg_PrincipalPayments(8, 0) = 0
        CreateFloatLeg_PrincipalPayments(9, 0) = 0
        CreateFloatLeg_PrincipalPayments(10, 0) = 0
        CreateFloatLeg_PrincipalPayments(11, 0) = 0
        CreateFloatLeg_PrincipalPayments(12, 0) = 0
        CreateFloatLeg_PrincipalPayments(13, 0) = 0
        CreateFloatLeg_PrincipalPayments(14, 0) = 0
        CreateFloatLeg_PrincipalPayments(15, 0) = 0
        CreateFloatLeg_PrincipalPayments(16, 0) = 0
        CreateFloatLeg_PrincipalPayments(17, 0) = 0
        CreateFloatLeg_PrincipalPayments(18, 0) = 0
        CreateFloatLeg_PrincipalPayments(19, 0) = 0
        
            
        '  Create example range for parameter CreateFloatLeg_Margin

        ' Column vector of 20 rows (indexed from 0, highest index of 19)
        Dim CreateFloatLeg_Margin(19, 0) As Variant
                
        CreateFloatLeg_Margin(0, 0) = 0.0002
        CreateFloatLeg_Margin(1, 0) = 0.0002
        CreateFloatLeg_Margin(2, 0) = 0.0002
        CreateFloatLeg_Margin(3, 0) = 0.0002
        CreateFloatLeg_Margin(4, 0) = 0.0002
        CreateFloatLeg_Margin(5, 0) = 0.0002
        CreateFloatLeg_Margin(6, 0) = 0.0002
        CreateFloatLeg_Margin(7, 0) = 0.0002
        CreateFloatLeg_Margin(8, 0) = 0.0002
        CreateFloatLeg_Margin(9, 0) = 0.0002
        CreateFloatLeg_Margin(10, 0) = 0.0002
        CreateFloatLeg_Margin(11, 0) = 0.0002
        CreateFloatLeg_Margin(12, 0) = 0.0002
        CreateFloatLeg_Margin(13, 0) = 0.0002
        CreateFloatLeg_Margin(14, 0) = 0.0002
        CreateFloatLeg_Margin(15, 0) = 0.0002
        CreateFloatLeg_Margin(16, 0) = 0.0002
        CreateFloatLeg_Margin(17, 0) = 0.0002
        CreateFloatLeg_Margin(18, 0) = 0.0002
        CreateFloatLeg_Margin(19, 0) = 0.0002
        
            



    '    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 Long
        Reload = 1


    '    Whether you would like to PAY or REC this leg.
        Dim PayRec As String
        PayRec = "REC"


    '    A positive factor value you wish to multiply the Floating-Reset 
    '    Rate/Fixed-Coupon Rate by (Usually 1).
        Dim Gearing As Long
        Gearing = 1


    '    Currency of the Notional amount.
        Dim Ccy As String
        Ccy = "EUR"


    '    Payment Business Day Convention.
        Dim BusDayConv As String
        BusDayConv = "ModifiedFollowing"


    '    Payment DayCounter.
        Dim DayCount As String
        DayCount = "ACT365F"


    '    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 
        
        ' We call the CreateCTLegs() function via the CTQL module exposed from the CTQL_VBA_API.xla addin.
        Dim oCTLegs As CTLegs
        Set oCTLegs = CTQL.CreateCTLegs()
    
        rCreateFloatLeg = oCTLegs.CreateFloatLeg( _
                MyCreateFloatLeg, _
                Reload, _
                PayRec, _
                Gearing, _
                CreateFloatLeg_Notional, _
                CreateFloatLeg_PrincipalPayments, _
                Ccy, _
                MySchedule, _
                BusDayConv, _
                DayCount, _
                MyNewIndex, _
                CreateFloatLeg_Margin, _
                ExchangePrincipal, _
                MyMarket, _
                SMPFWDRho)


    CreateFloatLegPart = rCreateFloatLeg
    
End Function                        








Copyright (c) 2003-2007 CapeTools - All Rights Reserved.