Main Content

Numerix CROSSASSET Interface Workflow Example Using Matrix, Data, and Call Objects

This example shows how to use the Numerix® CROSSASSET API to create and price a vanilla European option.

Construct a numerixCrossAsset object for Java® or C++.

For the Java SDK API:

c = numerixCrossAsset 
 c = 

numerixCrossAsset with properties:

Application: [1x1 com.numerix.pro.Application]
ApplicationWarning: [1x1 com.numerix.pro.ApplicationWarning]

For the C++ SDK API on Windows®:

c = numerixCrossAsset(true)
 c = 

numerixCrossAsset with properties:

Application: [1×1 fininst.internal.NumerixCAIL]
ApplicationWarning: []

Create and register data as a Matrix with the Numerix Cross Asset Integration Layer Application using the applicationMatrix method.

rowData = [41992, 42020, 42449, 42905, 43115];
colData = [390, 395, 400, 405];
volData = [0.35778, 0.35132, 0.34394, 0.33582;...
           0.33405, 0.32819, 0.32669, 0.31904;...
           0.31576, 0.31235, 0.30371, 0.30261;...
           0.29391, 0.29366, 0.28962, 0.28932;...
           0.28787, NaN,     0.28347, NaN    ];
applicationMatrix(c,'BYSTRIKEVOLDATA',rowData,colData,volData);

Create and register the yield curve data with the Application object. Use a table for optimal display purposes. Dates must be relative to '01/01/1900' and the Numerix Cross Asset Integration Layer API supports date number representation only. MATLAB® datetime's get converted automatically, otherwise date numbers must be input and based relative to '01/01/1900'.

dates = datetime({'18-Feb-2014';'20-May-2014';'18-Jun-2014';'16-Jul-2014';
                  '20-Aug-2014';'17-Sep-2014';'15-Oct-2014';'19-Nov-2014';
                  '17-Dec-2014';'18-Mar-2015';'17-Jun-2015';'16-Sep-2015';
                  '16-Dec-2015';'16-Mar-2016';'15-Jun-2016';'21-Sep-2016';
                  '21-Dec-2016';'15-Mar-2017';'20-Feb-2018';'20-Feb-2019';
                  '20-Feb-2020';'22-Feb-2021';'22-Feb-2022';'21-Feb-2023';
                  '20-Feb-2024';'20-Feb-2025';'20-Feb-2026';'20-Feb-2029';
                  '21-Feb-2034';'22-Feb-2039';'22-Feb-2044';'20-Feb-2054';
                  '20-Feb-2064'},'locale','en_US');

Define the corresponding discount factors.

discountFactors = [1;0.99942;0.999231;0.999037;0.998797;0.998616;0.998385;...
                  0.998122;0.997941;0.997159;0.996157;0.994825;0.993065;...
                  0.99078;0.987889;0.984092;0.979913;0.975459;0.952707;...
                  0.922223;0.888128;0.852291;0.816462;0.781228;0.746677;...
                  0.712892;0.680462;0.592285;0.474003;0.383493;0.312617;...
                  0.213809;0.152345];

Supported Numerix Cross Asset Integration Layer API names are DATE and DISCOUNTFACTOR for the creation of the data.

curveData = table(dates,discountFactors,'VariableNames',{'DATE','DISCOUNTFACTOR'});
applicationData(c,'USD_3MLIBOR_CURVE',curveData);

Define the headers for registering the RATESPEC and DIVSPEC call objects.

headers = {'ID','LOCAL ID','TIMER','TIMER CPU','UPDATED'};

Data is required to create dividend curve. Create and register the DIVSPEC call object using name-value pairs in this example.

applicationCall(c,headers,'ID','DIVSPEC','OBJECT','MARKET DATA','TYPE','DIVIDEND',...
                  'COMMENT','Comments here','SKIP',false,'NOWDATE',41688,...
                  'CURRENCY','USD','RATE/DIVIDEND',0,'BASIS','ACT/360');

Create the EQUITYVOLSPEC call object. BYSTRIKEVOLDATA denotes the volatility matrix object created previously, using an array of names and an array of values in this example.

applicationCall(c,headers,{'ID','OBJECT','TYPE','COMMENT','SKIP','NOWDATE','CURRENCY','VOLATILITYBASIS',...
                           'DATA','INTERPMETHOD','INTERPVARIABLE','EXTRAPOLATION'},...
                          {'EQVOLSPEC','MARKET DATA','EQ VOL','Comments here',...
                           false,41688,'USD','ACT/360','BYSTRIKEVOLDATA',...
                           'LINEAR','VOL','FLAT EXTRAPOLATION'});

Create the RATESPEC call object. USD_3MLIBOR_CURVE denotes yield curve data object created previously using name-value pairs.

applicationCall(c,headers,'ID','RATESPEC','OBJECT','MARKET DATA','TYPE','YIELD','COMMENT','Comments here',...
                  'SKIP',false,'INTERPMETHOD','LogLinear','INTERPVARIABLE','DF',...
                  'CURRENCY','USD','DATA','USD_3MLIBOR_CURVE','BASIS','ACT/360');

Create the EuropeanOptionEQ instrument. Create the STOCKSPEC call object using the applicationCall method.

applicationCall(c,headers,'ID','STOCKSPEC','OBJECT','INSTRUMENT','TYPE','EQ EUROPEAN',...
                  'COMMENT','Comments here','SKIP',false,'FLAVOR','PUT',...
                  'CURRENCY','USD','ENDDATE',43976,'SETTLEMENTDATE',43976,...
                  'STRIKE',112,'SIGMA1',0.2,'NOTIONAL',100);

Price the portfolio by creating and registering call object to run pricing analytics. Create the OPTIONSPEC_CLOSEFORM call object headers for registering the OPTIONSPEC_CLOSEFORM call object.

headers = {'ATM','DELTA','DELTA TRADER','FORWARD DELTA','FORWARD DELTA TRADER', ...
           'FUTURES DELTA','FUTURES DELTA TRADER','GAMMA','GAMMA TRADER', ...
           'ID','LOCAL ID','NOTIONAL','PRICE','PV','RHO','RHO TRADER', ...
           'SIGMA1','STRIKE','THETA','TIMER','TIMER CPU','UPDATED','VANNA', ...
           'VANNA TRADER','VEGA','VEGA TRADER','VOLGA','VOLGA TRADER'};

applicationCall(c,headers,'ID','OPTIONSPEC_CLOSEFORM','OBJECT','ANALYTIC',...
                  'TYPE','EUROPEAN OPTION','COMMENT','Comments here',...
                  'SKIP',false,'NOWDATE',41688,'OPTION','STOCKSPEC',...
                  'DIVIDENDCURVE','DIVSPEC','DOMESTICYIELDCURVE','RATESPEC',...
                  'SPOTPRICE',112,'SPOTDATE',41688,'MODEL','BLACK');

Create an output structure in MATLAB from the Application object using the getdata method.

appData = getdata(c);

Display the results.

[appData.OPTIONSPEC_CLOSEFORM.OUTPUT_HEADERS 
appData.OPTIONSPEC_CLOSEFORM.OUTPUT_VALUES]
ans =
 
  28×2 cell array
 
    'PRICE'                   [             1467.24]
    'PV'                      [             1467.24]
    'DELTA'                   [              -30.54]
    'FORWARD DELTA'           [              -30.54]
    'FUTURES DELTA'           [              -26.83]
    'GAMMA'                   [                0.62]
    'VEGA'                    [             9827.91]
    'VOLGA'                   [              205.45]
    'VANNA'                   [               -1.44]
    'DELTA TRADER'            [              -34.20]
    'FORWARD DELTA TRADER'    [              -34.20]
    'FUTURES DELTA TRADER'    [              -30.05]
    'GAMMA TRADER'            [                0.78]
    'VEGA TRADER'             [               98.28]
    'VOLGA TRADER'            [                0.02]
    'VANNA TRADER'            [               -0.02]
    'SIGMA1'                  [                0.20]
    'STRIKE'                  [              112.00]
    'NOTIONAL'                [              100.00]
    'RHO'                     [           -30638.08]
    'THETA'                   [               -0.15]
    'RHO TRADER'              [               -3.06]
    'ATM'                     [              127.48]
    'UPDATED'                 '12 @ 01:37:24 PM'    
    'ID'                      'OPTIONSPEC_CLOSEFORM'
    'TIMER'                   [                0.17]
    'TIMER CPU'               [                0.06]
    'LOCAL ID'                'OPTIONSPEC_CLOSEFORM' 

Close the numerixCrossAsset object.

close(c)

See Also

| | | | |

External Websites