GenericLMM_MCPricer Example VBA





http://www.QuantTools.com
CapeTools Generic IR LMM MonteCarlo Pricer function list
GenericLMM_MCPricer 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 GenericLMM_MCPricer() )

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 - GenericLMM_MCPricer





    '     ##################################################################################
    '     The first function here GenericLMM_MCPricer(), contains a series of
    '     function calls leading upto the main function call, the second function
    '     within this file ( GenericLMM_MCPricerPart() ).
    '     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 nCTLMMMCPricerGlobal As Long
    
    
Public Function VB_EX_GenericLMM_MCPricer() As String

    nCTLMMMCPricerGlobal = nCTLMMMCPricerGlobal + 1
            
    
On Error GoTo err_Generic
        
            
    

    '    Creates an one dimensional interpolation object.

    Dim MyInterpObject1D As String
    MyInterpObject1D = _
        InterpObject1DPart()


    

    '    Creates an one dimensional interpolation object.

    Dim MyInterpObject1D_2 As String
    MyInterpObject1D_2 = _
        InterpObject1D__2Part()


    

    '    Creates a two dimensional interpolation object.

    Dim MyInterpObject2D As String
    MyInterpObject2D = _
        InterpObject2DPart()


    

    '    Creates a two dimensional interpolation object.

    Dim MyInterpObject2D_2 As String
    MyInterpObject2D_2 = _
        InterpObject2D__2Part()


    

    '    UK date calendar used within the UK stock exchange.

    Dim MyCALUKExchange As String
    MyCALUKExchange = _
        CALUKExchangePart()


    

    '    EURO calendar used for holiday adjustments.

    Dim MyEuroCal As String
    MyEuroCal = _
        CALEUROPart()


    

    '    Creates a centralized valuation date object.

    Dim MyValuationDate As String
    MyValuationDate = _
        ValueDateObjPart()


    

    '    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 yield curve using market rates (No cross-currency 
    '    Swaps).
    Dim MyMiniYC As String
    MyMiniYC = _
        MKTYC_D__3Part( _
        MyValuationDate, _
        MyDepoTPL, _
        MySwapTPL)


    

    '    Creates a new Index code.
    Dim MyNewIndex2 As String
    MyNewIndex2 = _
        CreateIndex__2Part( _
        MyCALUKExchange, _
        MyEuroCal, _
        MyMiniYC)


    

    '    Creates a Libor Forward Model Process container object.
    Dim MyLMMProcess2 As String
    MyLMMProcess2 = _
        LMMProcess2Part( _
        MyNewIndex2)


    

    '    Creates a an extended linear-exponential volatility model for 
    '    the libor market model.
    Dim My3rdLMMLinearExpVolModel2 As String
    My3rdLMMLinearExpVolModel2 = _
        LMMLinearExpVolModel2__3Part( _
        MyLMMProcess2)


    

    '    Creates an extended exponential correlation model for the libor 
    '    market model.
    Dim My2ndLMMLinearExpCorrModel2 As String
    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.
    Dim MyLMMSimProcess As String
    MyLMMSimProcess = _
        LMMSimProcessPart( _
        MyLMMProcess2, _
        My3rdLMMLinearExpVolModel2, _
        My2ndLMMLinearExpCorrModel2)


    

    '    Creates a generic pricing monte carlo object given a process 
    '    object and a pricing grid.
    Dim MyGenericLMM_MCPricer As String
    MyGenericLMM_MCPricer = _
        GenericLMM_MCPricerPart( _
        MyLMMSimProcess, _
        MyInterpObject1D, _
        MyInterpObject1D_2, _
        MyInterpObject2D, _
        MyInterpObject2D_2)

    ' This is the result we are looking for.
    VB_EX_GenericLMM_MCPricer = MyGenericLMM_MCPricer

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


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

Private Function GenericLMM_MCPricerPart( _
    MyLMMSimProcess As String, _                
    MyInterpObject1D As String, _                
    MyInterpObject1D_2 As String, _                
    MyInterpObject2D As String, _                
    MyInterpObject2D_2 As String) As String


    
        '  Create example range for parameter GenericLMM_MCPricer_PayOffTable


        Dim GenericLMM_MCPricer_PayOffTable As Variant
        
        GenericLMM_MCPricer_PayOffTable = vRange.RangeFromStr _
         ( _
        CStr("{") + _
        CStr("#21/Jul/2006#     |      |      |      |  ;") +         CStr("#23/Oct/2006#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#22/Jan/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#23/Apr/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#23/Jul/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#22/Oct/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jan/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Apr/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jul/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Oct/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jan/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Apr/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jul/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Oct/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jan/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Apr/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jul/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Oct/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jan/2011#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") +         CStr("#21/Apr/2011#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;") + _
        CStr("#21/Jul/2011#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     | max(GridColMin(cCol-1, 1, cRow) - LiborMin(1, cRow), 0.0) * DCF(cRow) * Cvg(cRow)") + _
        CStr("}") _
         )
    
        '  Create example range for parameter GenericLMM_MCPricer_ConstParams


        Dim GenericLMM_MCPricer_ConstParams As Variant
        
        GenericLMM_MCPricer_ConstParams = vRange.RangeFromStr _
         ( _
        CStr("{") + _
        CStr("_a     | 0.0001 ;") + _
        CStr("_b     | 20 ;") + _
        CStr("_c     | 2.5 ;") + _
        CStr("_var1     | 40") + _
        CStr("}") _
         )
    



    '    Key value to use as a handle for the created object
        Dim MyGenericLMM_MCPricer As String
        MyGenericLMM_MCPricer = "MyGenericLMM_MCPricer" & "_" & CStr(nCTLMMMCPricerGlobal)


    '    When creating this object for the first time, set this parameter 
    '    to a positive value.
        Dim Reload As Long
        Reload = 1


    '    With the PayOff table, the first column represents event dates.
        Dim ValidateDates As Boolean
        ValidateDates = false


    '    The number of simulations.
        Dim NoOfSims As Long
        NoOfSims = 10

                    
    '  Excel function call is : "CT.PRO.GenericLMM_MCPricer()"

    '    Creates a generic pricing monte carlo object given a process 
    '    object and a pricing grid.
        Dim rGenericLMM_MCPricer As String 
        
        ' We call the CreateCTLMMMCPricer() function via the CTQL module exposed from the CTQL_VBA_API.xla addin.
        Dim oCTLMMMCPricer As CTLMMMCPricer
        Set oCTLMMMCPricer = CTQL.CreateCTLMMMCPricer()
    
        rGenericLMM_MCPricer = oCTLMMMCPricer.GenericLMM_MCPricer( _
                MyGenericLMM_MCPricer, _
                Reload, _
                MyLMMSimProcess, _
                GenericLMM_MCPricer_PayOffTable, _
                ValidateDates, _
                NoOfSims, _
                GenericLMM_MCPricer_ConstParams, _
                MyInterpObject1D, _
                MyInterpObject1D_2, _
                MyInterpObject2D, _
                MyInterpObject2D_2)


    GenericLMM_MCPricerPart = rGenericLMM_MCPricer
    
End Function                        








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