www.gusucode.com > fininst 案例源码程序 matlab代码 > fininst/SimulatethePriceofaBondUsingaHullWhiteOneFactorModelUntiExample.m

    %% Simulate the Price of a Bond Using a Hull-White One-Factor Model Until the Bond's Maturity  

%% 
% Define the zero curve data. 
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)  

%% 
% Define the bond parameters. 
Maturity = datemnth(Settle,12*5);
CouponRate = 0;  

%% 
% Define the Hull-White parameters. 
alpha = .1;
sigma = .01;
HW1F = HullWhite1F(RateSpec,alpha,sigma)  

%% 
% Define the simulation parameters. 
nTrials = 100;
nPeriods = 12*5;
deltaTime = 1/12;
SimZeroCurvePaths = simTermStructs(HW1F, nPeriods,'nTrials',nTrials,'deltaTime',deltaTime);
SimDates = datemnth(Settle,1:nPeriods);  

%% 
% Preallocate and initialize for the simulation. 
SimBondPrice = zeros(nPeriods+1,nTrials);
SimBondPrice(1,:,:) = bondbyzero(RateSpec,CouponRate,Settle,Maturity);
SimBondPrice(end,:,:) = 100;  

%% 
% Compute the bond values for each simulation date and path, note that you
% can vectorize over the trial dimension. 
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')