exponenta event banner

HullWhite1F

Создание однофакторной модели Корпус-белый

Описание

Однофакторная модель Корпус-Белый задается с помощью нулевой кривой, параметров альфа и сигма.

В частности, модель HullWhite1F определяется с использованием следующих уравнений:

dr = [start( t) a (t) r] dt + (t) dW

где:

dr - это изменение краткосрочной процентной ставки за небольшой интервал.

r - краткосрочная процентная ставка.

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

α - средняя скорость реверсии.

dt - небольшое изменение во времени.

λ - ежегодное стандартное отклонение короткой скорости.

W - броуновское движение.

Создание

Описание

пример

HW1F = HullWhite1F(ZeroCurve,Alpha,Sigma) создает HullWhite1F (HW1F) объект, использующий необходимые аргументы для установки свойств.

Свойства

развернуть все

Нулевая кривая, заданная как вывод из IRDataCurve или RateSpec которая получена из intenvset. Это нулевая кривая, используемая для развития пути будущих процентных ставок.

Типы данных: object | struct

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

Типы данных: double

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

Типы данных: double

Функции объекта

simTermStructsМоделирование терминологических структур для однофакторной модели Корпус-Белый

Примеры

свернуть все

Создание однофакторной модели Корпус-белый с использованием IRDataCurve.

Settle = datenum('15-Dec-2007');
CurveTimes = [1:5 7 10 20]';
ZeroRates = [.01 .018 .024 .029 .033 .034 .035 .034]';
CurveDates = daysadd(Settle,360*CurveTimes,1);
 
irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates);
    
alpha = .1;
sigma = .01;
 
HW1F = HullWhite1F(irdc,alpha,sigma)
HW1F = 
  HullWhite1F with properties:

    ZeroCurve: [1x1 IRDataCurve]
        Alpha: @(t,V)inAlpha
        Sigma: @(t,V)inSigma

Используйте simTermStructs с помощью HullWhite1F модель для моделирования структур терминов.

SimPaths = simTermStructs(HW1F, 10,'nTrials',100);

Создание однофакторной модели Корпус-белый с использованием RateSpec.

Settle = datenum('15-Dec-2007');
CurveTimes = [1:5 7 10 20]';
ZeroRates = [.01 .018 .024 .029 .033 .034 .035 .034]';
CurveDates = daysadd(Settle,360*CurveTimes,1);
 
RateSpec = intenvset('Rates',ZeroRates,'EndDates',CurveDates,'StartDate',Settle);

alpha = .1;
sigma = .01;
 
HW1F = HullWhite1F(RateSpec,alpha,sigma)
HW1F = 
  HullWhite1F with properties:

    ZeroCurve: [1x1 IRDataCurve]
        Alpha: @(t,V)inAlpha
        Sigma: @(t,V)inSigma

Используйте simTermStructs с помощью HullWhite1F модель для моделирования структур терминов.

SimPaths = simTermStructs(HW1F, 10,'nTrials',100);

Определите данные нулевой кривой.

Settle = datenum('4-Apr-2016');
ZeroTimes = [3/12 6/12 1 5 7 10 20 30]';
ZeroRates = [0.033 0.034 0.035 0.040 0.042 0.044 0.048 0.0475]';
ZeroDates = datemnth(Settle,ZeroTimes*12);
RateSpec = intenvset('StartDates', Settle,'EndDates', ZeroDates, 'Rates', ZeroRates)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 2
             Disc: [8x1 double]
            Rates: [8x1 double]
         EndTimes: [8x1 double]
       StartTimes: [8x1 double]
         EndDates: [8x1 double]
       StartDates: 736424
    ValuationDate: 736424
            Basis: 0
     EndMonthRule: 1

Определите параметры связи.

Maturity = datemnth(Settle,12*5);
CouponRate = 0;

Определите параметры Корпус (Hull) - Белый (White).

alpha = .1;
sigma = .01;
HW1F = HullWhite1F(RateSpec,alpha,sigma)
HW1F = 
  HullWhite1F with properties:

    ZeroCurve: [1x1 IRDataCurve]
        Alpha: @(t,V)inAlpha
        Sigma: @(t,V)inSigma

Определите параметры моделирования.

nTrials = 100;
nPeriods = 12*5;
deltaTime = 1/12;
SimZeroCurvePaths = simTermStructs(HW1F, nPeriods,'nTrials',nTrials,'deltaTime',deltaTime);
SimDates = datemnth(Settle,1:nPeriods);

Предварительно распределите и инициализируйте моделирование.

SimBondPrice = zeros(nPeriods+1,nTrials);
SimBondPrice(1,:,:) = bondbyzero(RateSpec,CouponRate,Settle,Maturity);
SimBondPrice(end,:,:) = 100;

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

for periodidx=1:nPeriods-1
    simRateSpec = intenvset('StartDate',SimDates(periodidx),'EndDates',...
        datemnth(SimDates(periodidx),ZeroTimes*12),'Rates',squeeze(SimZeroCurvePaths(periodidx+1,:,:)));
    SimBondPrice(periodidx+1,:) = bondbyzero(simRateSpec,CouponRate,SimDates(periodidx),Maturity);
end

plot([Settle SimDates],SimBondPrice)
datetick
ylabel('Bond Price')
xlabel('Simulation Dates')
title('Simulated Bond Price')

Figure contains an axes. The axes with title Simulated Bond Price contains 100 objects of type line.

Определите данные нулевой кривой.

Settle = datenum('4-Apr-2016');
ZeroTimes = [3/12 6/12 1 5 7 10 20 30]';
ZeroRates = [-0.01 -0.009 -0.0075 -0.003 -0.002 -0.001 0.002 0.0075]';
ZeroDates = datemnth(Settle,ZeroTimes*12);
RateSpec = intenvset('StartDates', Settle,'EndDates', ZeroDates, 'Rates', ZeroRates)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 2
             Disc: [8x1 double]
            Rates: [8x1 double]
         EndTimes: [8x1 double]
       StartTimes: [8x1 double]
         EndDates: [8x1 double]
       StartDates: 736424
    ValuationDate: 736424
            Basis: 0
     EndMonthRule: 1

Определите параметры облигаций для пяти облигаций в портфеле.

Maturity = datemnth(Settle,12*5);  % All bonds have the same maturity
CouponRate = [0.035;0.04;0.02;0.015;0.042];  % Different coupon rates for the bonds
nBonds = length(CouponRate);

Определите параметры Корпус (Hull) - Белый (White).

alpha = .1;
sigma = .01;
HW1F = HullWhite1F(RateSpec,alpha,sigma)
HW1F = 
  HullWhite1F with properties:

    ZeroCurve: [1x1 IRDataCurve]
        Alpha: @(t,V)inAlpha
        Sigma: @(t,V)inSigma

Определите параметры моделирования.

nTrials = 1000;
nPeriods = 12*5;
deltaTime = 1/12;
SimZeroCurvePaths = simTermStructs(HW1F, nPeriods,'nTrials',nTrials,'deltaTime',deltaTime);
SimDates = datemnth(Settle,1:nPeriods);

Предварительно распределите и инициализируйте моделирование.

SimBondPrice = zeros(nPeriods+1,nBonds,nTrials);
SimBondPrice(1,:,:) = repmat(bondbyzero(RateSpec,CouponRate,Settle,Maturity)',[1 1 nTrials]);
SimBondPrice(end,:,:) = 100;

[BondCF,BondCFDates,~,CFlowFlags] = cfamounts(CouponRate,Settle,Maturity);
BondCF(CFlowFlags == 4) = BondCF(CFlowFlags == 4) - 100;
SimBondCF = zeros(nPeriods+1,nBonds,nTrials);

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

for periodidx=1:nPeriods
    if periodidx < nPeriods
        simRateSpec = intenvset('StartDate',SimDates(periodidx),'EndDates',...
            datemnth(SimDates(periodidx),ZeroTimes*12),'Rates',squeeze(SimZeroCurvePaths(periodidx+1,:,:)));
        SimBondPrice(periodidx+1,:,:) = bondbyzero(simRateSpec,CouponRate,SimDates(periodidx),Maturity);
    end
    
    simidx = SimDates(periodidx) == BondCFDates;
    SimCF = zeros(1,nBonds);
    SimCF(any(simidx,2)) = BondCF(simidx);
    ReinvestRate = 1 + SimZeroCurvePaths(periodidx+1,1,:);
    SimBondCF(periodidx+1,:,:) = bsxfun(@times,bsxfun(@plus,SimBondCF(periodidx,:,:),SimCF),ReinvestRate);
end

Вычислите общую серию возврата.

TotalCF = SimBondPrice + SimBondCF;

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

TotalCF = squeeze(sum(TotalCF,2));

TotRetSeries = bsxfun(@rdivide,TotalCF(2:end,:),TotalCF(1,:)) - 1;
plot(SimDates,TotRetSeries)
datetick
ylabel('Bond Portfolio Returns')
xlabel('Simulation Dates')
title('Simulated Bond Portfolio Returns')

Figure contains an axes. The axes with title Simulated Bond Portfolio Returns contains 1000 objects of type line.

Подробнее

развернуть все

Ссылки

[1] Бриго, Д. и Ф. Меркурио. Модели процентных ставок - теория и практика. Springer Finance, 2006.

[2] Халл, J. Опционы, фьючерсы и другие деривативы. Прентис-Холл, 2011.

Представлен в R2013a