Управление процентным риском с помощью фьючерсов на облигации

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

Изменение длительности портфеля с фьючерсами на облигации

При управлении портфелем облигаций можно использовать портфель эталонных марок для оценки эффективности. Иногда менеджер ограничивается сохранением продолжительности портфеля в пределах определенной полосы от длительности теста. Одним из способов изменения длительности портфеля является покупка и продажа облигаций, однако могут быть причины, по которым портфельный управляющий желает сохранить существующий состав портфеля (для примера, текущие холдинги отражают фундаментальные исследования/взгляды на будущие возвраты). Поэтому другая опция изменения длительности - купить и продать фьючерсы на облигации.

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

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

Существуют хорошо развитые рынки фьючерсов на государственные облигации. В частности, Совет по торговле Чикаго предлагает фьючерсы на следующее:

  • Примечание за 2 года

  • Примечание за 3 года

  • Примечание за 5 лет

  • 10-летняя записка

  • 30-летняя облигация

https://www.cmegroup.com/trading/interest-rates/

Eurex предлагает фьючерсы на следующее:

  • Euro-Schatz фьючерсы с 1.75 до 2.25

  • Евро-Бобль фьючерсы с 4,5 по 5,5

  • Euro-Bund фьючерсы с 8,5 до 10,5

  • Euro-Buxl фьючерсы с 24,0 до 35

https://www.eurexchange.com/exchange-en/

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

Существует две проблемы при вычислении этой длительности:

  • Поскольку существует много доступных облигаций для поставки, короткий контракт имеет выбор, в котором облигация должна быть поставлена.

  • Некоторые контракты обеспечивают короткую гибкость при выборе даты поставки.

Как правило, связь, используемая для анализа, является связью, которая является самой дешевой для короткой доставки (CTD).

Одним из подходов является вычисление показателей длительности с использованием длительности CTD и коэффициента преобразования.

Для примера Текущее значение точки Базиса (PVBP) может быть вычислено из следующего:

PVBPFutures=PVBPCTDConversionFactorCTD

PVBPCTD=DurationCTD*PriceCTD100

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

Если целью является изменение длительности портфеля, используйте следующее:

NumContracts=(DurTarget-DurInitial)*ValuePortfolioDurCTD*PriceCTD*ContractSize*ConvFactorCTD

Обратите внимание, что размер контракта обычно составляет 100 000 лицевых значения облигации - поэтому размер контракта обычно равен 1000, так как значение лицевой стороны облигации равно 100.

Следующий пример принимает начальную длительность, значение портфеля и целевую длительность для портфеля с риском по процентной ставке евро. Июньский контракт Euro-Bund Futures используется для изменения длительности портфеля.

Обратите внимание, что обычно фьючерсные контракты предлагаются на март, июнь, сентябрь и декабрь.

% Assume the following for the portfolio and target
PortfolioDuration = 6.4;
PortfolioValue = 100000000;
BenchmarkDuration = 4.8;

% Deliverable Bunds -- note that these conversion factors may also be
% computed with the MATLAB(R) function convfactor
BondPrice = [106.46;108.67;104.30];
BondMaturity = datenum({'04-Jan-2018','04-Jul-2018','04-Jan-2019'});
BondCoupon = [.04;.0425;.0375];
ConversionFactor = [.868688;.880218;.839275];

% Futures data -- found from http://www.eurexchange.com
FuturesPrice = 122.17;
FuturesSettle = '23-Apr-2009';
FuturesDelivery = '10-Jun-2009';

% To find the CTD bond we can compute the implied repo rate
ImpliedRepo = bndfutimprepo(BondPrice,FuturesPrice,FuturesSettle,...
    FuturesDelivery,ConversionFactor,BondCoupon,BondMaturity);

% Note that the bond with the highest implied repo rate is the CTD
[CTDImpRepo,CTDIndex] = max(ImpliedRepo);

% Compute the CTD's Duration -- note the period and basis for German Bunds
Duration = bnddurp(BondPrice,BondCoupon,FuturesSettle,BondMaturity,1,8);

ContractSize = 1000;

% Use the formula above to compute the number of contracts to sell
NumContracts = (BenchmarkDuration - PortfolioDuration)*PortfolioValue./...
    (BondPrice(CTDIndex)*ContractSize*Duration(CTDIndex))*ConversionFactor(CTDIndex);

disp(['To achieve the target duration, ' num2str(abs(round(NumContracts))) ...
    ' Euro-Bund Futures must be sold.'])
To achieve the target duration, 180 Euro-Bund Futures must be sold.

Изменение длительности ключевой ставки портфеля с фьючерсами на облигации

Одним из недостатков использования длительности в качестве меры риска является то, что она принимает параллельные сдвиги в кривой выражения. В то время как многие исследования показали, что это объясняет примерно 85% движения в кривой выражения, изменения наклона или формы кривой выражения не фиксируются длительностью, и, следовательно, стратегии хеджирования не успешны при рассмотрении этой динамики.

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

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

Для вычисления длительности ключевой ставки требуется нулевая кривая. Этот пример использует нулевую кривую, опубликованную Казначейством и найденную в следующем месте:

https://www.ustreas.gov/offices/domestic-finance/debt-management/interest-rate/yield.shtml

Обратите внимание, что эта кривая нуля также может быть выведена с помощью функциональности Кривая процентной ставки, обнаруженной в IRDataCurve и IRFunctionCurve.

% Assume the following for the portfolio and target, where the duration
% vectors are key rate durations at 2, 5, 10, and 30 years.
PortfolioDuration = [.5 1 2 6];
PortfolioValue = 100000000;
BenchmarkDuration = [.4 .8 1.6 5];

% The following are the CTD Bonds for the 30, 10, 5 and 2 year futures
% contracts -- these were determined using the procedure outlined in the
% previous section.
CTDCoupon = [4.75 3.125 5.125 7.5]'/100;
CTDMaturity = datenum({'3/31/2011','08/31/2013','05/15/2016','11/15/2024'});
CTDConversion = [0.9794 0.8953 0.9519 1.1484]';
CTDPrice = [107.34 105.91 117.00 144.18]';

ZeroRates = [0.07 0.10 0.31 0.50 0.99 1.38 1.96 2.56 3.03 3.99 3.89]'/100;
ZeroDates = daysadd(FuturesSettle,[30 360 360*2 360*3 360*5 ...
    360*7 360*10 360*15 360*20 360*25 360*30],1);

% Compute the key rate durations for each of the CTD bonds.
CTDKRD = bndkrdur([ZeroDates ZeroRates], CTDCoupon,FuturesSettle,...
    CTDMaturity,'KeyRates',[2 5 10 30]);

% Note that the contract size for the 2 Year Note Future is $200,000
ContractSize = [2000;1000;1000;1000];

NumContracts = (bsxfun(@times,CTDPrice.*ContractSize./CTDConversion,CTDKRD))\...
    (BenchmarkDuration - PortfolioDuration)'*PortfolioValue;

sprintf(['To achieve the target duration, \n' ...
    num2str(-round(NumContracts(1))) ' 2 Year Treasury Note Futures must be sold, \n' ...
    num2str(-round(NumContracts(2))) ' 5 Year Treasury Note Futures must be sold, \n' ...
    num2str(-round(NumContracts(3))) ' 10 Year Treasury Note Futures must be sold, \n' ...
    num2str(-round(NumContracts(4))) ' Treasury Bond Futures must be sold, \n'])
ans = 
    'To achieve the target duration, 
     24 2 Year Treasury Note Futures must be sold, 
     47 5 Year Treasury Note Futures must be sold, 
     68 10 Year Treasury Note Futures must be sold, 
     120 Treasury Bond Futures must be sold, 
     '

Улучшение эффективности хеджирования с регрессией

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

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

Один из подходов состоит в том, чтобы выполнить регрессию по историческим выражениям при различных сроках для определения беты выражения, которая является значением, которое представляет, насколько больше изменяется выражение для различных сроков.

Этот пример показывает, как использовать этот подход с UK Long Gilt futures и историческими данными о Gilt Yields.

Рыночные данные по фьючерсам на Gilt представлены ниже:

https://www.euronext.com

Исторические данные о позолоте встречаются в следующем;

https://www.dmo.gov.uk

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

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

% Assume the following for the portfolio and target
PortfolioDuration = 6.4;
PortfolioValue = 100000000;
BenchmarkDuration = 4.8;

% This is the CTD Bond for the Long Gilt Futures contract
CTDBondPrice = 113.40;
CTDBondMaturity = datenum('7-Mar-2018');
CTDBondCoupon = .05;
CTDConversionFactor = 0.9325024;

% Market data for the Long Gilt Futures contract
FuturesPrice = 120.80;
FuturesSettle = '23-Apr-2009';
FuturesDelivery = '10-Jun-2009';

CTDDuration = bnddurp(CTDBondPrice,CTDBondCoupon,FuturesSettle,CTDBondMaturity);

ContractSize = 1000;

NumContracts = (BenchmarkDuration - PortfolioDuration)*PortfolioValue./...
    (CTDBondPrice*ContractSize*CTDDuration)*CTDConversionFactor;

disp(['To achieve the target duration with a conventional hedge ' ...
    num2str(-round(NumContracts)) ...
    ' Long Gilt Futures must be sold.'])
To achieve the target duration with a conventional hedge 182 Long Gilt Futures must be sold.

Чтобы улучшить точность этого хеджирования, исторические данные используются, чтобы определить связь между стандартным отклонением выражений. В частности, стандартное отклонение выражений построено и регрессировано по сравнению с длительностью связи. Затем эта связь используется для вычисления беты выражения для хеджирования.

% Load data from XLS spreadsheet
load ukbonddata_20072008

Duration = bnddury(Yield(1,:)',Coupon,Dates(1,:),Maturity);

scatter(Duration,100*std(Yield))
title('Standard Deviation of Yields for UK Gilts 2007-2008')
ylabel('Standard Deviation of Yields (%)')
xlabel('Duration')
annotation(gcf,'textbox',[0.4067 0.685 0.4801 0.0989],...
    'String',{'Note that the Standard Deviation',...
    'of Yields is greater at shorter maturities.'},...
    'FitBoxToText','off',...
    'EdgeColor','none');

Figure contains an axes. The axes with title Standard Deviation of Yields for UK Gilts 2007-2008 contains an object of type scatter.

stats = regstats(std(Yield),Duration);
YieldBeta = (stats.beta'*[1 PortfolioDuration]')./(stats.beta'*[1 CTDDuration]');

Теперь бета-версия выражение используется для вычисления нового значения количества проданных контрактов. Обратите внимание, что поскольку длительность портфеля была меньше продолжительности CTD Gilt, количество фьючерсов на продажу фактически больше, чем в первом случае.

NumContracts = (BenchmarkDuration - PortfolioDuration)*PortfolioValue./...
    (CTDBondPrice*ContractSize*CTDDuration)*CTDConversionFactor*YieldBeta;

disp(['To achieve the target duration using a Yield Beta-modified hedge, ' ...
    num2str(abs(round(NumContracts))) ...
    ' Long Gilt Futures must be sold.'])
To achieve the target duration using a Yield Beta-modified hedge, 193 Long Gilt Futures must be sold.

Библиография

Этот пример основан на следующих книгах и бумагах:

[1] Бургхардт, Г., Т. Белтон, М. Лейн и Дж. Папа. Казначейская облигация Базиса. Нью-Йорк, Нью-Йорк: McGraw-Hill, 2005.

[2] Кргин, Д. Справочник по глобальным расчетам фиксированного дохода. New York, NY: John Wiley & Sons, 2002.

[3] Учебная программа CFA, уровень III, том 4, чтение 31. Институт КФА, 2009.