В этом примере показаны некоторые функции анализа терминологии в программном обеспечении Financial Toolbox™. В частности, он иллюстрирует, как вывести подразумеваемые нулевые (спотовые) и форвардные кривые из наблюдаемых рыночных цен купонных облигаций. Нулевые и форвардные кривые, подразумеваемые из рыночных данных, затем используются для оценки соглашения процентного свопа.
В процентном свопе две стороны соглашаются на периодический обмен денежными потоками. Один из денежных потоков основан на фиксированной процентной ставке, постоянной в течение всего срока действия свопа. Другой поток денежных средств привязан к некоторой переменной индексной ставке. Расчет цены свопа на начальном этапе означает поиск фиксированной ставки соглашения свопа. Эта фиксированная ставка, соответствующим образом масштабированная условной основной суммой соглашения о свопе, определяет периодическую последовательность фиксированных денежных потоков.
В целом, процентные свопы оцениваются на основе форвардной кривой таким образом, что переменные денежные потоки, подразумеваемые из ряда форвардных ставок и периодической последовательности денежных потоков с фиксированной ставкой, имеют одно и то же текущее значение. Таким образом, ценообразование процентного свопа и анализ структуры условий тесно связаны.
Укажите значения для даты расчета, сроков погашения, ставок купонов и рыночных цен для 10 казначейских облигаций США. Эти данные позволяют оценить пятилетний своп с чистыми платежами денежного потока, обмениваемыми каждые шесть месяцев. Для простоты примите значения по умолчанию для правила оплаты на конец месяца (правило действует) и базы подсчета дней (факт/факт). Во избежание выпуска начисленных процентов, предположим, что все Казначейские облигации выплачивают полугодовые купоны и что расчет происходит на дату выплаты купона.
Settle = datenum('15-Jan-1999'); BondData = {'15-Jul-1999' 0.06000 99.93 '15-Jan-2000' 0.06125 99.72 '15-Jul-2000' 0.06375 99.70 '15-Jan-2001' 0.06500 99.40 '15-Jul-2001' 0.06875 99.73 '15-Jan-2002' 0.07000 99.42 '15-Jul-2002' 0.07250 99.32 '15-Jan-2003' 0.07375 98.45 '15-Jul-2003' 0.07500 97.71 '15-Jan-2004' 0.08000 98.15};
BondData - экземпляр массива ячеек MATLAB ®, обозначаемый фигурными скобками ({}).
Затем назначьте дату, сохраненную в массиве ячеек, Maturity, CouponRate, и Prices векторы для дальнейшей обработки.
Maturity = datenum(char(BondData{:,1}));
CouponRate = [BondData{:,2}]';
Prices = [BondData{:,3}]';
Period = 2; % semiannual coupons
После определения данных используйте функцию структуры терминов. zbtprice для начальной загрузки нулевой кривой, подразумеваемой из цен купонных облигаций. Эта подразумеваемая нулевая кривая представляет ряд ставок Казначейства с нулевым купоном, соответствующих ценам купонных облигаций, так что возможности арбитража не будут существовать.
ZeroRates = zbtprice([Maturity CouponRate], Prices, Settle);
Нулевая кривая, сохраненная в ZeroRates, котируется на основе полугодовых облигаций (периодическая, шестимесячная, процентная ставка удваивается до ежегодной). Первый элемент ZeroRates годовой курс в течение следующих шести месяцев, второй элемент - годовой курс в течение следующих 12 месяцев и так далее.
Из подразумеваемой нулевой кривой найдите соответствующий ряд подразумеваемых форвардных ставок с помощью функции структуры терминов. zero2fwd.
ForwardRates = zero2fwd(ZeroRates, Maturity, Settle);
Прямая кривая, сохраненная в ForwardRates, также котируется на основе полугодовых облигаций. Первый элемент ForwardRates - годовой курс, применяемый к интервалу между расчетами и шестью месяцами после расчета, второй элемент - годовой курс, применяемый к интервалу от шести месяцев до 12 месяцев после расчета и так далее. Эта подразумеваемая форвардная кривая также согласуется с наблюдаемыми рыночными ценами, так что арбитражная деятельность будет нерентабельной. Поскольку первая прямая скорость также является нулевой скоростью, первый элемент ZeroRates и ForwardRates одинаковые.
Теперь, после получения нулевой кривой, преобразуйте ее в последовательность коэффициентов дисконтирования с помощью функции структуры терминов. zero2disc.
DiscountFactors = zero2disc(ZeroRates, Maturity, Settle);
На основе коэффициентов дисконтирования вычислите приведенную стоимость переменных денежных потоков, полученных из подразумеваемых форвардных ставок. Для простых процентных свопов условная основная сумма остается постоянной для каждой даты платежа и отменяется из каждой стороны уравнения текущей стоимости. Следующая строка предполагает условный участник единицы измерения.
PresentValue = sum((ForwardRates/Period) .* DiscountFactors);
Вычислите цену свопа (фиксированную ставку), приравняв приведенную стоимость фиксированных денежных потоков к приведенной стоимости денежных потоков, полученных из подразумеваемых форвардных ставок. Опять же, поскольку условный главный объект отменяется из каждой стороны уравнения, предполагается, что он равен 1.
SwapFixedRate = Period * PresentValue / sum(DiscountFactors);
Выходные данные для этих вычислений:
Zero Rates Forward Rates
0.0614 0.0614
0.0642 0.0670
0.0660 0.0695
0.0684 0.0758
0.0702 0.0774
0.0726 0.0846
0.0754 0.0925
0.0795 0.1077
0.0827 0.1089
0.0868 0.1239
Swap Price (Fixed Rate) = 0.0845
Все ставки представлены в десятичном формате. Цена свопа, 8,45%, вероятно, будет средней точкой между котировками предложения/запроса маркет-мейкера.
blsdelta | blsgamma | blsprice | blsvega | bndconvy | bnddury | bndkrdur | bndprice | zbtprice | zero2disc | zero2fwd