Прайс Свапшнс с моделями процентной ставки Используя симуляцию

Введение

В этом примере показано, как оценить европейский swaptions использование моделей процентной ставки в Financial Instruments Toolbox™. А именно, Белая как оболочка одна факторная модель, Линейная Гауссова 2D факторная модель и Модель Рынка LIBOR калибруются, чтобы продать данные и затем используются, чтобы сгенерировать пути процентной ставки с помощью симуляции Монте-Карло.

Следующие разделы настраивают данные, которые затем используются с примерами для, Симулируют Пути Процентной ставки Используя Белую как оболочка Одну Факторную модель, Симулируют Пути Процентной ставки Используя Линейную Гауссову 2D Факторную модель и Симулируют Пути Процентной ставки Используя Модель Рынка LIBOR:

Создайте кривую нулевой ширины

В этом примере показано, как использовать ZeroRates для кривой нулевой ширины, которая трудно закодирована. Можно также создать кривую нулевой ширины путем начальной загрузки кривой нулевой ширины из данных о рынке (например, депозиты, фьючерсы/форварды и подкачки)

Трудно закодированные данные для кривой нулевой ширины заданы как:

Settle = datenum('21-Jul-2008');

% Zero Curve
CurveDates = daysadd(Settle,360*([1 3 5 7 10 20]),1);
ZeroRates = [1.9 2.6 3.1 3.5 4 4.3]'/100;

plot(CurveDates,ZeroRates)
datetick
title(['Zero Curve for ' datestr(Settle)]);

Figure contains an axes object. The axes object with title Zero Curve for 21-Jul-2008 contains an object of type line.

Создайте IRDataCurve объект.

irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates);

Создайте RateSpec использование intenvset.

RateSpec = intenvset('Rates',ZeroRates,'EndDates',CurveDates,'StartDate',Settle)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 2
             Disc: [6x1 double]
            Rates: [6x1 double]
         EndTimes: [6x1 double]
       StartTimes: [6x1 double]
         EndDates: [6x1 double]
       StartDates: 733610
    ValuationDate: 733610
            Basis: 0
     EndMonthRule: 1

Задайте параметры Swaption

В то время как симуляция Монте-Карло обычно используется, чтобы оценить более сложные производные (например, бермудский swaptions), в этом примере, цена европейского swaption вычисляется с датой осуществления пяти лет и базовой подкачкой пяти лет.

InstrumentExerciseDate = datenum('21-Jul-2013');
InstrumentMaturity = datenum('21-Jul-2018');
InstrumentStrike = .045;

Вычислите черную модель и матрицу энергозависимости Swaption

Модель черного цвета часто используется, чтобы оценить и заключить в кавычки европейские опции процентной ставки осуществления, то есть, дно, этажи и swaptions. В случае swaptions модель Черного цвета используется, чтобы подразумевать энергозависимость, учитывая текущую наблюдаемую рыночную цену. Следующая матрица показывает Черную подразумеваемую волатильность для области значений дат осуществления swaption (столбцы) и базовые сроки платежа подкачки (строки).

SwaptionBlackVol = [22 21 19 17 15 13 12
    21 19 17 16 15 13 11
    20 18 16 15 14 12 11
    19 17 15 14 13 12 10
    18 16 14 13 12 11 10
    15 14 13 12 12 11 10
    13 13 12 11 11 10 9]/100;
ExerciseDates = [1:5 7 10];
Tenors = [1:5 7 10];

EurExDatesFull = repmat(daysadd(Settle,ExerciseDates*360,1)',...
    length(Tenors),1);
EurMatFull = reshape(daysadd(EurExDatesFull,...
    repmat(360*Tenors,1,length(ExerciseDates)),1),size(EurExDatesFull));

Выберите Calibration Instruments

Выбор инструментов, чтобы калибровать модель к является одной из задач в калибровке. Для бермудского swaptions это типично, чтобы калибровать к европейским swaptions, которые являются co-терминалом с бермудским swaption, который будет оценен. В этом случае все swaptions наличие базового тенора, который становится зрелым перед зрелостью swaption, который будет оценен (21 июля 2018), используются в калибровке.

% Find the swaptions that expire on or before the maturity date of the
% sample swaption
relidx = find(EurMatFull <= InstrumentMaturity);

Вычислите цены Swaption Используя модель черного цвета

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

Вычислить swaption цены с помощью модели Черного цвета:

SwaptionBlackPrices = zeros(size(SwaptionBlackVol));
SwaptionStrike = zeros(size(SwaptionBlackVol));

for iSwaption=1:length(ExerciseDates)
    for iTenor=1:length(Tenors)
        [~,SwaptionStrike(iTenor,iSwaption)] = swapbyzero(RateSpec,[NaN 0], Settle, EurMatFull(iTenor,iSwaption),...
            'StartDate',EurExDatesFull(iTenor,iSwaption),'LegReset',[1 1]);
        SwaptionBlackPrices(iTenor,iSwaption) = swaptionbyblk(RateSpec, 'call', SwaptionStrike(iTenor,iSwaption),Settle, ...
            EurExDatesFull(iTenor,iSwaption), EurMatFull(iTenor,iSwaption), SwaptionBlackVol(iTenor,iSwaption));
    end
end

Задайте параметры симуляции

В этом примере показано, как использовать simTermStructs метод с HullWhite1F, LinearGaussian2F, и LiborMarketModel объекты.

Продемонстрировать использование simTermStructs метод с HullWhite1F, LinearGaussian2F, и LiborMarketModel объекты, используйте следующие параметры симуляции:

nPeriods = 5;
DeltaTime = 1;
nTrials = 1000;

Tenor = (1:10)';

SimDates = daysadd(Settle,360*DeltaTime*(0:nPeriods),1)
SimTimes = diff(yearfrac(SimDates(1),SimDates))

% For 1 year periods and an evenly spaced tenor, the exercise row will be
% the 5th row and the swaption maturity will be the 5th column
exRow = 5;
endCol = 5;
SimDates =

      733610
      733975
      734340
      734705
      735071
      735436


SimTimes =

    1.0000
    1.0000
    1.0000
    1.0027
    1.0000

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

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

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

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

где:

dr является изменением в ближайшей перспективе процентная ставка на маленьком интервале, dt.

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

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

α является уровнем возвращения к среднему уровню.

dt является небольшим изменением вовремя.

σ является ежегодным стандартным отклонением короткого уровня.

W является Броуновское движение.

Модель Hull-White калибруется с помощью функционального swaptionbyhw, который создает трехчленное дерево, чтобы оценить swaptions. Калибровка состоит из минимизации различия между наблюдаемыми рыночными ценами (вычисленный выше использования Черного цвета, подразумевал swaption матрицу энергозависимости, смотрите, Вычисляют Черную Модель и Матрицу Энергозависимости Swaption), и предсказанные цены модели.

В этом примере Optimization Toolbox™ функционирует lsqnonlin используется, чтобы найти набор параметров, который минимизирует различие между наблюдаемыми и ожидаемыми значениями. Однако другие подходы (например, симулированный отжиг) могут быть соответствующими. Стартовые параметры и ограничения для α и σ установлены в переменных x0, lb, и ub; они могли также варьироваться в зависимости от конкретного калибровочного подхода.

Калибруйте набор параметров, которые минимизируют различие между использованием наблюдаемых и ожидаемых значений swaptionbyhw и lsqnonlin.

TimeSpec = hwtimespec(Settle,daysadd(Settle,360*(1:11),1), 2);
HW1Fobjfun = @(x) SwaptionBlackPrices(relidx) - ...
    swaptionbyhw(hwtree(hwvolspec(Settle,'11-Aug-2015',x(2),'11-Aug-2015',x(1)), RateSpec, TimeSpec), 'call', SwaptionStrike(relidx),...
    EurExDatesFull(relidx), 0, EurExDatesFull(relidx), EurMatFull(relidx));
options = optimset('disp','iter','MaxFunEvals',1000,'TolFun',1e-5);

% Find the parameters that minimize the difference between the observed and
% predicted prices
x0 = [.1 .01];
lb = [0 0];
ub = [1 1];
HW1Fparams = lsqnonlin(HW1Fobjfun,x0,lb,ub,options);

HW_alpha = HW1Fparams(1)
HW_sigma = HW1Fparams(2)
                                        Norm of      First-order 
 Iteration  Func-count     f(x)          step          optimality
     0          3        0.953772                          20.5
     1          6        0.142828      0.0169199           1.53
     2          9        0.123022      0.0146705           2.31
     3         12        0.122222      0.0154098          0.482
     4         15        0.122217     0.00131297        0.00409 

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the selected value of the function tolerance.

HW_alpha =

    0.0967


HW_sigma =

    0.0088

Создайте HullWhite1F модель с помощью HullWhite1F конструктор.

HW1F = HullWhite1F(RateSpec,HW_alpha,HW_sigma)
HW1F = 

  HullWhite1F with properties:

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

Используйте симуляцию Монте-Карло, чтобы сгенерировать пути процентной ставки с HullWhite1F.simTermStructs.

HW1FSimPaths = HW1F.simTermStructs(nPeriods,'NTRIALS',nTrials,...
    'DeltaTime',DeltaTime,'Tenor',Tenor,'antithetic',true);
trialIdx = 1;
figure
surf(Tenor,SimDates,HW1FSimPaths(:,:,trialIdx))
datetick y keepticks keeplimits
title(['Evolution of the Zero Curve for Trial:' num2str(trialIdx) ' of Hull White Model'])
xlabel('Tenor (Years)')

Оцените европейский swaption.

DF = exp(bsxfun(@times,-HW1FSimPaths,repmat(Tenor',[nPeriods+1 1])));
SwapRate = (1 - DF(exRow,endCol,:))./sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
PayoffValue = 100*max(SwapRate-InstrumentStrike,0).*sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
RealizedDF = prod(exp(bsxfun(@times,-HW1FSimPaths(1:exRow,1,:),SimTimes(1:exRow))),1);
HW1F_SwaptionPrice = mean(RealizedDF.*PayoffValue)
HW1F_SwaptionPrice =

    2.1839                    

Симулируйте пути процентной ставки Используя линейную гауссову 2D факторную модель

В этом примере показано, как симулировать пути процентной ставки с помощью Линейной Гауссовой 2D факторной модели. Прежде, чем начать этот пример, который использует LinearGaussian2F модель, убедитесь, что вы настроили данные как описано в:

Линейная Гауссова 2D факторная модель (названный G2 ++ Бриго и Меркурио, смотрите, Процентная ставка Моделировать Используя симуляцию Монте-Карло) также короткая модель уровня, но включает два фактора. В частности:

r(t)=x(t)+y(t)+ϕ(t)

dx(t)=a(t)x(t)dt+σ(t)dW1(t),x(0)=0

dy(t)=b(t)y(t)dt+η(t)dW2(t),y(0)=0

где dW1(t)dW2(t)=ρdt двумерное Броуновское движение с корреляцией ρ, и ϕ является функцией, выбранной, чтобы совпадать с начальной кривой нулевой ширины.

Функциональный swaptionbylg2f используется для расчета аналитические значения swaption цены за параметры модели, и поэтому может использоваться, чтобы калибровать модель. Калибровка состоит из минимизации различия между наблюдаемыми рыночными ценами (вычисленный выше использования Черного цвета, подразумевал swaption матрицу энергозависимости, смотрите, Вычисляют Черную Модель и Матрицу Энергозависимости Swaption), и предсказанные цены модели.

В этом примере подход подобен, чтобы Симулировать Пути Процентной ставки Используя Белую как оболочка Одну Факторную модель и функцию Optimization Toolbox lsqnonlin используется, чтобы минимизировать различие между наблюдаемыми swaption ценами и предсказанными swaption ценами. Однако другие подходы (например, симулированный отжиг) могут также быть соответствующими. Стартовые параметры и ограничения для a, b, η, ρ и σ установлены в переменных x0, lb, и ub; они могли также варьироваться в зависимости от конкретного калибровочного подхода.

Калибруйте набор параметров, которые минимизируют различие между использованием наблюдаемых и ожидаемых значений swaptionbylg2f и lsqnonlin.

G2PPobjfun = @(x) SwaptionBlackPrices(relidx) - swaptionbylg2f(irdc,x(1),x(2),x(3),x(4),x(5),SwaptionStrike(relidx),...
    EurExDatesFull(relidx),EurMatFull(relidx),'Reset',1);

options = optimset('disp','iter','MaxFunEvals',1000,'TolFun',1e-5);
x0 = [.2 .1 .02 .01 -.5];
lb = [0 0 0 0 -1];
ub = [1 1 1 1 1];
LG2Fparams = lsqnonlin(G2PPobjfun,x0,lb,ub,options)
                                         Norm of      First-order 
 Iteration  Func-count     f(x)          step          optimality
     0          6         12.3547                          67.6
     1         12         1.37984      0.0979743           8.59      
     2         18         1.37984       0.112847           8.59      
     3         24        0.445202      0.0282118           1.31      
     4         30        0.236746      0.0564236           3.02      
     5         36        0.134678      0.0843366           7.78      
     6         42       0.0398816       0.015084           6.34      
     7         48       0.0287731       0.038967          0.732      
     8         54       0.0273025       0.112847          0.881      
     9         60       0.0241689       0.213033           1.06      
    10         66       0.0241689       0.125602           1.06      
    11         72       0.0239103      0.0314005           9.78      
    12         78       0.0234246      0.0286685           1.21      
    13         84       0.0234246      0.0491135           1.21      
    14         90        0.023304      0.0122784           1.67      
    15         96       0.0231931      0.0245568           5.92      
    16        102       0.0230898     0.00785421          0.434      
    17        108       0.0230898      0.0245568          0.434      
    18        114        0.023083     0.00613919          0.255    

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the selected value of the function tolerance.

LG2Fparams =

    0.5752    0.1181    0.0146    0.0119   -0.7895

Создайте G2PP объект с помощью LinearGaussian2F и используйте симуляцию Монте-Карло, чтобы сгенерировать пути процентной ставки с LinearGaussian2F.simTermStructs.

LG2f_a = LG2Fparams(1);
LG2f_b = LG2Fparams(2);
LG2f_sigma = LG2Fparams(3);
LG2f_eta = LG2Fparams(4);
LG2f_rho = LG2Fparams(5);

G2PP = LinearGaussian2F(RateSpec,LG2f_a,LG2f_b,LG2f_sigma,LG2f_eta,LG2f_rho);

G2PPSimPaths = G2PP.simTermStructs(nPeriods,'NTRIALS',nTrials,...
    'DeltaTime',DeltaTime,'Tenor',Tenor,'antithetic',true);

trialIdx = 1;
figure
surf(Tenor,SimDates,G2PPSimPaths(:,:,trialIdx))
datetick y keepticks keeplimits
title(['Evolution of the Zero Curve for Trial:' num2str(trialIdx) ' of G2++ Model'])
xlabel('Tenor (Years)')

Оцените европейский swaption.

DF = exp(bsxfun(@times,-G2PPSimPaths,repmat(Tenor',[nPeriods+1 1])));
SwapRate = (1 - DF(exRow,endCol,:))./sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
PayoffValue = 100*max(SwapRate-InstrumentStrike,0).*sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
RealizedDF = prod(exp(bsxfun(@times,-G2PPSimPaths(1:exRow,1,:),SimTimes(1:exRow))),1);
G2PP_SwaptionPrice = mean(RealizedDF.*PayoffValue)
G2PP_SwaptionPrice =

    2.0988

Симулируйте пути процентной ставки Используя модель рынка LIBOR

В этом примере показано, как симулировать пути процентной ставки с помощью модели рынка LIBOR. Прежде, чем начать этот пример, который использует LiborMarketModel, убедитесь, что вы настроили данные как описано в:

Модель рынка LIBOR (LMM) отличается от коротких моделей уровня, в которых она развивает набор дискретных форвардных курсов. А именно, логарифмически нормальный LMM задает следующее уравнение диффузии для каждого форвардного курса

dFi(t)Fi=μidt+σi(t)dWi

где:

W является N-мерным геометрическим броуновским движением с

dWi(t)dWj(t)=ρij

LMM связывает дрейфы форвардных курсов на основе аргументов без арбитражей. А именно, под Пятном мера LIBOR дрейфы описываются как

μi(t)=σi(t)j=q(t)iτjρi,jσj(t)Fj(t)1+τjFj(t)

где:

τi часть времени, сопоставленная с i th форвардный курс

q(t) является индексом, заданным отношением

Tq(t)1<t<Tq(t)

и Пятно счетные деньги LIBOR задано как

B(t)=P(t,Tq(t))n=0q(t)1(1+τnFn(Tn))

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

Одна из самых популярных функциональных форм в литературе для энергозависимости:

σi(t)=φi(a(Tit)+b)ec(Tit)+d

где ϕ настраивает кривую, чтобы совпадать с энергозависимостью для i th форвардный курс. В данном примере весь ϕ взят, чтобы быть 1. Для корреляции используется следующая функциональная форма:

ρi,j=eβ|ij|

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

(υα,βLFM)2=i,j=α+1βwi(0)wj(0)Fi(0)Fj(0)ρi,jSα,β(0)20Tασi(t)σj(t)dt

где:

wi(t)=τiP(t,Ti)k=α+1βτκP(t,tκ)

Это вычисление сделано с помощью функционального blackvolbyrebonato вычислить аналитические значения swaption цены за параметры модели, и поэтому, затем используется, чтобы калибровать модель. Калибровка состоит из минимизации различия между наблюдаемыми подразумеваемыми swaption Черными колебаниями и предсказанными Черными колебаниями.

В этом примере подход подобен, чтобы Симулировать Пути Процентной ставки Используя Белую как оболочка Одну Факторную модель и Симулировать Пути Процентной ставки Используя Линейную Гауссову 2D Факторную модель, где Optimization Toolbox функционирует lsqnonlin используется, чтобы минимизировать различие между наблюдаемыми swaption ценами и предсказанными swaption ценами. Однако другие подходы (например, симулированный отжиг) могут также быть соответствующими. Стартовые параметры и ограничения для a, b, d и β установлены в переменных x0, lb, и ub; они могли также варьироваться в зависимости от конкретного калибровочного подхода.

Калибруйте набор параметров, которые минимизируют различие между использованием наблюдаемых и ожидаемых значений blackvolbyrebonato и lsqnonlin.

nRates = 10;

CorrFunc = @(i,j,Beta) exp(-Beta*abs(i-j));

objfun = @(x) SwaptionBlackVol(relidx) - blackvolbyrebonato(RateSpec,...
    repmat({@(t) ones(size(t)).*(x(1)*t + x(2)).*exp(-x(3)*t) + x(4)},nRates-1,1),...
    CorrFunc(meshgrid(1:nRates-1)',meshgrid(1:nRates-1),x(5)),...
    EurExDatesFull(relidx),EurMatFull(relidx),'Period',1);

options = optimset('disp','iter','MaxFunEvals',1000,'TolFun',1e-5);

x0 = [.2 .05 1 .05 .2];
lb = [0 0 .5 0 .01];
ub = [1 1 2 .3 1];
LMMparams = lsqnonlin(objfun,x0,lb,ub,options)
                                        Norm of      First-order 
 Iteration  Func-count     f(x)          step          optimality
     0          6        0.156251                         0.483
     1         12      0.00870177       0.188164         0.0339      
     2         18      0.00463441       0.165527        0.00095      
     3         24      0.00331055       0.351017         0.0154      
     4         30      0.00294775      0.0892617       7.47e-05      
     5         36      0.00281565       0.385779        0.00917      
     6         42      0.00278988      0.0145632       4.15e-05      
     7         48      0.00278522       0.115042        0.00116    
Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the selected value of the function tolerance.

LMMparams =

    0.0781    0.1656    0.5121    0.0617    0.0100

Вычислите VolFunc для LMM объект.

a = LMMparams(1);
b = LMMparams(2);
c = LMMparams(3);
d = LMMparams(4);

Beta = LMMparams(5);

VolFunc = repmat({@(t) ones(size(t)).*(a*t + b).*exp(-c*t) + d},nRates-1,1);

Постройте функцию энергозависимости.

figure
fplot(VolFunc{1},[0 20])
title('Volatility Function')

CorrelationMatrix = CorrFunc(meshgrid(1:nRates-1)',meshgrid(1:nRates-1),Beta);

Смотрите корреляционную матрицу.

disp('Correlation Matrix')
fprintf([repmat('%1.3f ',1,length(CorrelationMatrix)) ' \n'],CorrelationMatrix)
Correlation Matrix
1.000 0.990 0.980 0.970 0.961 0.951 0.942 0.932 0.923  
0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.942 0.932  
0.980 0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.942  
0.970 0.980 0.990 1.000 0.990 0.980 0.970 0.961 0.951  
0.961 0.970 0.980 0.990 1.000 0.990 0.980 0.970 0.961  
0.951 0.961 0.970 0.980 0.990 1.000 0.990 0.980 0.970  
0.942 0.951 0.961 0.970 0.980 0.990 1.000 0.990 0.980  
0.932 0.942 0.951 0.961 0.970 0.980 0.990 1.000 0.990  
0.923 0.932 0.942 0.951 0.961 0.970 0.980 0.990 1.000  

Создайте LMM объект с помощью LiborMarketModel и используйте симуляцию Монте-Карло, чтобы сгенерировать пути процентной ставки с LiborMarketModel.simTermStructs.

LMM = LiborMarketModel(irdc,VolFunc,CorrelationMatrix,'Period',1);

[LMMZeroRates, ForwardRates] = LMM.simTermStructs(nPeriods,'nTrials',nTrials);

trialIdx = 1;
figure
tmpPlotData = LMMZeroRates(:,:,trialIdx);
tmpPlotData(tmpPlotData == 0) = NaN;
surf(Tenor,SimDates,tmpPlotData)
title(['Evolution of the Zero Curve for Trial:' num2str(trialIdx) ' of LIBOR Market Model'])
xlabel('Tenor (Years)')

Оцените европейский swaption.

DF = exp(bsxfun(@times,-LMMZeroRates,repmat(Tenor',[nPeriods+1 1])));
SwapRate = (1 - DF(exRow,endCol,:))./sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
PayoffValue = 100*max(SwapRate-InstrumentStrike,0).*sum(bsxfun(@times,1,DF(exRow,1:endCol,:)));
RealizedDF = prod(exp(bsxfun(@times,-LMMZeroRates(2:exRow+1,1,:),SimTimes(1:exRow))),1);
LMM_SwaptionPrice = mean(RealizedDF.*PayoffValue)
LMM_SwaptionPrice =

    1.9915

Сравните результаты моделирования процентной ставки

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

Сравните результаты для оценки европейского swaption с моделями процентной ставки с помощью симуляции Монте-Карло.

disp(' ')
fprintf('     # of Monte Carlo Trials: %8d\n'    , nTrials)
fprintf('     # of Time Periods/Trial: %8d\n\n'  , nPeriods)
fprintf('HW1F European Swaption Price: %8.4f\n', HW1F_SwaptionPrice)
fprintf('LG2F Europesn Swaption Price: %8.4f\n', G2PP_SwaptionPrice)
fprintf(' LMM European Swaption Price: %8.4f\n', LMM_SwaptionPrice)
 # of Monte Carlo Trials:     1000
     # of Time Periods/Trial:        5

HW1F European Swaption Price:   2.1839
LG2F Europesn Swaption Price:   2.0988
 LMM European Swaption Price:   1.9915

Ссылки

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

Андерсен, L. и В. Питербарг. Моделирование процентной ставки. Атлантическое финансовое нажатие. 2010.

Оболочка, J. Опции, фьючерсы и другие производные. Финансы Спрингера, 2003.

Глассермен, P. Методы Монте-Карло в финансовой разработке. Prentice Hall, 2008.

Rebonato, R., К. Маккей и R. Белый. Модель Рынка Sabr/Libor: Оценка, Калибровка и Хеджирование для Комплексных Производных Процентной ставки. John Wiley & Sons, 2010.

Смотрите также

| | | | | | | | | | |

Связанные примеры

Больше о