exponenta event banner

Ценовые европейские и американские опционы на спред

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

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

max (X1-X2-K,0)

где X1 - цена первого базового актива, X2 - цена второго базового актива, а K - цена страйка. При погашении, если X1-X2 спреда больше цены страйка K, держатель опциона осуществляет опцион и получает разницу между ценой спреда и ценой страйка. Если спред меньше 0, владелец опциона не выполняет опцион, а выплата равна 0. Опционы на спред часто торгуются на энергетическом рынке. Два примера:

  • Распространение трещин: Варианты распределения между нефтепродуктами и сырой нефтью. Разброс представляет собой маржу нефтепереработки, получаемую нефтеперерабатывающим заводом путем «крекинга» сырой нефти в нефтепродукт.

  • Spark spreads: Варианты на разброс между электричеством и некоторым видом топлива. Спред представляет собой запас электростанции, которая берет топливо, чтобы запустить свой генератор для производства электроэнергии.

Обзор методов расчета цен

Существует несколько методов опционов спреда цен, как описано в [1]. Этот пример использует закрытую форму, конечную разницу и моделирование Монте-Карло для вариантов спреда цен. Преимущества и недостатки каждого способа обсуждаются ниже.

  • Решения с закрытой формой и аппроксимации дифференциальных уравнений в частных производных (PDE) выгодны, потому что они очень быстрые и хорошо распространяются на вычислительные чувствительности (греки). Однако решения с закрытой формой доступны не всегда, например, для вариантов американского спреда.

  • Метод конечных разностей - это численная процедура для решения 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'};

Toolbox™ финансовых инструментов содержит два типа приближений закрытой формы для расчета цены и чувствительности европейских вариантов спреда: приближение Кирка (spreadbykirk, spreadsensbykirk) и модель Бьерксунда и Стенсланда (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 вычисляет цены и чувствительность для европейского варианта спреда с использованием модели Бьерксунда и Стенсланда. В [3] Бьерксунд и Стенсланд объясняют, что приближение Кирка имеет тенденцию недооценивать опцию разброса, когда удар близок к нулю, и завышать цену, когда удар дальше от нуля. Для сравнения, модель Bjerksund и Stensland имеет более высокую точность.

% 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

Сравнение рассчитанных цен показывает, что две модели закрытой формы дают сходные результаты по цене и чувствительности. Помимо дельты и гамма, функции также могут вычислять тету, вегу, лямбду и ро.

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

Ценообразование опциона американского спреда

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

Метод конечных разностей численно решает PDE путем дискретизации базовых переменных цены и времени в сетку. Финансовый инструмент 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]. 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];

Результаты аппроксимации Кирка и модели Бьерксунда и Стенсланда сравниваются с численным аппроксимацией метода конечных разностей. С тех пор 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, разница между аппроксимацией Кирка и конечной разницей (красной линией) увеличивается, в то время как разница между моделью Бьерксунда и Стенсланда и конечной разницей (синей линией) остается на одном уровне. Как сказано в [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, можно видеть, что все три модели (Kirk, 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. Для этого анализа используется модель Бьерксунда и Стенсланда.

% 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.

Резюме

В этом примере европейские и американские варианты спреда оцениваются и анализируются с использованием различных методов. Toolbox™ финансовых инструментов предоставляет функции для двух типов решений закрытой формы (Kirk, BJS), метода конечных разниц и метода моделирования Монте-Карло. Решения закрытой формы хорошо подходят для ценообразования и расчета чувствительности европейских вариантов спреда, потому что они быстры. Однако они не могут оценить опционы американского спреда. Метод конечных разниц и метод Монте-Карло могут стоить как европейские, так и американские варианты. Однако они не так быстры в ценообразовании европейских вариантов спреда по сравнению с решениями закрытой формы.

Ссылки

[1] Кармона, Рене, Дуррлеман, Вальдо. «Опционы ценообразования и хеджирования спредов». Обзор СИАМ. Том 45, № 4, 2003, стр. 627-685.

[2] Уилмотт, Пол, Дьюинн, Джефф, Ховисон, Сам. Ценообразование опционов. Оксфордская финансовая пресса, 1993 год.

[3] Бьерксунд, Петтер, Стенсланд, Гуннар. «Закрытая опционная оценка спреда формы». Департамент финансов, NHH, 2006 год.

[4] Лонгстафф, Фрэнсис А, Шварц, Эдуардо С. «Оценка американских вариантов путем моделирования: простой подход с наименьшими квадратами». Андерсонская высшая школа менеджмента, Лос-Анджелес, 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