В этом примере показано, как использовать Numerix® CROSSASSET API, чтобы создать и оценить ванильную европейскую опцию.
Создайте numerixCrossAsset
объект.
c = numerixCrossAsset
c = numerixCrossAsset with properties: Application: [1x1 com.numerix.pro.Application] ApplicationWarning: [1x1 com.numerix.pro.ApplicationWarning]
Создайте и зарегистрируйте данные как матрицу с помощью приложения слоя интегрирования Numerix Cross Asset с помощью applicationMatrix
способ.
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);
Создайте и зарегистрируйте данные кривой выражения с объектом Application. Используйте таблицу в целях оптимального отображения. Даты должны относиться к '01/01/1900', и API слоя интегрирования между активами Numerix поддерживает только представление номера даты. MATLAB® преобразование datetime происходит автоматически, в противном случае номера дат должны быть введены и основаны относительно '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');
Определите соответствующие коэффициенты скидки.
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];
Поддерживаемые имена API слоя интегрирования Numerix Cross Asset DATE
и DISCOUNTFACTOR
для создания данных.
curveData = table(dates,discountFactors,'VariableNames',{'DATE','DISCOUNTFACTOR'}); applicationData(c,'USD_3MLIBOR_CURVE',curveData);
Определите заголовки для регистрации RATESPEC
и DIVSPEC
вызывать объекты.
headers = {'ID','LOCAL ID','TIMER','TIMER CPU','UPDATED'};
Для создания кривой дивидендов требуются данные. Создайте и зарегистрируйте DIVSPEC
вызов объекта с использованием пар "имя-значение" в этом примере.
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');
Создайте EQUITYVOLSPEC
вызов объекта. BYSTRIKEVOLDATA
обозначает объект матрицы волатильности, созданный ранее, используя массив имен и массив значений в этом примере.
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'});
Создайте RATESPEC
вызов объекта. USD_3MLIBOR_CURVE
обозначает объект данных кривой доходности, созданный ранее с использованием пар "имя-значение".
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');
Создайте EuropeanOptionEQ
прибора. Создайте STOCKSPEC
вызов объекта с помощью applicationCall
способ.
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);
Оцените портфель путем создания и регистрации объекта вызова для выполнения анализа цен. Создайте OPTIONSPEC_CLOSEFORM
вызывать заголовки объектов для регистрации OPTIONSPEC_CLOSEFORM
вызов объекта.
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');
Создайте структуру output в MATLAB из объекта Application с помощью getdata
способ.
appData = getdata(c);
Отображение результатов.
[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'
Закройте numerixCrossAsset
объект.
close(c)
applicationCall
| applicationData
| applicationMatrix
| close
| getdata
| numerixCrossAsset