Ценообразование Европейские и Американские Опции Спреда

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

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

max(X1-X2-K,0)

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

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

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

Обзор методов ценообразования

Существует несколько методов ценового спреда- опций, как обсуждается в [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'};

Financial Instruments Toolbox™ содержит два типа приближений закрытой формы для вычисления цены и чувствительности европейских опций спреда: приближение Кирка (spreadbykirk, spreadsensbykirk) и модель Бьерксунда и Стенсленда (spreadbybjs, spreadsensbybjs) [3].

Функция spreadsensbykirk вычисляет цены и чувствительность для европейского спреда опции используя приближение Kirk's.

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

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

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.

Американская опция стиля может быть оценена методами Монте-Карло с помощью метода наименьших квадратов Longstaff и Schwartz [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];

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

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

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

Изменение цены и веги в отношении волатильности первого актива показано ниже. Можно заметить, что по мере увеличения волатильности первого актива увеличивается и цена опции спреда. Также изменения в веге свидетельствуют о том, что цена опция становится более чувствительной к волатильности первого актива и менее чувствительной к волатильности второго актива.

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™ обеспечивает функции для двух типов решений закрытой формы (Kirk, BJS), метод конечного различия и метод симуляции Монте-Карло. Решения закрытой формы хорошо подходят для расчета цен и чувствительности европейских опций спреда, потому что они быстрые. Однако они не могут оценить американские опции спреда. Метод конечного различия и метод Монте-Карло могут стоить как европейские так и американские опции. Тем не менее, они не так быстро ценят европейские опции спреда по сравнению с закрытыми формами решений.

Ссылки

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

[2] Уилмотт, Пол, Дьюин, Джефф, Ховисон, Сам. опционное ценообразование. Oxford Financial Press, 1993.

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

[4] Longstaff, Francis A, Schwartz, Eduardo S. «Оценка американских опций по симуляции: простой подход методом наименьших квадратов». Высшая школа управления Андерсона, Калифорния Лос-Анджелес, 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