Оценка европейских и американских опций распространения

В этом примере показано, как оценить и вычислить чувствительность для европейских и американских опций распространения с помощью различных методов. Во-первых, цена и чувствительность для европейской опции распространения вычисляются с помощью закрытых решений для формы. Затем цена и чувствительность для американской опции распространения вычислены с помощью конечной разности и симуляций Монте-Карло. Наконец, последующий анализ проводится на опциях распространения с различной областью значений входных параметров.

Распространитесь опции являются опциями на различии двух цен базового актива. Например, колл-опцион на распространении между двумя активами имеет следующую выплату в зрелости:

max(X1-X2-K,0)

где X1 цена первого базового актива, X2 цена второго базового актива, и K цена исполнения опциона. В зрелости, если распространение X1-X2 больше цены исполнения опциона K, держатель опции осуществляет опцию и получает различие между распространением и ценой исполнения опциона. Если распространение меньше 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

Сравнение расчетных цен показывает, что две закрытых модели формы приводят к подобным результатам за цену и чувствительность. В дополнение к дельте и гамме, функции могут также вычислить theta, 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');

Figure contains an axes. The axes with title American Spread Option Prices for Range of Underlying Prices contains an object of type surface.

Американский параметр стиля может быть оценен Методами Монте-Карло с помощью метода наименьшего квадрата Лонгстэффа и Шварца [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');

Figure contains an axes. The axes with title Difference in Price Against Finite Difference contains 2 objects of type line. These objects represent Kirk, BJS.

Затем различие в дельте между закрытыми моделями формы и конечной разностью построено. Главный график показывает различие в дельте для первого актива, и нижний график показывает различие в дельте для второго актива. Как замечено по маленькому шагу в оси 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');

Figure contains 2 axes. Axes 1 with title Difference in Delta (Asset 1) Against FD contains 2 objects of type line. These objects represent Kirk, BJS. Axes 2 with title Difference in Delta (Asset 2) Against FD contains 2 objects of type line. These objects represent Kirk, BJS.

Анализ цен и Веги на разных уровнях энергозависимости

Чтобы далее показать тип анализа, который может быть проведен с помощью этих моделей, вышеупомянутая опция распространения оценена на разных уровнях энергозависимости для первого актива. Цена и 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');

Figure contains 2 axes. Axes 1 with title Price (BJS) contains an object of type line. This object represents Price. Axes 2 with title Vega (BJS) contains 2 objects of type line. These objects represent Asset 1, Asset 2.

Сводные данные

В этом примере европейские и американские опции распространения оценены и анализировали использующие различные методы. 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