Цены облигаций и кривая выражения, параллельные сдвиги

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

Укажите значения для даты расчета, даты погашения, номинальной стоимости, ставки купона и периодичности купонных выплат портфеля с четырьмя облигациями. Для простоты примите значения по умолчанию для правила оплаты в конце месяца (правило в эффект) и базиса подсчета дней (фактическое/фактическое). Кроме того, синхронизируйте структуру купонного платежа с датой погашения (без нечетных первых или последних дат купона). Все входы, для которых приняты значения по умолчанию, устанавливаются в пустые матрицы ([]) в качестве заполнителей, где это уместно. Кроме того, укажите точки на кривой выражения для каждой связи.

Settle     = datetime(1995,1,15);
Maturity   = datetime( [2020, 4, 3;...
                        2025, 5,14;...
                        2019, 6, 9;...
                        2019, 2,25])
Maturity = 4x1 datetime
   03-Apr-2020
   14-May-2025
   09-Jun-2019
   25-Feb-2019

Face       = [1000; 1000; 1000; 1000];
CouponRate = [0; 0.05; 0; 0.055];
Periods    = [0; 2; 0; 2];

Yields = [0.078; 0.09; 0.075; 0.085];

Используйте функции Financial Toolbox, чтобы вычислить истинные цены облигаций как сумму котируемой цены плюс начисленные проценты.

[CleanPrice, AccruedInterest] = bndprice(Yields,... 
CouponRate,Settle, Maturity, Periods,...
[], [], [], [], [], [], Face);

Prices  =  CleanPrice + AccruedInterest
Prices = 4×1

  145.2452
  594.7757
  165.8949
  715.7584

Предположим, что значение каждой облигации составляет 25 000 долларов США, и определите количество каждой облигации таким образом, чтобы значение портфеля составляло 100 000 долларов США.

BondAmounts = 25000 ./ Prices;

Вычислите цену портфеля для скользящей серии дат расчета в области значений выражений. Даты оценки происходят ежегодно 15 января, начиная с 15-Jan-1995 (населенный пункт) и распространяясь на 15-Jan-2018. Таким образом, этот шаг оценивает цену портфеля на сетке времени прогрессии (dT) и процентные ставки (dY).

dy = -0.05:0.005:0.05;               % Yield changes

D  = datevec(Settle);                % Get date components
dt = datetime(year(Settle):2018, month(Settle), day(Settle)); % Get evaluation dates

[dT, dY]  =  meshgrid(dt, dy); % Create grid

NumTimes  =  length(dt);       % Number of time steps
NumYields =  length(dy);       % Number of yield changes
NumBonds  =  length(Maturity); % Number of bonds

% Preallocate vector
Prices = zeros(NumTimes*NumYields, NumBonds);

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

for i = 1:NumBonds

   [CleanPrice, AccruedInterest] = bndprice(Yields(i)+... 
   dY(:), CouponRate(i), dT(:), Maturity(i), Periods(i),...
   [], [], [], [], [], [], Face(i));

   Prices(:,i) = CleanPrice + AccruedInterest;

end

Масштабируйте цены облигаций по количеству облигаций и изменяйте форму значений облигаций так, чтобы они соответствовали базовой оценочной сетке.

Prices = Prices * BondAmounts;
Prices = reshape(Prices, NumYields, NumTimes);

Постройте график цены портфеля как функции от даты расчета и области значений выражений, и как функцию от изменения выражения (dY). Этот график иллюстрирует чувствительность портфеля к процентным ставкам по мере развития времени (dT), в области значений сценариев процентных ставок. С помощью следующих графических команд можно визуализировать трехмерную поверхность относительно текущего значения портфеля (то есть $100,000).

figure                   % Open a new figure window
surf(dt, dy, Prices)     % Draw the surface

hold on                  % Add the current value for reference
basemesh = mesh(dt, dy, 100000*ones(NumYields, NumTimes));
set(basemesh, 'facecolor', 'none');
set(basemesh, 'edgecolor', 'm');
set(gca, 'box', 'on');

xlim(datetime([1993,2020],1,1))
xlabel('Evaluation Date');
ylabel('Change in Yield');
zlabel('Portfolio Price');
hold off
view(-25,25);

Figure contains an axes. The axes contains 2 objects of type surface.

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

См. также

| | | | | | | | | |

Похожие темы