SABRVolCurve Example Java





http://www.QuantTools.com
CapeTools Volatility Curves function list
SABRVolCurve 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 SABRVolCurve() )

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





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

    try
    {



    //    Creates a centralized valuation date object.
    

    String MyValuationDate;
    MyValuationDate = 
        ValueDateObjPart();
    
    


    //    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 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);
    
    // This is the result we are looking for.
    return MySABRVolCurve;
    
    
    }
    catch(Exception e)
    {
        szErrorMsg = e.getMessage();
        System.exit(1);
    }
                    
}                
        


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

private static String SABRVolCurvePart(
    String MyValuationDate,
    String MyDepoTPL,
    String MySwapTPL)
{

        //  Create example range for parameter SABRVolCurve_ATMRange
        CTQL.CTRangeData SABRVolCurve_ATMRange = 
            new CTQL.CTRangeData();
    
        StringBuffer SABRVolCurve_ATMRange_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        SABRVolCurve_ATMRange_builder.append("{");
        SABRVolCurve_ATMRange_builder.append("'Opt\\Und'     | '3M'     | '6M'     | '9M'     | '12M'     | '2Y'     | '4Y'     | '6Y'     | '8Y'     | '10Y'     | '12Y'     | '14Y'     | '16Y' ;");
        SABRVolCurve_ATMRange_builder.append("'3M'     | 18     | 18.01     | 18.02     | 18.02     | 18.03     | 18.04     | 18.05     | 18.06     | 18.07     | 18.07     | 18.08     | 18.09 ;");
        SABRVolCurve_ATMRange_builder.append("'6M'     | 18.1     | 18.11     | 18.12     | 18.12     | 18.13     | 18.14     | 18.15     | 18.16     | 18.17     | 18.17     | 18.18     | 18.19 ;");
        SABRVolCurve_ATMRange_builder.append("'9M'     | 18.19     | 18.2     | 18.21     | 18.22     | 18.22     | 18.23     | 18.24     | 18.25     | 18.26     | 18.26     | 18.27     | 18.28 ;");
        SABRVolCurve_ATMRange_builder.append("'12M'     | 18.29     | 18.29     | 18.3     | 18.31     | 18.32     | 18.32     | 18.33     | 18.34     | 18.34     | 18.35     | 18.36     | 18.37 ;");
        SABRVolCurve_ATMRange_builder.append("'2Y'     | 18.37     | 18.38     | 18.39     | 18.4     | 18.41     | 18.42     | 18.42     | 18.43     | 18.44     | 18.44     | 18.45     | 18.46 ;");
        SABRVolCurve_ATMRange_builder.append("'4Y'     | 18.46     | 18.47     | 18.48     | 18.48     | 18.49     | 18.5     | 18.5     | 18.51     | 18.52     | 18.53     | 18.53     | 18.54 ;");
        SABRVolCurve_ATMRange_builder.append("'6Y'     | 18.55     | 18.55     | 18.56     | 18.57     | 18.57     | 18.58     | 18.59     | 18.6     | 18.6     | 18.61     | 18.62     | 18.62 ;");
        SABRVolCurve_ATMRange_builder.append("'8Y'     | 18.63     | 18.64     | 18.64     | 18.65     | 18.66     | 18.66     | 18.67     | 18.68     | 18.69     | 18.69     | 18.7     | 18.71 ;");
        SABRVolCurve_ATMRange_builder.append("'10Y'     | 18.71     | 18.72     | 18.73     | 18.74     | 18.75     | 18.75     | 18.76     | 18.77     | 18.78     | 18.79     | 18.79     | 18.8 ;");
        SABRVolCurve_ATMRange_builder.append("'12Y'     | 18.81     | 18.81     | 18.82     | 18.83     | 18.84     | 18.84     | 18.85     | 18.86     | 18.87     | 18.87     | 18.88     | 18.88 ;");
        SABRVolCurve_ATMRange_builder.append("'14Y'     | 18.89     | 18.9     | 18.91     | 18.92     | 18.92     | 18.93     | 18.94     | 18.95     | 18.96     | 18.96     | 18.97     | 18.98 ;");
        SABRVolCurve_ATMRange_builder.append("'16Y'     | 18.99     | 18.99     | 19     | 19.01     | 19.02     | 19.03     | 19.04     | 19.05     | 19.05     | 19.06     | 19.07     | 19.07 ;");
        SABRVolCurve_ATMRange_builder.append("'18Y'     | 19.08     | 19.08     | 19.09     | 19.1     | 19.11     | 19.11     | 19.12     | 19.13     | 19.13     | 19.14     | 19.15     | 19.16 ;");
        SABRVolCurve_ATMRange_builder.append("'20Y'     | 19.16     | 19.17     | 19.18     | 19.18     | 19.19     | 19.2     | 19.21     | 19.21     | 19.22     | 19.22     | 19.23     | 19.24 ;");
        SABRVolCurve_ATMRange_builder.append("'22Y'     | 19.25     | 19.26     | 19.26     | 19.27     | 19.28     | 19.29     | 19.29     | 19.3     | 19.31     | 19.32     | 19.32     | 19.33");
        SABRVolCurve_ATMRange_builder.append("}");
    
        SABRVolCurve_ATMRange.RangeFromStr
        (
            SABRVolCurve_ATMRange_builder.toString()
        );
                                       
        //  Create example range for parameter SABRVolCurve_ALPHARange
        CTQL.CTRangeData SABRVolCurve_ALPHARange = 
            new CTQL.CTRangeData();
    
        StringBuffer SABRVolCurve_ALPHARange_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        SABRVolCurve_ALPHARange_builder.append("{");
        SABRVolCurve_ALPHARange_builder.append("'Opt\\Und'     | '3M'     | '6M'     | '9M'     | '12M'     | '2Y'     | '4Y'     | '6Y'     | '8Y'     | '10Y'     | '12Y'     | '14Y'     | '16Y' ;");
        SABRVolCurve_ALPHARange_builder.append("'3M'     | 0.4     | 0.4     | 0.4     | 0.4     | 0.41     | 0.41     | 0.41     | 0.41     | 0.41     | 0.41     | 0.41     | 0.42 ;");
        SABRVolCurve_ALPHARange_builder.append("'6M'     | 0.42     | 0.42     | 0.42     | 0.42     | 0.42     | 0.42     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43 ;");
        SABRVolCurve_ALPHARange_builder.append("'9M'     | 0.43     | 0.44     | 0.44     | 0.44     | 0.44     | 0.44     | 0.44     | 0.45     | 0.45     | 0.45     | 0.45     | 0.45 ;");
        SABRVolCurve_ALPHARange_builder.append("'12M'     | 0.45     | 0.45     | 0.46     | 0.46     | 0.46     | 0.46     | 0.46     | 0.46     | 0.46     | 0.47     | 0.47     | 0.47 ;");
        SABRVolCurve_ALPHARange_builder.append("'2Y'     | 0.47     | 0.47     | 0.47     | 0.47     | 0.48     | 0.48     | 0.48     | 0.48     | 0.48     | 0.48     | 0.49     | 0.49 ;");
        SABRVolCurve_ALPHARange_builder.append("'4Y'     | 0.49     | 0.49     | 0.49     | 0.49     | 0.49     | 0.49     | 0.5     | 0.5     | 0.5     | 0.5     | 0.5     | 0.5 ;");
        SABRVolCurve_ALPHARange_builder.append("'6Y'     | 0.51     | 0.51     | 0.51     | 0.51     | 0.51     | 0.51     | 0.52     | 0.52     | 0.52     | 0.52     | 0.52     | 0.52 ;");
        SABRVolCurve_ALPHARange_builder.append("'8Y'     | 0.52     | 0.53     | 0.53     | 0.53     | 0.53     | 0.53     | 0.53     | 0.53     | 0.54     | 0.54     | 0.54     | 0.54 ;");
        SABRVolCurve_ALPHARange_builder.append("'10Y'     | 0.54     | 0.54     | 0.54     | 0.55     | 0.55     | 0.55     | 0.55     | 0.55     | 0.55     | 0.55     | 0.56     | 0.56 ;");
        SABRVolCurve_ALPHARange_builder.append("'12Y'     | 0.56     | 0.56     | 0.56     | 0.56     | 0.56     | 0.57     | 0.57     | 0.57     | 0.57     | 0.57     | 0.57     | 0.57 ;");
        SABRVolCurve_ALPHARange_builder.append("'14Y'     | 0.57     | 0.58     | 0.58     | 0.58     | 0.58     | 0.58     | 0.58     | 0.58     | 0.59     | 0.59     | 0.59     | 0.59 ;");
        SABRVolCurve_ALPHARange_builder.append("'16Y'     | 0.59     | 0.59     | 0.59     | 0.6     | 0.6     | 0.6     | 0.6     | 0.6     | 0.6     | 0.6     | 0.61     | 0.61 ;");
        SABRVolCurve_ALPHARange_builder.append("'18Y'     | 0.61     | 0.61     | 0.61     | 0.61     | 0.61     | 0.62     | 0.62     | 0.62     | 0.62     | 0.62     | 0.62     | 0.62 ;");
        SABRVolCurve_ALPHARange_builder.append("'20Y'     | 0.63     | 0.63     | 0.63     | 0.63     | 0.63     | 0.63     | 0.64     | 0.64     | 0.64     | 0.64     | 0.64     | 0.64 ;");
        SABRVolCurve_ALPHARange_builder.append("'22Y'     | 0.65     | 0.65     | 0.65     | 0.65     | 0.65     | 0.65     | 0.65     | 0.65     | 0.66     | 0.66     | 0.66     | 0.66");
        SABRVolCurve_ALPHARange_builder.append("}");
    
        SABRVolCurve_ALPHARange.RangeFromStr
        (
            SABRVolCurve_ALPHARange_builder.toString()
        );
                                       
        //  Create example range for parameter SABRVolCurve_BETARange
        CTQL.CTRangeData SABRVolCurve_BETARange = 
            new CTQL.CTRangeData();
    
        StringBuffer SABRVolCurve_BETARange_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        SABRVolCurve_BETARange_builder.append("{");
        SABRVolCurve_BETARange_builder.append("'Opt\\Und'     | '3M'     | '6M'     | '9M'     | '12M'     | '2Y'     | '4Y'     | '6Y'     | '8Y'     | '10Y'     | '12Y'     | '14Y'     | '16Y' ;");
        SABRVolCurve_BETARange_builder.append("'3M'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'6M'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'9M'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'12M'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'2Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'4Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'6Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'8Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'10Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'12Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'14Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'16Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'18Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'20Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7 ;");
        SABRVolCurve_BETARange_builder.append("'22Y'     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7     | 0.7");
        SABRVolCurve_BETARange_builder.append("}");
    
        SABRVolCurve_BETARange.RangeFromStr
        (
            SABRVolCurve_BETARange_builder.toString()
        );
                                       
        //  Create example range for parameter SABRVolCurve_RHORange
        CTQL.CTRangeData SABRVolCurve_RHORange = 
            new CTQL.CTRangeData();
    
        StringBuffer SABRVolCurve_RHORange_builder = new StringBuffer(100);
                         
        // We could set the value for each cell individually, but for display
        // purposes, this is quicker and more informative.
        SABRVolCurve_RHORange_builder.append("{");
        SABRVolCurve_RHORange_builder.append("'Opt\\Und'     | '3M'     | '6M'     | '9M'     | '12M'     | '2Y'     | '4Y'     | '6Y'     | '8Y'     | '10Y'     | '12Y'     | '14Y'     | '16Y' ;");
        SABRVolCurve_RHORange_builder.append("'3M'     | 0.3     | 0.3     | 0.3     | 0.31     | 0.31     | 0.31     | 0.31     | 0.31     | 0.31     | 0.31     | 0.31     | 0.32 ;");
        SABRVolCurve_RHORange_builder.append("'6M'     | 0.32     | 0.32     | 0.32     | 0.32     | 0.32     | 0.32     | 0.33     | 0.32     | 0.32     | 0.33     | 0.33     | 0.33 ;");
        SABRVolCurve_RHORange_builder.append("'9M'     | 0.33     | 0.33     | 0.32     | 0.33     | 0.32     | 0.33     | 0.33     | 0.33     | 0.33     | 0.33     | 0.33     | 0.33 ;");
        SABRVolCurve_RHORange_builder.append("'12M'     | 0.33     | 0.34     | 0.33     | 0.33     | 0.33     | 0.33     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34 ;");
        SABRVolCurve_RHORange_builder.append("'2Y'     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.34     | 0.35     | 0.35 ;");
        SABRVolCurve_RHORange_builder.append("'4Y'     | 0.35     | 0.35     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36     | 0.36 ;");
        SABRVolCurve_RHORange_builder.append("'6Y'     | 0.37     | 0.36     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37     | 0.37 ;");
        SABRVolCurve_RHORange_builder.append("'8Y'     | 0.38     | 0.38     | 0.38     | 0.37     | 0.37     | 0.37     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38 ;");
        SABRVolCurve_RHORange_builder.append("'10Y'     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.37     | 0.38     | 0.37     | 0.38     | 0.38     | 0.38 ;");
        SABRVolCurve_RHORange_builder.append("'12Y'     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.38     | 0.39     | 0.39     | 0.39     | 0.39 ;");
        SABRVolCurve_RHORange_builder.append("'14Y'     | 0.39     | 0.39     | 0.39     | 0.39     | 0.39     | 0.39     | 0.4     | 0.39     | 0.39     | 0.39     | 0.4     | 0.4 ;");
        SABRVolCurve_RHORange_builder.append("'16Y'     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.4     | 0.41     | 0.41 ;");
        SABRVolCurve_RHORange_builder.append("'18Y'     | 0.41     | 0.41     | 0.41     | 0.41     | 0.41     | 0.41     | 0.42     | 0.42     | 0.41     | 0.42     | 0.42     | 0.42 ;");
        SABRVolCurve_RHORange_builder.append("'20Y'     | 0.42     | 0.42     | 0.42     | 0.43     | 0.43     | 0.43     | 0.42     | 0.43     | 0.42     | 0.43     | 0.43     | 0.43 ;");
        SABRVolCurve_RHORange_builder.append("'22Y'     | 0.42     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43     | 0.43");
        SABRVolCurve_RHORange_builder.append("}");
    
        SABRVolCurve_RHORange.RangeFromStr
        (
            SABRVolCurve_RHORange_builder.toString()
        );
                                       



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


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


    //    A tag used to identify this curve (case insensitive) if placed 
    //    within a Volatility curve collection ( via the GroupedVolCurves() 
    //    function ).
        String CurveName = "MySABRVolCurve";


    //    Number of days between the Exercise date of the options and 
    //    the STARTDATE of the instrument.
        int SettleDays = 2;


    //    Is the input volatility entered as a percentage value (true), 
    //    or the raw volatility value (false).
        bool DivideVolBy100 = true;


    //    DayCounter for converting dates into year fractions.
        CTIEnums.DayCountEnum DayCount = CTIEnums.DayCountEnum.DayCount_30360;


    //    Interpolation method to use when interpolating the curve for 
    //    vols, - LINEAR, LOGLINEAR, CUBIC.
        CTIEnums.InterpEnum InterpType = CTIEnums.InterpEnum.Interp_LINEAR;

    
    //  Excel function call would be this - "CT.CRV.SABRVolCurve()"

    //    Creates a SABR curve to model the dynamics of the volatility 
    //    curve (smile).
        String rSABRVolCurve;
                                    
        rSABRVolCurve = CTQL.CTVolatiltyCurvesSA.SABRVolCurve(
                MySABRVolCurve,
                Reload,
                CurveName,
                MyValuationDate,
                SettleDays,
                SABRVolCurve_ATMRange,
                SABRVolCurve_ALPHARange,
                SABRVolCurve_BETARange,
                SABRVolCurve_RHORange,
                DivideVolBy100,
                MyDepoTPL,
                MySwapTPL,
                DayCount,
                InterpType);


    return rSABRVolCurve;

}        








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