В этом примере показано, как оценить и вычислить чувствительность для европейских и американских опций распространения с помощью различных методов. Во-первых, цена и чувствительность для европейской опции распространения вычисляются с помощью закрытых решений для формы. Затем цена и чувствительность для американской опции распространения вычисляются с помощью конечной разности и симуляций Монте-Карло. Наконец, последующий анализ проводится на опциях распространения с различной областью значений входных параметров.
Распространитесь опции являются опциями на различии двух цен базового актива. Например, колл-опцион на распространении между двумя активами имеет следующую выплату в зрелости:
где цена первого базового актива, цена второго базового актива, и цена исполнения опциона. В зрелости, если распространение больше цены исполнения опциона , держатель опции осуществляет опцию и получает различие между распространением и ценой исполнения опциона. Если распространение меньше 0, держатель опции не осуществляет опцию, и выплата 0. Распространитесь опции часто продаются энергетическим рынком. Два примера:
Взломанные распространения: Опции на распространении между усовершенствованными нефтепродуктами и сырой нефтью. Распространение представляет поле улучшения, сделанное нефтеперерабатывающим заводом путем "взламывания" сырой нефти в усовершенствованный нефтепродукт.
Распространения Spark: Опции на распространении между электричеством и некоторым типом топлива. Распространение представляет поле электростанции, которая берет топливо, чтобы запустить его генератор, чтобы выработать электроэнергию.
Существует несколько методов, чтобы оценить опции распространения, как обсуждено в [1]. Этот пример использует закрытую форму, конечную разность и симуляции Монте-Карло, чтобы оценить опции распространения. Преимущества и недостатки каждого метода обсуждены ниже:
Закрытые решения для формы и приближения дифференциальных уравнений с частными производными (PDE) выгодны, потому что они очень быстры, и расширяют хорошо к вычислительной чувствительности (греки). Однако закрытые решения для формы не всегда доступны, например, для американских опций распространения.
Метод конечной разности является числовой процедурой, чтобы решить УЧП путем дискретизации цены и переменных времени в сетку. Детальный анализ этого метода может быть найден в [2]. Это может обработать случаи, где закрытые решения для формы не доступны. Кроме того, конечная разность расширяет хорошо к вычислению чувствительности, потому что это выводит сетку цен опции за область значений базовых цен и времена. Однако это медленнее, чем закрытые решения для формы.
Симуляция Монте-Карло использует случайную выборку, чтобы симулировать перемещения цен базового актива. Это обрабатывает случаи, где закрытые решения не существуют. Однако обычно требуется много времени, чтобы запуститься, особенно если чувствительность вычисляется.
Следующий пример демонстрирует оценку взломанной опции распространения.
Установка для очистки касается своего предстоящего графика обслуживания и должна защитить от уменьшающихся цен на сырую нефть и увеличивающий нагревающиеся цены на нефть. Во время обслуживания установка для очистки должна продолжить предоставлять клиентам мазут, чтобы удовлетворить их требованиям. Стратегия установки для очистки состоит в том, чтобы использовать опции распространения, чтобы управлять его преградой.
На январе 2013 установка для очистки покупает 1:1 взломанная опция распространения путем покупки нагревающий нефтяные фьючерсы и продающий фьючерсы сырой нефти. Фьючерсы CLF14 WTI сырой нефти на уровне 100$ за баррель, и HOF14, нагревающий нефтяной фьючерсный контракт, на уровне 2,6190$ за галлон.
clear; % Price, volatility, and dividend of heating oil Price1gallon = 2.6190; % $/gallon Price1 = Price1gallon*42; % $/barrel Vol1 = 0.10; Div1 = 0.03; % Price, volatility, and dividend of WTI crude oil Price2 = 100; % $/barrel Vol2 = 0.15; Div2 = 0.02; % Correlation of underlying prices Corr = 0.3; % Option type OptSpec = 'call'; % Strike Strike = 5; % Settlement date Settle = '01-Jan-2013'; % Maturity Maturity = '01-Jan-2014'; % Risk free rate RiskFreeRate = 0.05;
Функции оценки берут структуру термина процентной ставки и структуру запаса как входные параметры. Кроме того, необходимо задать, который выходные параметры представляют интерес.
% Define RateSpec Compounding = -1; Basis = 1; RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rates', RiskFreeRate, 'Compounding', ... Compounding, 'Basis', Basis); % Define StockSpec for the two assets StockSpec1 = stockspec(Vol1, Price1, 'Continuous', Div1); StockSpec2 = stockspec(Vol2, Price2, 'Continuous', Div2); % Specify price and sensitivity outputs OutSpec = {'Price', 'Delta', 'Gamma'};
Financial Instruments Toolbox™ содержит два типа закрытых приближений формы для вычисления цены и чувствительности европейских опций распространения: приближение Кирка (spreadbykirk
, spreadsensbykirk
) и модель Bjerksund и Stensland (spreadbybjs
, spreadsensbybjs
) [3].
Функциональный spreadsensbykirk
вычисляет цены и чувствительность для европейской опции распространения с помощью приближения Кирка.
% Kirk's approximation [PriceKirk, DeltaKirk, GammaKirk] = ... spreadsensbykirk(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec)
PriceKirk = 8.3636
DeltaKirk = 1×2
0.6108 -0.5590
GammaKirk = 1×2
0.0225 0.0249
Функциональный spreadsensbybjs
вычисляет цены и чувствительность для европейской опции распространения с помощью модели Bjerksund и Stensland. В [3], Бджерксанд и Стенслэнд объясняет, что приближение Кирка имеет тенденцию занижать опцию распространения, когда забастовка близко к нулю и завышенной цене, когда забастовка еще дальше от нуля. В сравнении модель Бджерксанда и Стенслэнда имеет более высокую точность.
% Bjerksund and Stensland model [PriceBJS, DeltaBJS, GammaBJS] = ... spreadsensbybjs(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec)
PriceBJS = 8.3662
DeltaBJS = 1×2
0.6115 -0.5597
GammaBJS = 1×2
0.0225 0.0248
Сравнение расчетных цен показывает, что две закрытых модели формы приводят к подобным результатам за цену и чувствительность. В дополнение к дельте и гамме, функции могут также вычислить тету, vega, lambda и ро.
displayComparison('Kirk', 'BJS', PriceKirk, PriceBJS, DeltaKirk, DeltaBJS, GammaKirk, GammaBJS)
Comparison of prices: Kirk: 8.363641 BJS : 8.366158 Comparison of delta: Kirk: 0.610790 -0.558959 BJS : 0.611469 -0.559670 Comparison of gamma: Kirk: 0.022533 0.024850 BJS : 0.022495 0.024819
Несмотря на то, что закрытым приближениям формы быстро и хорошо удовлетворяют для оценки европейских опций распространения, они не могут оценить американские опции распространения. Используя метод конечной разности и Метод Монте-Карло, может быть оценена американская опция распространения. В этом примере американская опция распространения оценена с теми же атрибутами как вышеупомянутая взломанная опция распространения.
Метод конечной разности численно решает УЧП путем дискретизации базовой цены и переменных времени в сетку. Финансовый инструмент Toolbox™ содержит функции spreadbyfd
и spreadsensbyfd
, которые вычисляют цены и чувствительность для европейских и американских опций распространения с помощью метода конечной разности. Для метода конечной разности состав сетки оказывает большое влияние на качество выхода и время выполнения. Обычно точно дискретизированная сетка приведет к выходным параметрам, которые ближе к теоретическому значению, но это прибывает за счет более длительных времен выполнения. Составом сетки управляют с помощью дополнительных параметров PriceGridSize
, TimeGridSize
, AssetPriceMin
и AssetPriceMax
.
Чтобы указать на оценку американской опции, добавьте дополнительный вход AmericanOpt
со значением 1
к аргументу функции.
% Finite difference method for American spread option [PriceFD, DeltaFD, GammaFD, PriceGrid, AssetPrice1, ... AssetPrice2] = ... spreadsensbyfd(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec, ... 'PriceGridSize', [500 500], 'TimeGridSize', 100, ... 'AssetPriceMin', [0 0], 'AssetPriceMax', [2000 2000], ... 'AmericanOpt', 1); % Display price and sensitivities PriceFD
PriceFD = 8.5463
DeltaFD
DeltaFD = 1×2
0.6306 -0.5777
GammaFD
GammaFD = 1×2
0.0233 0.0259
Функциональный spreadsensbyfd
также возвращает сетку, которая содержит цены опции за область значений базовых цен и времена. Сетка цен опции в начальный момент времени, который является ценами опции в уладить дату, может быть построена для области значений базовых цен.
% Plot option prices figure; mesh(AssetPrice1, AssetPrice2, PriceGrid(:, :, 1)'); title('American Spread Option Prices for Range of Underlying Prices'); xlabel('Price of underlying asset 1'); ylabel('Price of underlying asset 2'); zlabel('Price of spread option');
Американский параметр стиля может быть оценен Методами Монте-Карло с помощью метода наименьшего квадрата Лонгстэффа и Шварца [4]. Financial Instruments Toolbox™ содержит функции spreadbyls
и spreadsensbyls
, это вычисляет цены и чувствительность европейских и американских опций с помощью симуляций. Метод симуляции Монте-Карло в spreadsensbyls
генерирует разнообразные пути симуляций согласно геометрическому броуновскому движению (GBM) за две цены базового актива. Подобно методу конечной разности, где гранулярность сетки определила качество выхода и время выполнения, качество выхода и время выполнения симуляции Монте-Карло зависит от количества путей (NumTrials
) и количество периодов времени на путь (NumPeriods
). Кроме того, результаты, полученные симуляциями Монте-Карло, не детерминированы. Каждый запуск будет иметь различные результаты в зависимости от результатов симуляции.
% To indicate that we are pricing an American option using the Longstaff % and Schwartz method, add an optional input of |AmericanOpt| with a value % of |1| to the argument of the function. % Monte Carlo method for American spread option [PriceMC, DeltaMC, GammaMC] = ... spreadsensbyls(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec, ... 'NumTrials', 1000, 'Antithetic', true, 'AmericanOpt', 1)
PriceMC = 8.4999
DeltaMC = 1×2
0.6325 -0.5931
GammaMC = 1×2
-0.0873 0.0391
Результаты этих двух моделей сравнены. Цены и чувствительность, вычисленная методом Лонгстэффа и Шварца, будут варьироваться при каждом запуске, в зависимости от результата симуляций. Важно отметить, что качество результатов метода конечной разности и симуляции Монте-Карло зависит от дополнительных входных параметров. Например, увеличивая число путей (NumTrials
) для spreadsensbyls
функция приведет к более точным результатам за счет более длительных времен выполнения.
displayComparison('Finite Difference', 'Monte Carlo', PriceFD, PriceMC, DeltaFD, DeltaMC, GammaFD, GammaMC)
Comparison of prices: Finite Difference: 8.546285 Monte Carlo : 8.499894 Comparison of delta: Finite Difference: 0.630606 -0.577686 Monte Carlo : 0.632549 -0.593106 Comparison of gamma: Finite Difference: 0.023273 0.025852 Monte Carlo : -0.087340 0.039120
Как обсуждено ранее, приближение Кирка стремится к опциям распространения завышенной цены, когда забастовка еще дальше от нуля. Чтобы подтвердить это, опция распространения оценена с теми же атрибутами как прежде, но для области значений цен исполнения опциона.
% Specify outputs OutSpec = {'Price', 'Delta'}; % Range of strike prices Strike = [-25; -15; -5; 0; 5; 15; 25];
Результаты приближения Кирка и модели Bjerksund и Stensland сравнены с числовым приближением из метода конечной разности. Начиная с spreadsensbyfd
может только оценить одну опцию за один раз, она называется в цикле для каждого значения забастовки. Симуляция Монте-Карло (spreadsensbyls
) с большим количеством испытательных путей может также использоваться в качестве сравнительного теста, но конечная разность используется в этом примере.
% Kirk's approximation [PriceKirk, DeltaKirk] = ... spreadsensbykirk(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec); % Bjerksund and Stensland model [PriceBJS, DeltaBJS] = ... spreadsensbybjs(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec); % Finite difference PriceFD = zeros(numel(Strike), 1); DeltaFD = zeros(numel(Strike), 2); for i = 1:numel(Strike) [PriceFD(i), DeltaFD(i,:)] = ... spreadsensbyfd(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike(i), Corr, 'OutSpec', OutSpec, ... 'PriceGridSize', [500 500], 'TimeGridSize', 100, ... 'AssetPriceMin', [0 0], 'AssetPriceMax', [2000 2000]); end displayComparisonPrices(PriceKirk, PriceBJS, PriceFD, Strike)
Prices for range of strikes: Kirk BJS FD 32.707787 32.672353 32.676040 23.605307 23.577099 23.580307 15.236908 15.228510 15.230919 11.560332 11.560332 11.562023 8.363641 8.366158 8.367212 3.689909 3.678862 3.680493 1.243753 1.219079 1.221866
Различие в ценах между закрытой формой и методом конечной разности построено ниже. Ясно, что, когда забастовка перемещается еще дальше от 0, различие между приближением Кирка и конечной разностью (красная линия) увеличения, в то время как различие между моделью Bjerksund и Stensland и конечной разностью (синяя линия) остается на том же уровне. Как утверждено в [3], приближение Кирка является назначением завышенной цены опция распространения, когда забастовка далеко от 0.
% Plot of difference in price against the benchmark figure; plot(PriceKirk-PriceFD, 'Color', 'red'); hold on; plot(PriceBJS-PriceFD, 'Color', 'blue'); hold off; title('Difference in Price Against Finite Difference'); legend('Kirk', 'BJS', 'Location', 'EastOutside'); xlabel('Strike'); ax = gca; ax.XTickLabel = Strike; ylabel('Difference in Price');
Затем различие в дельте между закрытыми моделями формы и конечной разностью построено. Главный график показывает различие в дельте для первого актива, и нижний график показывает различие в дельте для второго актива. Как замечено по маленькому шагу в оси Y порядка 10e-3, это видно, что все три модели (Кирк, BJS, конечная разность) производят подобные значения для дельты.
% Plot of difference in delta of first asset against the benchmark figure; subplot(2, 1, 1); plot(DeltaKirk(:,1)-DeltaFD(:,1), 'Color', 'red'); hold on; plot(DeltaBJS(:,1)-DeltaFD(:,1), 'Color', 'blue'); hold off; title('Difference in Delta (Asset 1) Against FD'); legend('Kirk', 'BJS', 'Location', 'EastOutside'); xlabel('Strike'); ax = gca; ax.XTickLabel = Strike; ylabel('Difference in Delta'); % Plot of difference in delta of second asset against the benchmark subplot(2, 1, 2); plot(DeltaKirk(:,2)-DeltaFD(:,2), 'Color', 'red'); hold on; plot(DeltaBJS(:,2)-DeltaFD(:,2), 'Color', 'blue'); hold off; title('Difference in Delta (Asset 2) Against FD'); legend('Kirk', 'BJS', 'Location', 'EastOutside'); xlabel('Strike'); ax = gca; ax.XTickLabel = Strike; ylabel('Difference in Delta');
Чтобы далее показать тип анализа, который может быть проведен с помощью этих моделей, вышеупомянутая опция распространения оценена на разных уровнях энергозависимости для первого актива. Цена и vega сравнены на трех уровнях энергозависимости для первого актива: 0.1
, 0.3, и
0.5
. Модель Bjerksund и Stensland используется в этом анализе.
% Strike Strike = 5; % Specify output OutSpec = {'Price', 'Vega'}; % Different levels of volatility for asset 1 Vol1 = [0.1, 0.3, 0.5]; StockSpec1 = stockspec(Vol1, Price1, 'Continuous', Div1); % Bjerksund and Stensland model [PriceBJS, VegaBJS] = ... spreadsensbybjs(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec); displaySummary(Vol1, PriceBJS, VegaBJS)
Prices for different vol levels in asset 1: 8.366158 14.209112 21.795746 Asset 1 vega for different vol levels in asset 1: 15.534849 36.212192 38.794348 Asset 2 vega for different vol levels in asset 1: 29.437036 7.133657 -0.557852
Изменение в цене и vega относительно энергозависимости первого актива построено ниже. Можно заметить, что, когда энергозависимость первого актива увеличивается, цена опции распространения также увеличивается. Кроме того, изменения в vega указывают, что цена опции распространения становится более чувствительной к энергозависимости первого актива и менее чувствительной к энергозависимости второго актива.
figure; % Plot price for BJS model subplot(2, 1, 1); plot(PriceBJS, 'Color', 'red'); title('Price (BJS)'); legend('Price', 'Location', 'EastOutside'); xlabel('Vol of Asset 1'); ax = gca; ax.XTick = 1:3; ax.XTickLabel = Vol1; ylabel('Price'); % Plot of vega for BJS model subplot(2, 1, 2); plot(VegaBJS(:,1), 'Color', 'red'); hold on; plot(VegaBJS(:,2), 'Color', 'blue'); hold off; title('Vega (BJS)'); legend('Asset 1', 'Asset 2', 'Location', 'EastOutside'); xlabel('Vol of Asset 1'); ax = gca; ax.XTick = 1:3; ax.XTickLabel = Vol1; ax.YLim = [-1 40]; ylabel('Vega');
В этом примере европейские и американские опции распространения оценены и анализировали использующие различные методы. Financial Instruments Toolbox™ обеспечивает функции для двух типов закрытых решений для формы (Кирк, BJS), метод конечной разности и метод симуляции Монте-Карло. Закрытые решения для формы хорошо подходят для оценки и вычисления чувствительности европейских опций распространения, потому что они быстры. Однако они не могут оценить американские опции распространения. Метод конечной разности и Метод Монте-Карло могут оценить и европейские и американские опции. Однако они не так быстры в оценке европейских опций распространения по сравнению с закрытыми решениями для формы.
[1] Кармона, Рене, Деррлмен, Valdo. "Оценивая и Страхуя Опции Распространения". Анализ SIAM. Издание 45, № 4, 2003, стр 627-685.
[2] Wilmott, Пол, Dewynne, Джефф, Хоуисон, Сэм. Оценка опции. Оксфорд финансовое нажатие, 1993.
[3] Bjerksund, Питер, Stensland, Ганнэр. "Закрытая форма распространила оценку опции". Отдел Финансов, NHH, 2006.
[4] Longstaff, Фрэнсис А, Шварц, Эдуардо С. "Оценка американских опций симуляцией: простой подход наименьших квадратов". Аспирантура Андерсона управления, UC Лос-Анджелес, 2001.
function displayComparison(model1, model2, price1, price2, delta1, delta2, gamma1, gamma2) % Pad the model name with additional spaces additionalSpaces = numel(model1) - numel(model2); if additionalSpaces > 0 model2 = [model2 repmat(' ', 1, additionalSpaces)]; else model1 = [model1 repmat(' ', 1, abs(additionalSpaces))]; end % Comparison of calculated prices fprintf('Comparison of prices:\n'); fprintf('\n'); fprintf('%s: % f\n', model1, price1); fprintf('%s: % f\n', model2, price2); fprintf('\n'); % Comparison of Delta fprintf('Comparison of delta:\n'); fprintf('\n'); fprintf('%s: % f % f\n', model1, delta1(1), delta1(2)); fprintf('%s: % f % f\n', model2, delta2(1), delta2(2)); fprintf('\n'); % Comparison of Gamma fprintf('Comparison of gamma:\n'); fprintf('\n'); fprintf('%s: % f % f\n', model1, gamma1(1), gamma1(2)); fprintf('%s: % f % f\n', model2, gamma2(1), gamma2(2)); fprintf('\n'); end function displayComparisonPrices(PriceKirk, PriceBJS, PriceFD, Strike) % Comparison of calculated prices fprintf('Prices for range of strikes:\n'); fprintf('\n') fprintf('Kirk \tBJS \tFD \n'); for i = 1:numel(Strike) fprintf('%f\t%f\t%f\n', PriceKirk(i), PriceBJS(i), PriceFD(i)); end end function displaySummary(Vol1, PriceBJS, VegaBJS) % Display price fprintf('Prices for different vol levels in asset 1:\n'); fprintf('\n'); for i = 1:numel(Vol1) fprintf('%f\n', PriceBJS(i)); end fprintf('\n'); % Display vega for first asset fprintf('Asset 1 vega for different vol levels in asset 1:\n'); fprintf('\n'); for i = 1:numel(Vol1) fprintf('%f\n', VegaBJS(i,1)); end fprintf('\n'); % Display vega for second asset fprintf('Asset 2 vega for different vol levels in asset 1:\n'); fprintf('\n'); for i = 1:numel(Vol1) fprintf('%f\n', VegaBJS(i,2)); end end