В этом примере показано, как оценить вариант качели с помощью моделирования Монте-Карло и метода Лонгстафа-Шварца. Нейтральное с точки зрения риска моделирование базовой цены на природный газ проводится с использованием модели возврата среднего значения. Результаты моделирования используются для определения цены опции качели на основе метода Лонгстаффа-Шварца [6]. Этот подход использует метод регрессии для аппроксимации значения продолжения опции. Для соответствия регрессии выполняется сравнение полинома и сплайна. Наконец, полученные цены анализируются с учетом более низких и верхних ценовых границ, полученных из стандартных европейских и американских вариантов.
Подменные опционы - популярные финансовые инструменты на энергетическом рынке, которые обеспечивают гибкость в объеме поставляемого актива. Чтобы потребители энергии могли защитить себя от колебаний цен на энергию, они хотят заблокировать цену, приобретая форвардный контракт, называемый форвардным контрактом с базовой нагрузкой. Однако потребители не знают точно, сколько энергии будет использоваться в будущем, и энергетические товары, такие как электричество и газ, не могут быть легко сохранены. Поэтому потребителю требуется гибкость для изменения количества энергии, доставляемой на каждую дату поставки. Варианты качания обеспечивают такую гибкость. Таким образом, полный контракт состоит из двух частей: форвардного контракта с базовой нагрузкой и опционного компонента swing.
Варианты свопинга, как правило, являются внебиржевыми (внебиржевыми) контрактами, которые могут быть сильно настроены. Поэтому существует множество различных типов ограничений и штрафов (подробнее см. [5]). В этом примере используется опция «Swing», где единственным ограничением является ежедневный объем, известный как ежедневное количество по контракту (Daily Contract Quantity, DCQ). При реализации права качания объем не может быть ниже минимального DCQ (minDCQ) или превысить максимальный DCQ (maxDCQ).
Существует несколько методов определения цен на варианты раскачки, таких как конечные различия, моделирование и динамическое программирование на основе деревьев [5]. В этом примере используется основанный на моделировании подход с методом Лонгстафа-Шварца. Преимущество основанного на моделировании подхода заключается в том, что динамика, используемая для моделирования базовой цены основного средства, отделена от алгоритма ценообразования. В методах, основанных на конечных различиях и деревьях, алгоритм ценообразования должен быть изменен, чтобы учитывать ценообразование с другой базовой динамикой цен.
В этом примере в качестве основного актива используется природный газ со следующей динамикой возврата к среднему значению [8]:
где - стандартное броуновское движение. Применение леммы Ито к логарифму цены приводит к процессу Орштейна-Уленбека:
где St),
- это средний уровень реверсии, который определяет значение, при котором смоделированные значения будут возвращены в долгосрочной перспективе. - средняя скорость реверсии, которая определяет, насколько быстро происходит эта реверсия. - волатильность X. Сначала мы продолжаем моделировать логарифм цены. После этого для получения цен берутся экспоненты смоделированных значений.
Продолжительность моделирования составляет один год при начальной цене 3,9 доллара за MMBtu. Моделирование Монте-Карло проводится для 1000 испытаний с ежедневными периодами. На практике эти параметры калибруются по рыночным данным. В этом примере, 1,21,7, = 59 %. hwv объект из Финансового Toolbox™ используется для моделирования среднереверсирующей динамики цены природного газа.
% Settlement date Settle = '01-Jun-2014'; % Maturity Date Maturity = '01-Jun-2015'; % Actual/Actual basis Basis = 0; % Initial log(price in $/MMBtu) X0 = log(3.9); % Volatility of log(price) Sigma = 0.59; % Number of trials in the Monte Carlo simulation NumTrials =1000; % Number of periods (daily) NumPeriods = daysdif(Settle, Maturity, Basis); % Daily time step dt = 1/NumPeriods; % Mean reversion speed of log(price) Kappa = 1.2; % Mean reversion level of log(price) Theta = 1.7; % Create HWV object hwvobj = hwv(Kappa, Theta, Sigma, 'StartState', X0);
Моделирование выполняется и выводится на печать.
% Set random number generator seed savedState = rng(0, 'twister'); % Simulate gas prices [Paths, Times] = hwvobj.simBySolution(NumPeriods, 'NTRIALS', NumTrials, ... 'DeltaTime', dt); Paths = squeeze(exp(Paths)); % Restore random number generator state rng(savedState); % Plot paths figure; plot(Times, Paths); title('Natural Gas Risk-Neutral Price Simulation'); xlabel('Time'); ylabel('Price');

В этом примере природный газ используется в качестве основного актива со средней динамикой возврата. Однако алгоритм Лонгстафа-Шварца может использоваться для других базовых активов, таких как электричество, с любой базовой динамикой цен.
Мы рассматриваем вариант swing с пятью правами swing на забастовку $4,69/MMBtu, которая может осуществляться ежедневно между днем после даты урегулирования и датой погашения. Ежедневное контрактное количество (DCQ) составляет 10 000 млн. БТЕ, что представляет собой среднее количество природного газа, которое потребитель рассчитывает приобрести в данный день. Потребитель имеет возможность сократить сумму покупки (снижение) за один день до минимального DCQ в 2500 млн. БТЕ, или увеличить покупку (повышение) до 15 000 млн. БТЕ. Постоянно усложняемая годовая безрисковая ставка составляет 1%.
RateSpec используется для представления структуры условий процентной ставки. Для простоты в этом примере рассматривается фиксированная структура срока процентной ставки. Значения RateSpec может быть изменен в соответствии с любой кривой процентных ставок. Функция hswingbyls в этом примере предполагает ежедневное упражнение, если ExerciseDates вход пуст.
% Define RateSpec rfrate = 0.01; Compounding = -1; RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rates', rfrate, ... 'Compounding', Compounding, 'Basis', Basis); % Daily exercise % hswingbyls assumes daily exercise for empty ExerciseDates ExerciseDates = []; % Number of swings NumSwings = 5; % Daily Contract Quantity in MMBtu DCQ = 10000; % Minimum DCQ constraint in MMBtu minDCQ = 2500; % Maximum DCQ constraint in MMBtu maxDCQ = 15000; % Strike Strike = 4.69;
Метод Лонгстаффа - Шварца - это алгоритм обратной итерации, который шагает назад во времени от даты зрелости. На каждую дату упражнения алгоритм аппроксимирует значение продолжения, которое является значением опциона, если он не выполняется. Это выполняется путем сопоставления регрессии со значениями смоделированных цен и дисконтированной будущей стоимости опциона на следующую дату упражнения. Будущее значение опции известно как алгоритм движется назад во времени. Стоимость продолжения сравнивается с суммой выплат от немедленного выполнения (понижение или повышение) и стоимостью продолжения варианта качели с одним меньшим правом качели. Если эта сумма меньше, то оптимальная стратегия держателя опциона заключается в том, чтобы не выполнять на эту дату. Функция hswingbyls в этом примере этот метод используется для определения оптимальной стратегии упражнений и цены для вариантов подмены [1,2,7].
Как обсуждалось ранее, единственным ограничением, рассматриваемым в этом примере, является минимальный и максимальный DCQ. В этом случае оптимальная стратегия ранних упражнений относится к типу «bang-bang». Это означает, что, когда оптимальным является повышение или понижение на определенную дату упражнения, владелец опциона должен всегда использовать максимальный или минимальный DCQ для максимизации прибыли. Упражнение «bang-bang» не было бы оптимальной стратегией, если, например, существует терминальный штраф на основе объема. Затем алгоритм ценообразования должен дополнительно отслеживать все возможные уровни объема, что значительно увеличивает стоимость производительности во время выполнения.
Во-первых, опция свинга оценивается с использованием многочлена третьего порядка, чтобы соответствовать регрессии метода Лонгстаффа-Шварца. Функция hswingbyls также создает график регрессии между базовой ценой и стоимостью продолжения на дату исполнения до погашения.
% Price swing option using 3rd order polynomial to fit Longstaff-Schwartz % regression tic; useSpline = false; SwingPrice = hswingbyls(Paths, Times, RateSpec, Settle, Maturity, ... Strike, ExerciseDates, NumSwings, DCQ, minDCQ, maxDCQ, useSpline, ... [], true)

SwingPrice = 5.6943e+04
lsPolyTime = toc;
Приведенный выше график аппроксимации регрессии показывает, что многочлен третьего порядка не подходит к значению продолжения идеально, особенно вблизи шарнира и в крайних точках. Используйте csaps для подгонки регрессии с использованием кубического сглаживающего сплайна с параметром сглаживания 0,7. Для выполнения остальной части примера требуется Toolbox™ Фитинг кривой (Curve Fitting).
% Price swing option using smoothed splines to fit Longstaff-Schwartz % regression tic; useSpline = true; smoothingParam = 0.7; SwingPriceSpline = hswingbyls(Paths, Times, RateSpec, Settle, Maturity, ... Strike, ExerciseDates, NumSwings, DCQ, minDCQ, maxDCQ, useSpline, ... smoothingParam, true)

SwingPriceSpline = 6.0757e+04
lsSplineTime = toc;
График регрессии показывает, что кубический сглаживающий сплайн имеет лучшее соответствие с данными, таким образом получая более точное значение для значений продолжения. Однако приведенное ниже сравнение показывает, что использование кубического сглаживающего сплайна занимает больше времени, чем многочлен третьего порядка.
% Print comparison of running times
displayRunningTimes(lsPolyTime, lsSplineTime)Comparison of running times: 3rd order polynomial: 3.32 sec Spline : 9.63 sec
Кроме того, важно отметить, что цена представляет собой исключительно компонент опциональности. Следовательно, цена форвардного контракта с базовой нагрузкой не включается в вышеуказанную рассчитанную цену. Поскольку мы использовали фиксированную цену страйка, контракт с базовой нагрузкой имеет ненулевое значение, которое можно вычислить следующим образом:
)
где , N - даты упражнений (подробнее см. [3]). Полная цена контракта, включая базовую нагрузку и вариант подкачки, рассчитывается ниже с использованием цены варианта подкачки из сглаженного кубического сплайна.
% Obtain discount factors RS2 = intenvset(RateSpec, 'StartTimes', 0, 'EndTimes', Times(2:end)); D = intenvget(RS2,'Disc'); % Calculate baseload price BaseLoadPrice = DCQ.*mean(Paths(2:end,:)-Strike,2)'*D; % Calculate full contract price, based on results from cubic spline LS FullContractPrice = BaseLoadPrice + SwingPriceSpline
FullContractPrice = 1.2482e+05
Нижняя граница для варианта свинга - это полоса европейских вариантов, а верхняя - полоса американских вариантов [4]. По сравнению с европейскими опционами, варианты swing имеют раннюю надбавку к упражнениям на каждую дату упражнения, таким образом, цена должна быть выше. Цена ниже, чем американские опционные полосы, потому что только одно право на качели может быть реализовано на каждую дату исполнения. За один день можно осуществить более одной полосы, используя американские варианты.
Цены на полосы нижней и верхней границ рассчитываются ниже для проверки того, что цены опциона на качели находятся в пределах этих границ. Европейские цены на полосы рассчитываются по последним пяти датам упражнений.
% Obtain discount factor for the last NumSwings exercise dates D = D(end-NumSwings+1:end); % European lower bound idx = size(Paths, 1):-1:(size(Paths, 1) - NumSwings + 1); putEuro = D'*mean(max(Strike - Paths(idx,:), 0),2); callEuro = D'*mean(max(Paths(idx,:) - Strike, 0),2); lowerBound = ((DCQ-minDCQ).*putEuro+(maxDCQ-DCQ).*callEuro); % American upper bound [putAmer, callAmer] = hamericanPrice(Paths, Times, RateSpec, Strike); upperBound = NumSwings.*((DCQ-minDCQ).*putAmer+(maxDCQ-DCQ).*callAmer); % Print price and lower/upper bounds displaySummary(SwingPriceSpline, lowerBound, upperBound);
Comparison to lower and upper bounds: Lower bound (European) : 44412.14 Swing Option Price : 60757.33 Upper bound (American) : 68181.42
Цены, рассчитанные с использованием алгоритма Лонгстафа-Шварца, находятся в пределах нижнего и верхнего пределов. На графике ниже показано сравнение между опцией качания и верхней и нижней границами по мере увеличения числа качаний. Когда число перепадов 1, вариант качели эквивалентен американскому варианту. В случае возможности ежедневных упражнений (NumSwings = 365), вариант свинга эквивалентен полосе европейских вариантов с ежедневным сроком погашения.

В примере показано использование метода Лонгстаффа-Шварца для определения цены варианта сволинга, в котором базовый актив следует динамике среднего возврата. Полином 3-го порядка и сглаженный кубический сплайн используются для подгонки регрессии в алгоритме Лонгстафа - Шварца для аппроксимации значения продолжения. Было показано, что сглаженный кубический сплайн лучше подходит к данным за счет более низкой производительности. Наконец, полученные цены опционов на качели были сверены с нижней границей полосы европейских опционов и верхней границей полосы американских опционов.
[1] Бугерт, А., де Йонг, С. «Оценка хранения газа с использованием метода Монте-Карло». Журнал производных. 15(3):81-98, 2008.
[2] Дорр, Уве. «Оценка вариантов свинга и оценка стратегий упражнений методами Монте-Карло». Оксфорд, 2002.
[3] Халл, Джон К. Опционы, фьючерсы и другие деривативы. Шестое издание, Pearson Education, Inc., 2006.
[4] Хайе, П., Ронн, Е. И., Томпаидис, С. "Оценка опционов на товарные качели, Наука об управлении. 50(7):909-921, 2004.
[5] Лоланд, Эмберс, Линдквист, Ола. «Оценка опционов на товарные качели: обследование». Norsk, Regnesentral, 2008.
[6] Лонгстафф, Фрэнсис А., Шварц, Эдуардо С. «Оценка американских вариантов путем моделирования: простой подход с наименьшими квадратами». Обзор финансовых исследований. 14(1):113-147, 2001.
[7] Мейнсхаузен, Н., Хэмбли, Б. М. «Методы Монте-Карло для оценки множественных вариантов упражнений». Математическая наука. 14:557-583, 2004.
[8] Шварц, Эдуардо С. «Стохастическое поведение цен на товары: последствия для оценки и хеджирования». Финансовый журнал. 52(3):923-973, 1997.
function displaySummary(SwingPriceSpline, lowerBound, upperBound) fprintf('Comparison to lower and upper bounds:\n'); fprintf('\n') fprintf('Lower bound (European) : %.2f\n', lowerBound); fprintf('Swing Option Price : %.2f\n', SwingPriceSpline); fprintf('Upper bound (American) : %.2f\n\n', upperBound); end function displayRunningTimes(lsPolyTime, lsSplineTime) fprintf('Comparison of running times:\n'); fprintf('\n') fprintf('3rd order polynomial: %.2f sec\n', lsPolyTime); fprintf('Spline : %.2f sec\n\n', lsSplineTime); end
asianbykv | asianbylevy | asianbyls | asiansensbykv | asiansensbylevy | asiansensbyls | lookbackbycvgsg | lookbackbyls | lookbacksensbycvgsg | lookbacksensbyls | optpricebysim | optstockbyblk | optstockbyls | optstocksensbyblk | optstocksensbyls | spreadbybjs | spreadbyfd | spreadbykirk | spreadbyls | spreadsensbybjs | spreadsensbyfd | spreadsensbykirk | spreadsensbyls