Скорректированный по опциям спред (OAS) является суммой дополнительных процентов, добавленных выше (или ниже, если отрицательно) кривая ссылка нуля. Чтобы вычислить OAS, вы должны предоставить нулевую кривую в качестве дополнительного входа. Вы можете задать нулевую кривую в любых интервалах и с любым методом компаундирования. (Чтобы минимизировать любую ошибку из-за интерполяции, держите интервалы как можно более регулярными и частыми.) Необходимо задать вектор предоплаты или скорость, соответствующую стандартному вектору предоплаты PSA.
Один из способов вычислить соответствующую нулевую кривую для агентства - посмотреть на его выражения облигаций и загрузить их с самой короткой даты и далее. Это можно сделать с помощью функций Financial Toolbox™ zbtprice и zbtyield.
В следующем примере показано, как вычислить соответствующую нулевую кривую с последующим расчетом OAS пула. В этом примере вычисляется OAS 30-летней ипотеки с фиксированной ставкой с примерно 28-летним средневзвешенным сроком погашения, учитывая предположение о скорости предоплаты 0, 50 и 100 PSA.
Создайте кривую для zerorates.
Bonds = [datenum('11/21/2002') 0 100 0 2 1; datenum('02/20/2003') 0 100 0 2 1; datenum('07/31/2004') 0.03 100 2 3 1; datenum('08/15/2007') 0.035 100 2 3 1; datenum('08/15/2012') 0.04875 100 2 3 1; datenum('02/15/2031') 0.05375 100 2 3 1]; Yields = [0.0162; 0.0163; 0.0211; 0.0328; 0.0420; 0.0501];
Поскольку вышесказанное является данными Казначейства, а не выбранными агентскими данными, принимается срочная структура спреда. В этом примере разброс уменьшается пропорционально с максимума 250 базисных точек при самой короткой зрелости.
Yields = Yields + 0.025 * (1./[1:6]');
Получите параметры из Bonds матрица.
Settle = datenum('20-Aug-2002'); Maturity = Bonds(:,1); CouponRate = Bonds(:,2); Face = Bonds(:,3); Period = Bonds(:,4); Basis = Bonds(:,5); EndMonthRule = Bonds(:,6); [Prices, AccruedInterest] = bndprice(Yields, CouponRate, ... Settle, Maturity, Period, Basis, EndMonthRule, [], [], [], [], ... Face);
Использовать zbtprice для решения нулевых ставок.
[ZeroRatesP, CurveDatesP] = zbtprice(Bonds, Prices, Settle); ZeroCompounding = 2*ones(size(ZeroRatesP)); ZeroMatrix = [CurveDatesP, ZeroRatesP, ZeroCompounding];
Используйте выход из zbtprice для вычисления ОАГ.
Price = 95; Settle = datenum('20-Aug-2002'); Maturity = datenum('2-Jan-2030'); IssueDate = datenum('2-Jan-2000'); GrossRate = 0.08125; CouponRate = 0.075; Delay = 14; Interpolation = 1; PrepaySpeed = [0; 50; 100]; OAS = mbsprice2oas(ZeroMatrix, Price, Settle, Maturity, ... IssueDate, GrossRate, CouponRate, Delay, Interpolation, ... PrepaySpeed)
OAS =
26.0502
28.6348
31.2222
Этот пример показывает, что один набор денежных потоков дисконтируется и решается для его OAS, в отличие от NumberOfPaths набор денежных потоков, как показано в разделе Оценка ипотечного пула. Усреднение наборов денежных потоков, полученных в результате всех симуляций, в один средний вектор денежного потока и решение для OAS, дисконтирует средние денежные потоки, чтобы иметь текущее значение сегодняшней (средней) цены.
В то время как этот пример использует цену ипотечного пула (mbsprice2oas) для определения ОАГ можно также использовать выражение для ее разрешения (mbsyield2oas). Кроме того, существуют обратные функции OAS, которые возвращают цены и доходности по данным OAS (mbsoas2price и mbsoas2yield).
Пример также повторяет более ранние примеры, которые показывают, что дисконтные ценные бумаги выигрывают от более высокого уровня предоплаты, сохраняя все остальное без изменений. Отношение сторнировано для премиальных ценных бумаг.
mbscfamounts | mbsconvp | mbsconvy | mbsdurp | mbsdury | mbsnoprepay | mbsoas2price | mbsoas2yield | mbspassthrough | mbsprice | mbsprice2oas | mbsprice2speed | mbswal | mbsyield | mbsyield2oas | mbsyield2speed | psaspeed2default | psaspeed2rate