Анализ структуры терминов и процентные свопы

Этот пример иллюстрирует некоторые функции анализа структуры терминов, обнаруженные в программном обеспечении Financial Toolbox™. В частности, он иллюстрирует, как вывести подразумеваемые нулевые (спотовые) и форвардные кривые из наблюдаемых рыночных цен купонных облигаций. Нулевая и форвардная кривые, подразумеваемые из рыночных данных, затем используются для оценки соглашения об обмене процентной ставкой.

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

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

Шаг 1

Укажите значения для даты расчета, сроков погашения, купонных ставок и рыночных цен по 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

Шаг 2

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

ZeroRates = zbtprice([Maturity CouponRate], Prices, Settle); 

Нулевая кривая, сохраненная в ZeroRates, котируется на полугодовой базис облигаций (периодическая, шестимесячная, процентная ставка удваивается до ежегодной). Первый элемент ZeroRates - годовая ставка в течение следующих шести месяцев, второй элемент - годовая ставка в течение следующих 12 месяцев и так далее.

Шаг 3

Из подразумеваемой нулевой кривой найдите соответствующую серию подразумеваемых форвардных ставок с помощью функции структуры термина zero2fwd.

ForwardRates = zero2fwd(ZeroRates, Maturity, Settle);

Прямая кривая, сохраненная в ForwardRates, также котируется на полугодовой базис связи. Первый элемент ForwardRates - годовая ставка, применяемая к интервалу между расчетами и шестью месяцами после расчетов, второй элемент - это годовая ставка, применяемая к интервалу от шести месяцев до 12 месяцев после расчетов и так далее. Эта подразумеваемая форвардная кривая также соответствует наблюдаемым рыночным ценам, так что арбитражная деятельность будет нерентабельной. Поскольку первая прямая ставка также является нулевой скоростью, первый элемент ZeroRates и ForwardRates те же самые.

Шаг 4

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

DiscountFactors = zero2disc(ZeroRates, Maturity, Settle);

Шаг 5

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

PresentValue = sum((ForwardRates/Period) .* DiscountFactors);

Шаг 6

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

См. также

| | | | | | | | | |

Похожие темы