Оценка европейских колл-опционов Используя различные модели акции

Этот пример иллюстрирует, как 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). Второй сценарий принимает, что опция является на уровне денег (ATM), и поэтому AssetPriceATM= 30 .

AssetPriceATM = 30; 

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

Оцените опции Используя закрытую формулу Блэка-Шоулза

Используйте функциональный 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 и модель Black-Scholes сходятся, когда количество временных шагов становится большим, и длина каждого шага становится маленькой, эта сходимость, за исключением по денежным опциям, совсем не является гладкой или универсальна.

Приведенные ниже таблицы показывают, что модель Лайзена-Раймера уменьшает размер ошибки с как раз когда немного шагов 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

Анализируйте Эффект Количества Периодов на Цене Опций

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

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

Первый сценарий: Из Денежного колл-опциона

% 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')

Второй сценарий: По Денежному колл-опциону

% 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')

Для просмотра документации необходимо авторизоваться на сайте