StepMonteCarlo Example Java





http://www.QuantTools.com
CapeTools (Compact) Process Simulation function list
StepMonteCarlo 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 StepMonteCarlo() )

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





    //     ##################################################################################
    //     The first function here StepMonteCarlo(), contains a series of
    //     function calls leading upto the main function call, the second function
    //     within this file ( StepMonteCarloPart() ).
    //     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_StepMonteCarlo()
{
    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 nCTProcessSimCGlobal = 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_StepMonteCarlo(String argv[])
    {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    nCTProcessSimCGlobal += 1;
            
    String szErrorMsg = "";

    try
    {



    //    Creates a centralized valuation date object.
    

    String MyValuationDate;
    MyValuationDate = 
        ValueDateObjPart();
    
    


    //    Creates a Generalized BlackScholes Process.
    
    String MyGBSProcess;
    MyGBSProcess = 
        GBSProcessPart(
        MyValuationDate);
    
    


    //    Creates a Generalized BlackScholes Process.
    
    String My2ndGBSProcess;
    My2ndGBSProcess = 
        GBSProcess__2Part(
        MyValuationDate);
    
    


    //    Creates a Generalized BlackScholes Process.
    
    String My3rdGBSProcess;
    My3rdGBSProcess = 
        GBSProcess__3Part(
        MyValuationDate);
    
    


    //    Creates a Generalized BlackScholes Process.
    
    String My4thGBSProcess;
    My4thGBSProcess = 
        GBSProcess__4Part(
        MyValuationDate);
    
    


    //    Creates a Generalized BlackScholes Process.
    
    String My5thGBSProcess;
    My5thGBSProcess = 
        GBSProcess__5Part(
        MyValuationDate);
    
    


    //    Creates an array of correlated one dimensional stochastic processes.
    
    String MyCorrArrayProcesses;
    MyCorrArrayProcesses = 
        CorrArrayProcessesPart(
        MyGBSProcess,
        My2ndGBSProcess,
        My3rdGBSProcess,
        My4thGBSProcess,
        My5thGBSProcess);
    
    


    //    Creates a Step Monte Carlo object given a process object and 
    //    a time line dates array.
    
    String MyStepMonteCarlo;
    MyStepMonteCarlo = 
        StepMonteCarloPart(
        MyCorrArrayProcesses,
        MyValuationDate);
    
    // This is the result we are looking for.
    return MyStepMonteCarlo;
    
    
    }
    catch(Exception e)
    {
        szErrorMsg = e.getMessage();
        System.exit(1);
    }
                    
}                
        


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

private static String StepMonteCarloPart(
    String MyCorrArrayProcesses,
    String MyValuationDate)
{

        //  Create example range for parameter StepMonteCarlo_MandatoryDates
        CTQL.CTRangeData StepMonteCarlo_MandatoryDates;    
        

        int[] arrBStepMonteCarlo_MandatoryDates = { 
            CTQL.Date.serialNumber("19/7/2005", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2006", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/7/2006", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2007", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/7/2007", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2008", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/7/2008", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2009", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/7/2009", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2010", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/7/2010", "dd/mm/yyyy"), 
            CTQL.Date.serialNumber("19/1/2011", "dd/mm/yyyy")  //  Array Data
        
        };
        
        CTQL.IntVector arrStepMonteCarlo_MandatoryDates = 
            new  CTQL.IntVector();

        for (int i=0; i<12; i++)
            arrStepMonteCarlo_MandatoryDates.add(arrBStepMonteCarlo_MandatoryDates[i]);
        
        // Second parameter determines whether the array is a column array (false) or a row array (true)
        StepMonteCarlo_MandatoryDates = new  CTQL.CTRangeData(arrStepMonteCarlo_MandatoryDates, false);
            



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


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


    //    Used to calculate time in years.
        CTIEnums.DayCountEnum dayCounter = CTIEnums.DayCountEnum.DayCount_30360;


    //    The minimum number of steps that the discretization of the 'MandatoryDates' 
    //    parameter will take.
        int MinNoOfSteps = 50;


    //    The random generator type to use.
        String MCMethod = "Pseudo";


    //    Seed value.
        int Seed = 0;

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

    //    Creates a Step Monte Carlo object given a process object and 
    //    a time line dates array.
        String rStepMonteCarlo;
                                    
        rStepMonteCarlo = CTQL.CTProcessSimCSA.StepMonteCarlo(
                MyStepMonteCarlo,
                Reload,
                MyCorrArrayProcesses,
                MyValuationDate,
                dayCounter,
                StepMonteCarlo_MandatoryDates,
                MinNoOfSteps,
                MCMethod,
                Seed);


    return rStepMonteCarlo;

}        








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