Этот пример иллюстрирует некоторые функции анализа структуры терминов, обнаруженные в программном обеспечении 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