Этот пример иллюстрирует, как 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);
Используйте функцию 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);
PriceCRR = optstockbycrr(CRRTree, OptSpec, Strike, Settle, Maturity); PriceCRRATM = optstockbycrr(CRRTreeATM, OptSpec, Strike, Settle, Maturity);
PriceLR = optstockbylr(LRTree, OptSpec, Strike, Settle, Maturity); PriceLRATM = optstockbylr(LRTreeATM, OptSpec, Strike, Settle, Maturity);
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 с результатами, полученными формулой Блэка-Скоулза.
В то время как биномиальная модель 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')
Второй сценарий: В опции 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')
asianbykv
| asianbylevy
| asianbyls
| asiansensbykv
| asiansensbylevy
| asiansensbyls
| assetbybls
| assetsensbybls
| basketbyju
| basketbyls
| basketsensbyju
| basketsensbyls
| basketstockspec
| basketstockspec
| cashbybls
| cashsensbybls
| chooserbybls
| gapbybls
| gapsensbybls
| impvbybjs
| impvbyblk
| impvbybls
| impvbyrgw
| lookbackbycvgsg
| lookbackbyls
| lookbacksensbycvgsg
| lookbacksensbyls
| maxassetbystulz
| maxassetsensbystulz
| minassetbystulz
| minassetsensbystulz
| optpricebysim
| optstockbybjs
| optstockbyblk
| optstockbybls
| optstockbyls
| optstockbyrgw
| optstocksensbybaw
| optstocksensbybjs
| optstocksensbyblk
| optstocksensbybls
| optstocksensbyls
| optstocksensbyrgw
| spreadbybjs
| spreadbykirk
| spreadbyls
| spreadsensbybjs
| spreadsensbykirk
| spreadsensbyls
| supersharebybls
| supersharesensbybls