В этом примере используются функции ценообразования облигаций 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);

Трехмерная графика MATLAB ® позволяет визуализировать процентный риск, испытываемый портфелем облигаций с течением времени. В этом примере предполагались параллельные сдвиги в структуре терминов, но это могло также позволить другим компонентам изменяться, например, уровень и наклон .
blsdelta | blsgamma | blsprice | blsvega | bndconvy | bnddury | bndkrdur | bndprice | zbtprice | zero2disc | zero2fwd