GenericLMM_MCPricer Example Java





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 Java 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 :




Java 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. 
    //     ##################################################################################
        

public class Java_EX_GenericLMM_MCPricer()
{
    static 
    {
        try 
        {
            System.loadLibrary("CTQuantToolsAPI20");
        } 
        catch (UnsatisfiedLinkError e) 
        {
            System.err.println("Native code library failed to load. Make sure that the CTQuantToolsAPI20.dll is installed correctly.\n" + e);
            System.exit(1);
        }
    }

    static int nCTLMMMCPricerGlobal = 0;
    
    // 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();
    static String szTickedKeyName;
                

    public static String Java_EX_GenericLMM_MCPricer(String argv[])
    {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    nCTLMMMCPricerGlobal += 1;
            
    String szErrorMsg = "";

    try
    {



    //    Creates an one dimensional interpolation object.
    

    String MyInterpObject1D;
    MyInterpObject1D = 
        InterpObject1DPart();
    
    


    //    Creates an one dimensional interpolation object.
    

    String MyInterpObject1D_2;
    MyInterpObject1D_2 = 
        InterpObject1D__2Part();
    
    


    //    Creates a two dimensional interpolation object.
    

    String MyInterpObject2D;
    MyInterpObject2D = 
        InterpObject2DPart();
    
    


    //    Creates a two dimensional interpolation object.
    

    String MyInterpObject2D_2;
    MyInterpObject2D_2 = 
        InterpObject2D__2Part();
    
    


    //    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 centralized valuation date object.
    

    String MyValuationDate;
    MyValuationDate = 
        ValueDateObjPart();
    
    


    //    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 MyMiniYC;
    MyMiniYC = 
        MKTYC_D__3Part(
        MyValuationDate,
        MyDepoTPL,
        MySwapTPL);
    
    


    //    Creates a new Index code.
    
    String MyNewIndex2;
    MyNewIndex2 = 
        CreateIndex__2Part(
        MyCALUKExchange,
        MyEuroCal,
        MyMiniYC);
    
    


    //    Creates a Libor Forward Model Process container object.
    
    String MyLMMProcess2;
    MyLMMProcess2 = 
        LMMProcess2Part(
        MyNewIndex2);
    
    


    //    Creates a an extended linear-exponential volatility model for 
    //    the libor market model.
    
    String My3rdLMMLinearExpVolModel2;
    My3rdLMMLinearExpVolModel2 = 
        LMMLinearExpVolModel2__3Part(
        MyLMMProcess2);
    
    


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


    //    Creates a generic pricing monte carlo object given a process 
    //    object and a pricing grid.
    
    String MyGenericLMM_MCPricer;
    MyGenericLMM_MCPricer = 
        GenericLMM_MCPricerPart(
        MyLMMSimProcess,
        MyInterpObject1D,
        MyInterpObject1D_2,
        MyInterpObject2D,
        MyInterpObject2D_2);
    
    // This is the result we are looking for.
    return MyGenericLMM_MCPricer;
    
    
    }
    catch(Exception e)
    {
        szErrorMsg = e.getMessage();
        System.exit(1);
    }
                    
}                
        


// ///////////////////////////////////////////////////////////////////

private static String GenericLMM_MCPricerPart(
    String MyLMMSimProcess,
    String MyInterpObject1D,
    String MyInterpObject1D_2,
    String MyInterpObject2D,
    String MyInterpObject2D_2)
{

        //  Create example range for parameter GenericLMM_MCPricer_PayOffTable
        CTQL.CTRangeData GenericLMM_MCPricer_PayOffTable = 
            new CTQL.CTRangeData();
    
        StringBuffer GenericLMM_MCPricer_PayOffTable_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        GenericLMM_MCPricer_PayOffTable_builder.append("{");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jul/2006#     |      |      |      |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#23/Oct/2006#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#22/Jan/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#23/Apr/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#23/Jul/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#22/Oct/2007#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jan/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Apr/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jul/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Oct/2008#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jan/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Apr/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jul/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Oct/2009#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jan/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Apr/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jul/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Oct/2010#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Jan/2011#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#21/Apr/2011#     | Libor(cRow) + _a     | Interp1D(1,cRow)     | GridRowSum(cRow, cCol-2, cCol-1)     |  ;");
        GenericLMM_MCPricer_PayOffTable_builder.append("#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)");
        GenericLMM_MCPricer_PayOffTable_builder.append("}");
    
        GenericLMM_MCPricer_PayOffTable.RangeFromStr
        (
            GenericLMM_MCPricer_PayOffTable_builder.toString()
        );
                                       
        //  Create example range for parameter GenericLMM_MCPricer_ConstParams
        CTQL.CTRangeData GenericLMM_MCPricer_ConstParams = 
            new CTQL.CTRangeData();
    
        StringBuffer GenericLMM_MCPricer_ConstParams_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        GenericLMM_MCPricer_ConstParams_builder.append("{");
        GenericLMM_MCPricer_ConstParams_builder.append("_a     | 0.0001 ;");
        GenericLMM_MCPricer_ConstParams_builder.append("_b     | 20 ;");
        GenericLMM_MCPricer_ConstParams_builder.append("_c     | 2.5 ;");
        GenericLMM_MCPricer_ConstParams_builder.append("_var1     | 40");
        GenericLMM_MCPricer_ConstParams_builder.append("}");
    
        GenericLMM_MCPricer_ConstParams.RangeFromStr
        (
            GenericLMM_MCPricer_ConstParams_builder.toString()
        );
                                       



    //    Key value to use as a handle for the created object
        String MyGenericLMM_MCPricer = "MyGenericLMM_MCPricer" + "_" + Integer.toString(nCTLMMMCPricerGlobal);


    //    When creating this object for the first time, set this parameter 
    //    to a positive value.
        int Reload = 1;


    //    With the PayOff table, the first column represents event dates.
        bool ValidateDates = false;


    //    The number of simulations.
        int NoOfSims = 10;

    
    //  Excel function call would be this - "CT.PRO.GenericLMM_MCPricer()"

    //    Creates a generic pricing monte carlo object given a process 
    //    object and a pricing grid.
        String rGenericLMM_MCPricer;
                                    
        rGenericLMM_MCPricer = CTQL.CTLMMMCPricerSA.GenericLMM_MCPricer(
                MyGenericLMM_MCPricer,
                Reload,
                MyLMMSimProcess,
                GenericLMM_MCPricer_PayOffTable,
                ValidateDates,
                NoOfSims,
                GenericLMM_MCPricer_ConstParams,
                MyInterpObject1D,
                MyInterpObject1D_2,
                MyInterpObject2D,
                MyInterpObject2D_2);


    return rGenericLMM_MCPricer;

}        








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