Ценообразование Европейские опции вызова с использованием различных моделей собственного капитала

Этот пример иллюстрирует, как Financial Instruments Toolbox™ используется для оценки европейских опций вызова ванили с помощью различных моделей капитала.

Пример сравнивает цены вызова опции с помощью модели Кокса-Росса-Рубинштейна, модели Лейзена-Реймера и закрытой формулы Блэка-Скоулза.

Определите инструмент вызова

Рассмотрим европейскую опцию вызова с ценой исполнения 30 долларов на 1 января 2010 года. Срок действия опции истекает 1 сентября 2010 года. Предположим, что базовый акции не дает дивидендов. Акции торгуются по $25 и имеют волатильность 35% годовых. Годовая непрерывно повышенная безрисковая ставка составляет 1,11% годовых.

% Option
Settle = 'Jan-01-2010';
Maturity = 'Sep-01-2010';
Strike = 30;
OptSpec = 'call';

% Stock
AssetPrice = 25;   
Sigma = .35;

Создание структуры терминов процентной ставки

StartDates = '01 Jan 2010';          
EndDates =   '01 Jan 2013';
Rates = 0.0111;
ValuationDate = '01 Jan 2010';
Compounding = -1;

RateSpec = intenvset('Compounding',Compounding,'StartDates', StartDates,...
                     'EndDates', EndDates, 'Rates', Rates,'ValuationDate', ValuationDate);

Создание структуры запаса

Предположим, мы хотим создать два сценария. Первый принимает, что AssetPrice в настоящее время составляет $25, опция не из денег (OTM). Второй сценарий предполагает, что опция за деньги (банкомат), и поэтому AssetPriceATM = 30.

AssetPriceATM = 30; 

StockSpec = stockspec(Sigma, AssetPrice);
StockSpecATM = stockspec(Sigma, AssetPriceATM);

Оцените опции с помощью формулы Black-Scholes Closed

Используйте функцию optstockbybls в Financial Instruments Toolbox вычислить цену европейских опций вызова.

% Price the option with AssetPrice = 25
PriceBLS = optstockbybls(RateSpec, StockSpec, Settle, Maturity, OptSpec, Strike);

% Price the option with AssetPrice = 30
PriceBLSATM = optstockbybls(RateSpec, StockSpecATM, Settle, Maturity, OptSpec, Strike);

Создайте дерево Кокса-Росса-Рубинштейна

% Create the time specification of the tree
NumPeriods = 15;

CRRTimeSpec = crrtimespec(ValuationDate, Maturity, NumPeriods);

% Build the tree
CRRTree = crrtree(StockSpec, RateSpec, CRRTimeSpec);
CRRTreeATM = crrtree(StockSpecATM, RateSpec, CRRTimeSpec);

Создайте дерево Лейзена-Реймера

% Create the time specification of the tree
LRTimeSpec = lrtimespec(ValuationDate, Maturity, NumPeriods);

% Use the default method 'PP1' (Peizer-Pratt method 1 inversion)to build
% the tree
LRTree = lrtree(StockSpec, RateSpec, LRTimeSpec, Strike);
LRTreeATM = lrtree(StockSpecATM, RateSpec, LRTimeSpec, Strike);

Оцените опции с помощью модели Кокса-Росса-Рубинштейна (CRR)

PriceCRR = optstockbycrr(CRRTree, OptSpec, Strike, Settle, Maturity); 
PriceCRRATM = optstockbycrr(CRRTreeATM, OptSpec, Strike, Settle, Maturity);

Оцените опции с помощью модели Лейзена-Реймера (LR)

PriceLR = optstockbylr(LRTree, OptSpec, Strike, Settle, Maturity); 
PriceLRATM = optstockbylr(LRTreeATM, OptSpec, Strike, Settle, Maturity);

Сравнение результатов BLS, CRR и LR

sprintf('PriceBLS: \t%f\nPriceCRR: \t%f\nPriceLR:\t%f\n', PriceBLS, ...
    PriceCRR, PriceLR)
ans = 
    'PriceBLS: 	1.275075
     PriceCRR: 	1.294979
     PriceLR:	1.275838
     '

sprintf('\t== ATM ==\nPriceBLS ATM: \t%f\nPriceCRR ATM: \t%f\nPriceLR ATM:\t%f\n', PriceBLSATM, ...
    PriceCRRATM,   PriceLRATM)
ans = 
    '	== ATM ==
     PriceBLS ATM: 	3.497891
     PriceCRR ATM: 	3.553938
     PriceLR ATM:	3.498571
     '

Сходимость моделей CRR и LR к решению BLS

В следующих таблицах сравниваются цены вызова опции с помощью моделей CRR и LR с результатами, полученными формулой Блэка-Скоулза.

В то время как биномиальная модель CRR и модель Блэка-Скоулза сходятся, когда количество временных шагов становится большим, и длина каждого шага становится маленькой, эта сходимость, кроме как в денежных опциях, является ничем, кроме гладкой или равномерной.

Приведенные ниже таблицы показывают, что модель Лейзена-Реймера уменьшает размер ошибки даже с несколькими шагами 45.

Strike = 30, Asset Price = 30

-------------------------------------

#Steps LR CRR

15 3.4986 3.5539

25 3.4981 3.5314

45 3.4980 3.5165

65 3.4979 3.5108

85 3.4979 3.5077

105 3.4979 3.5058

201 3.4979 3.5020

501 3.4979 3.4996

999 3.4979 3.4987

Strike = 30, Asset Price = 25

-------------------------------------

#Steps LR CRR

15 1.2758 1.2950

25 1.2754 1.2627

45 1.2751 1.2851

65 1.2751 1.2692

85 1.2751 1.2812

105 1.2751 1.2766

201 1.2751 1.2723

501 1.2751 1.2759

999 1.2751 1.2756

Анализ эффекта количества периодов на цену опций

Следующие графики показывают, как изменяется сходимость при увеличениях количества шагов в биномиальном вычислении, а также влияние на сходимость изменений в цене акций. Заметьте, что модель Лейзена-Реймера удаляет колебания и выдает оценки, близкие к модели Блэка-Скоулза, используя только небольшое количество шагов.

NPoints = 300;

% Cox-Ross-Rubinstein
NumPeriodCRR  = 5 : 1 : NPoints; 
NbStepCRR     = length(NumPeriodCRR);
PriceCRR = nan(NbStepCRR, 1);
PriceCRRATM = PriceCRR;

for i = 1 : NbStepCRR
    CRRTimeSpec = crrtimespec(ValuationDate, Maturity, NumPeriodCRR(i));
    CRRT = crrtree(StockSpec, RateSpec, CRRTimeSpec);
    PriceCRR(i) = optstockbycrr(CRRT, OptSpec, Strike,ValuationDate, Maturity) ;
    
    CRRTATM = crrtree(StockSpecATM, RateSpec, CRRTimeSpec);
    PriceCRRATM(i) = optstockbycrr(CRRTATM, OptSpec, Strike,ValuationDate, Maturity) ;
end


% Now with Leisen-Reimer
NumPeriodLR  = 5 : 2 : NPoints; 
NbStepLR     = length(NumPeriodLR);
PriceLR = nan(NbStepLR, 1);
PriceLRATM = PriceLR;

for i = 1 : NbStepLR
    LRTimeSpec = lrtimespec(ValuationDate, Maturity, NumPeriodLR(i));
    LRT = lrtree(StockSpec, RateSpec, LRTimeSpec, Strike);
    PriceLR(i) = optstockbylr(LRT, OptSpec, Strike,ValuationDate, Maturity) ;
    
    LRTATM = lrtree(StockSpecATM, RateSpec, LRTimeSpec, Strike);
    PriceLRATM(i) = optstockbylr(LRTATM, OptSpec, Strike,ValuationDate, Maturity) ;
end

Первый сценарий: Out of the Money call option

% For Cox-Ross-Rubinstein
plot(NumPeriodCRR, PriceCRR);
hold on;
plot(NumPeriodCRR, PriceBLS*ones(NbStepCRR,1),'Color',[0 0.9 0], 'linewidth', 1.5);

% For Leisen-Reimer
plot(NumPeriodLR, PriceLR, 'Color',[0.9 0 0], 'linewidth', 1.5);

% Concentrate in the area of interest by clipping on the Y axis at 5x the
% LR Price:
YLimDelta = 5*abs(PriceLR(1) - PriceBLS);
ax = gca;
ax.YLim = [PriceBLS-YLimDelta PriceBLS+YLimDelta];

% Annotate Plot
titleString = sprintf('\nConvergence of CRR and LR models to a BLS Solution (OTM)\nStrike = %d,  Asset Price = %d', Strike , AssetPrice);
title(titleString)
ylabel('Option Price')
xlabel('Number of Steps')
legend('CRR', 'BLS', 'LR', 'Location', 'NorthEast')

Figure contains an axes. The axes with title Convergence of CRR and LR models to a BLS Solution (OTM) Strike = 30, Asset Price = 25 contains 3 objects of type line. These objects represent CRR, BLS, LR.

Второй сценарий: В опции Money call

% For Cox-Ross-Rubinstein
figure;
plot(NumPeriodCRR, PriceCRRATM);
hold on;
plot(NumPeriodCRR, PriceBLSATM*ones(NbStepCRR,1),'Color',[0 0.9 0], 'linewidth', 1.5);

% For Leisen-Reimer
plot(NumPeriodLR, PriceLRATM, 'Color',[0.9 0 0], 'linewidth', 1.5);

% Concentrate in the area of interest by clipping on the Y axis at 5x the
% LR Price:
YLimDelta = 5*abs(PriceLRATM(1) - PriceBLSATM);
ax = gca;
ax.YLim = [PriceBLSATM-YLimDelta PriceBLSATM+YLimDelta];
% Annotate Plot
titleString = sprintf('\nConvergence of CRR and LR models to a BLS Solution (ATM)\nStrike = %d,  Asset Price = %d', Strike , AssetPriceATM);
title(titleString)
ylabel('Option Price')
xlabel('Number of Steps')
legend('CRR', 'BLS', 'LR', 'Location', 'NorthEast')

Figure contains an axes. The axes with title Convergence of CRR and LR models to a BLS Solution (ATM) Strike = 30, Asset Price = 30 contains 3 objects of type line. These objects represent CRR, BLS, LR.

См. также

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Похожие примеры

Подробнее о