HullWhite1F

Создайте Белую как оболочка одну факторную модель

Описание

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

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

dr=[θ(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;

Задайте Белые как оболочка параметры.

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 object. The axes object 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);

Задайте Белые как оболочка параметры.

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 object. The axes object with title Simulated Bond Portfolio Returns contains 1000 objects of type line.

Больше о

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

Ссылки

[1] Brigo, D. и Ф. Меркурио. Модели процентной ставки - теория и практика. Финансы Спрингера, 2006.

[2] Оболочка, J. Опции, фьючерсы и другие производные. Prentice Hall, 2011.

Введенный в R2013a