Скорректированный на опцион спред (OAS) представляет собой сумму дополнительного процента, добавленного выше (или ниже, если отрицательный) ссылочной нулевой кривой. Для вычисления OAS необходимо предоставить нулевую кривую в качестве дополнительного ввода. Нулевую кривую можно задать в любых интервалах и с помощью любого метода компаундирования. (Чтобы свести к минимуму любую ошибку из-за интерполяции, поддерживайте интервалы как можно более регулярными и частыми.) Необходимо указать вектор предоплаты или скорость, соответствующую стандартному вектору предоплаты PSA.
Один из способов рассчитать соответствующую нулевую кривую для агентства - посмотреть на доходность его облигаций и начать их с самого короткого срока. Это можно сделать с помощью функций финансового Toolbox™. zbtprice и zbtyield.
В следующем примере показано, как вычислить соответствующую нулевую кривую с последующим вычислением 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 для расчета OAS.
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 набор денежных потоков, как показано в окне Оценка ипотечного пула. Усреднение наборов денежных потоков, полученных в результате всех моделирований, в один средний вектор денежных потоков и решение для ОАГ, дисконтирует усредненные денежные потоки, чтобы иметь текущую стоимость сегодняшней (средней) цены.
В этом примере используется цена ипотечного пула (mbsprice2oas) для определения OAS можно также использовать выход для его разрешения (mbsyield2oas). Кроме того, существуют обратные функции OAS, которые возвращают цены и доходности, заданные OAS (mbsoas2price и mbsoas2yield).
В примере также повторяются более ранние примеры, которые показывают, что дисконтные ценные бумаги выигрывают от более высокого уровня предоплаты, сохраняя все остальное неизменным. Отношение сторнируется для премиальных ценных бумаг.
mbscfamounts | mbsconvp | mbsconvy | mbsdurp | mbsdury | mbsnoprepay | mbsoas2price | mbsoas2yield | mbspassthrough | mbsprice | mbsprice2oas | mbsprice2speed | mbswal | mbsyield | mbsyield2oas | mbsyield2speed | psaspeed2default | psaspeed2rate