CreateFloatLeg Example Java





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




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

public class Java_EX_CreateFloatLeg()
{
    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 nCTLegsGlobal = 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_CreateFloatLeg(String argv[])
    {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    nCTLegsGlobal += 1;
            
    String szErrorMsg = "";

    try
    {



    //    EURO calendar used for holiday adjustments.
    

    String MyEuroCal;
    MyEuroCal = 
        CALEUROPart();
    
    


    //    UK date calendar used within the UK stock exchange.
    

    String MyCALUKExchange;
    MyCALUKExchange = 
        CALUKExchangePart();
    
    


    //    Creates a centralized valuation date object.
    

    String MyValuationDate;
    MyValuationDate = 
        ValueDateObjPart();
    
    


    //    Generates a schedule of start and end dates, given the initial 
    //    start date and unadjusted final end dates.
    
    String MySchedule;
    MySchedule = 
        MakeSchedulePart(
        MyEuroCal);
    
    


    //    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 SABR curve to model the dynamics of the volatility 
    //    curve (smile).
    
    String MySABRVolCurve;
    MySABRVolCurve = 
        SABRVolCurvePart(
        MyValuationDate,
        MyDepoTPL,
        MySwapTPL);
    
    


    //    Creates a yield curve using market rates (No cross-currency 
    //    Swaps).
    
    String MyYCInterpOnDCF;
    MyYCInterpOnDCF = 
        MKTYC_DPart(
        MyValuationDate,
        MyDepoTPL,
        MySwapTPL);
    
    


    //    Creates a new Index code.
    
    String MyNewIndex;
    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)).
    
    String MyMarket;
    MyMarket = 
        CreateMKTPart(
        MyYCInterpOnDCF,
        MySABRVolCurve);
    
    


    //    Creates a floating rate leg.
    
    String MyCreateFloatLeg;
    MyCreateFloatLeg = 
        CreateFloatLegPart(
        MySchedule,
        MyNewIndex,
        MyMarket);
    
    // This is the result we are looking for.
    return MyCreateFloatLeg;
    
    
    }
    catch(Exception e)
    {
        szErrorMsg = e.getMessage();
        System.exit(1);
    }
                    
}                
        


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

private static String CreateFloatLegPart(
    String MySchedule,
    String MyNewIndex,
    String MyMarket)
{

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

        int[] arrBCreateFloatLeg_Notional = { 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000, 
            5000000  //  Array Data
        
        };
        
        CTQL.IntVector arrCreateFloatLeg_Notional = 
            new  CTQL.IntVector();

        for (int i=0; i<20; i++)
            arrCreateFloatLeg_Notional.add(arrBCreateFloatLeg_Notional[i]);
        
        // 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
        CTQL.CTRangeData CreateFloatLeg_PrincipalPayments;    
        

        int[] arrBCreateFloatLeg_PrincipalPayments = { 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0  //  Array Data
        
        };
        
        CTQL.IntVector arrCreateFloatLeg_PrincipalPayments = 
            new  CTQL.IntVector();

        for (int i=0; i<20; i++)
            arrCreateFloatLeg_PrincipalPayments.add(arrBCreateFloatLeg_PrincipalPayments[i]);
        
        // 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
        CTQL.CTRangeData CreateFloatLeg_Margin;    
        

        double[] arrBCreateFloatLeg_Margin = { 
            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
        
        };
        
        CTQL.DoubleVector arrCreateFloatLeg_Margin = 
            new  CTQL.DoubleVector();

        for (int i=0; i<20; i++)
            arrCreateFloatLeg_Margin.add(arrBCreateFloatLeg_Margin[i]);
        
        // 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
        String MyCreateFloatLeg = "MyCreateFloatLeg" + "_" + Integer.toString(nCTLegsGlobal);


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


    //    Whether you would like to PAY or REC this leg.
        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).
        int Gearing = 1;


    //    Currency of the Notional amount.
        CTIEnums.CCYEnum Ccy = CTIEnums.CCYEnum.CCY_EUR;


    //    Payment Business Day Convention.
        CTIEnums.BDCEnum BusDayConv = CTIEnums.BDCEnum.BDC_modifiedfollowing;


    //    Payment DayCounter.
        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.
        bool 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.
        double SMPFWDRho = 0.8;

    
    //  Excel function call would be this - "CT.LEG.CreateFloatLeg()"

    //    Creates a floating rate leg.
        String rCreateFloatLeg;
                                    
        rCreateFloatLeg = CTQL.CTLegsSA.CreateFloatLeg(
                MyCreateFloatLeg,
                Reload,
                PayRec,
                Gearing,
                CreateFloatLeg_Notional,
                CreateFloatLeg_PrincipalPayments,
                Ccy,
                MySchedule,
                BusDayConv,
                DayCount,
                MyNewIndex,
                CreateFloatLeg_Margin,
                ExchangePrincipal,
                MyMarket,
                SMPFWDRho);


    return rCreateFloatLeg;

}        








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