SABRBraceGatarekMusiela

Создайте SABRBraceGatarekMusiela объект модели для Capпол, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструмент

Описание

Создайте и оцените Capпол, FloatBond, FloatBondOption, FixedBond, FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструментальный объект с SABRBraceGatarekMusiela модель с помощью этого рабочего процесса:

  1. Использование fininstrument создать Capпол, FixedBond, FloatBond, FloatBondOption FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструментальный объект.

  2. Использование finmodel задавать SABRBraceGatarekMusiela объект модели для Capпол, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструментальный объект.

  3. Использование finpricer задавать IRMonteCarlo метод ценообразования для Capпол, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструментальный объект.

Для получения дополнительной информации об этом рабочем процессе смотрите Начало работы с Рабочими процессами Используя Основанную на объектах Среду для Оценки Финансовых инструментов.

Для получения дополнительной информации о доступных методах ценообразования для Capпол, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, или OptionEmbeddedFloatBond инструмент, смотрите, Выбирают Instruments, Models и Pricers.

Создание

Описание

пример

SABRBraceGatarekMusielaModelObj = finmodel(ModelType,'Alpha',alpha_value,'Beta',beta_value,'VolatilityofVolatility',volatilityofvolatility_value,'FwdFwdCorrelation',fwdfwdcorrelation_value,'VolVolCorrelation',volvolcorrelation_value) создает классический SABRBraceGatarekMusiela объект модели с пустым указателем передает корреляции энергозависимости путем определения ModelType и необходимые аргументы пары "имя-значение" Alpha\beta, VolatilityofVolatility, FwdFwdCorrelation, и VolVolCorrelation установить аргументы пары "имя-значение" использования свойств. Например, SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'FwdFwdCorrelation',FwdFwdCorrelation, 'VolVolCorrelation',VolVolCorrelation) создает классический SABRBraceGatarekMusiela объект модели с пустым указателем передает корреляции энергозависимости.

пример

SABRBraceGatarekMusielaModelObj = finmodel(___,Name,Value) устанавливает дополнительные свойства с помощью дополнительных пар "имя-значение" в дополнение к обязательным аргументам в предыдущем синтаксисе. Можно задать несколько аргументов пары "имя-значение". Например, можно использовать пары "имя-значение", чтобы создать следующие изменения SABRBraceGatarekMusiela модель:

  • Создать классический SABRBraceGatarekMusiela объект модели, используйте FwdVolCorrelation аргумент пары "имя-значение": SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'FwdFwdCorrelation',FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation,'FwdVolCorrelation',FwdVolCorrelation)

  • Создать классический SABRBraceGatarekMusiela объект модели в Rebonato параметрическая форма с пустой корреляцией форварда к энергозависимости, используйте Volatility аргумент пары "имя-значение": SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'Volatility',VolFunc,'FwdFwdCorrelation', FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation)

  • Создать классический SABRBraceGatarekMusiela объект модели в Rebonato параметрическая форма с FwdVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.02), используйте Volatility и FwdVolCorrelation аргументы в виде пар имя-значение: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'Volatility',VolFunc,'FwdFwdCorrelation', FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation) .

Входные параметры

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

Тип модели в виде строки со значением "SABRBraceGatarekMusiela" или вектор символов со значением 'SABRBraceGatarekMusiela'.

Типы данных: char | string

SABRBraceGatarekMusiela Аргументы в виде пар имя-значение

Задайте требуемые и дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'FwdFwdCorrelation',FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation)

Начальные колебания SABR для каждого срока погашения форвардного курса в виде разделенной запятой пары, состоящей из 'Alpha' и (NumRates-1)-by-1 вектор из положительных числовых значений.

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

Параметры экспоненты SABR для каждого срока погашения форвардного курса в виде разделенной запятой пары, состоящей из 'Beta' и (NumRates-1)-by-1 вектор из числовых значений между 0 и 1.

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

Изменение энергозависимости в виде разделенной запятой пары, состоящей из 'VolatilityofVolatility' и (NumRates-1)-by-1 cell-массив указателей на функцию. Каждый указатель на функцию должен занять время как вход и возвратить скалярную энергозависимость энергозависимости, которая должна быть положительна числовой.

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

Корреляционная матрица для форвардных курсов в виде разделенной запятой пары, состоящей из 'FwdFwdCorrelation' и (NumRates-1) (NumRates-1) корреляционная матрица.

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

Корреляционная матрица для колебаний в виде разделенной запятой пары, состоящей из 'VolVolFwdCorrelation' и (NumRates-1) (NumRates-1) корреляционная матрица.

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

Дополнительный SABRBraceGatarekMusiela Аргументы в виде пар имя-значение

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

Энергозависимость в виде разделенной запятой пары, состоящей из 'Volatility' и (NumRates-1)-by-1 cell-массив указателей на функцию. Задайте эти дополнительные указатели на функцию энергозависимости, чтобы использовать Rebonato (2009) параметрическая форма, которая симулирует стохастические колебания с детерминированными функциями энергозависимости и стохастические термины коррекции. Каждый указатель на функцию должен занять время как вход и возвратить скалярную энергозависимость, которая должна быть положительна числовой.

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

Корреляционная матрица между форвардными курсами и колебаниями в виде разделенной запятой пары, состоящей из 'FwdVolCorrelation' и (NumRates-1) (NumRates-1) корреляционная матрица. Диагональными элементами матрицы являются параметры Ро SABR.

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

Период форвардных курсов в виде разделенной запятой пары, состоящей из 'Period' и числовой скаляр. Значением по умолчанию является 2, означающие форвардные курсы расположены с интервалами в 0, .5, 1, 1.5, и так далее.

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

Свойства

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

Начальные колебания SABR для каждого срока погашения форвардного курса, возвращенного как NumRates-1- 1 вектор из положительных числовых значений.

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

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

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

Изменение энергозависимости, возвращенной как NumRates-1- 1 cell-массив указателей на функцию.

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

Корреляционная матрица для форвардных курсов, возвращенных как (NumRates-1) (NumRates-1) корреляционная матрица.

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

Корреляционная матрица для колебаний, возвращенных как (NumRates-1) (NumRates-1) корреляционная матрица.

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

Энергозависимость, возвращенная как NumRates-1- 1 cell-массив указателей на функцию.

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

Корреляционная матрица между форвардными курсами и колебаниями, возвращенными как (NumRates-1) (NumRates-1) корреляционная матрица.

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

Период форвардных курсов, возвращенных как числовой скаляр.

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

Примеры

свернуть все

Этот пример показывает рабочий процесс, чтобы оценить Cap инструмент, когда вы используете SABRBraceGatarekMusiela модель с пустой корреляцией Прямой Энергозависимости и IRMonteCarlo метод ценообразования.

Создайте Cap Инструментальный объект

Используйте fininstrument создать Cap инструментальный объект.

CapOpt = fininstrument("Cap",'Maturity',datetime(2021,7,1),'Strike',0.035,'Name',"cap_option")
CapOpt = 
  Cap with properties:

                      Strike: 0.0350
                    Maturity: 01-Jul-2021
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                   Principal: 100
             ProjectionCurve: [0x0 ratecurve]
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                        Name: "cap_option"

Создайте классику SABRBraceGatarekMusiela Объект модели с пустой корреляцией прямой энергозависимости

Используйте finmodel создать SABRBraceGatarekMusiela объект модели, который является классической моделью SABR-BGM с пустой корреляцией Прямой Энергозависимости.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

numRates = 5;
VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);

SABRBGM_NF = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'FwdFwdCorrelation',FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation)
SABRBGM_NF = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте IRMonteCarlo Объект калькулятора цен

Используйте finpricer создать IRMonteCarlo объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",'Model',SABRBGM_NF,'DiscountCurve',myRC,'SimulationDates',simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    ...    ]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Цена Cap Инструмент

Используйте price вычислить цену и чувствительность для Cap инструмент.

[Price,outPR] = price(outPricer,CapOpt,["all"])
Price = 3.4214
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price      Delta       Gamma   
    ______    _______    __________

    3.4214    -722.09    5.2843e+05

Можно получить доступ к симулированной процентной ставке Paths в PricerData вывод .

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

Этот пример показывает рабочий процесс, чтобы оценить Floor инструмент, когда вы используете классический SABRBraceGatarekMusiela модель и IRMonteCarlo метод ценообразования.

Создайте Floor Инструментальный объект

Используйте fininstrument создать Floor инструментальный объект.

FloorOpt = fininstrument("Floor","Maturity",datetime(2021,7,1),'Strike',0.05,'Reset',1,'Name',"floor_option")
FloorOpt = 
  Floor with properties:

                      Strike: 0.0500
                    Maturity: 01-Jul-2021
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                   Principal: 100
             ProjectionCurve: [0x0 ratecurve]
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                        Name: "floor_option"

Создайте классику SABRBraceGatarekMusiela Объект модели

Используйте finmodel создать классический SABRBraceGatarekMusiela объект модели.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

numRates = 5;
VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);
SABRRho = [0.0005;0.0006;0.0060;0.0055];
FwdVolCorrelation = diag(SABRRho);

SABRBGM_Classic = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'FwdFwdCorrelation',FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation,'FwdVolCorrelation',FwdVolCorrelation)
SABRBGM_Classic = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте IRMonteCarlo Объект калькулятора цен

Используйте finpricer создать IRMonteCarlo объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",'Model',SABRBGM_Classic,'DiscountCurve',myRC,'SimulationDates',simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    ...    ]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Цена Floor Инструмент

Используйте price вычислить цену и чувствительность для Floor инструмент.

[Price,outPR] = price(outPricer,FloorOpt,["all"])
Price = 11.5243
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price      Delta     Gamma
    ______    _______    _____

    11.524    -180.89    4299 

Можно получить доступ к симулированной процентной ставке Paths в PricerData вывод .

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

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

Создайте FixedBond Инструментальный объект

Используйте fininstrument создать FixedBond инструментальный объект.

FixB = fininstrument("FixedBond",'Maturity',datetime(2021,7,1),'CouponRate',0.021,'Period',2,'Basis',1,'Principal',100,'Name',"fixed_bond_instrument")
FixB = 
  FixedBond with properties:

                  CouponRate: 0.0210
                      Period: 2
                       Basis: 1
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jul-2021
                        Name: "fixed_bond_instrument"

Создайте форму Rebonato с пустой корреляцией прямой энергозависимости SABRBraceGatarekMusiela Объект модели

Используйте finmodel создать SABRBraceGatarekMusiela объект модели, который является моделью SABR-BGM в Rebonato параметрическая форма с пустой корреляцией Прямой Энергозависимости.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];
numRates = 5;

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

SABRBGMVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolParams = [.2 -.01 .8 .16];
VolFunc(1:numRates-1,1) = {@(t) SABRBGMVolFunc(SABRBGMVolParams,t)};

VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);

SABRBGM_Rebonato = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'Volatility', VolFunc,'FwdFwdCorrelation', FwdFwdCorrelation, 'VolVolCorrelation', VolVolCorrelation)
SABRBGM_Rebonato = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте IRMonteCarlo Объект калькулятора цен

Используйте finpricer создать IRMonteCarlo объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",'Model',SABRBGM_Rebonato,'DiscountCurve',myRC,'SimulationDates',simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    ...    ]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Цена FixedBond Инструмент

Используйте price вычислить цену и чувствительность для FixedBond инструмент.

[Price,outPR] = price(outPricer,FixB,["all"])
Price = 103.5433
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price     Delta     Gamma
    ______    ______    _____

    103.54    -253.5    628.2

Можно получить доступ к симулированной процентной ставке Paths в PricerData вывод .

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

Этот пример показывает рабочий процесс, чтобы оценить FloatBond инструмент, когда вы используете SABRBraceGatarekMusiela модель в Rebonato параметрическая форма и IRMonteCarlo метод ценообразования.

Создайте FloatBond Инструментальный объект

Используйте fininstrument создать FloatBond инструментальный объект.

FloatB = fininstrument("FloatBond",'Maturity',datetime(2021,7,1),'Spread',0.025,'Reset',2,'Basis',1,'Principal',100,'EndMonthRule',false,'Name',"float_bond_instrument")
FloatB = 
  FloatBond with properties:

                      Spread: 0.0250
             ProjectionCurve: [0x0 ratecurve]
                 ResetOffset: 0
                       Reset: 2
                       Basis: 1
                EndMonthRule: 0
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
          LatestFloatingRate: NaN
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jul-2021
                        Name: "float_bond_instrument"

Создайте форму Rebonato SABRBraceGatarekMusiela Объект модели

Используйте finmodel создать SABRBraceGatarekMusiela объект модели, который является моделью SABR-BGM в Rebonato параметрическая форма.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];
numRates = 5;

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

SABRBGMVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolParams = [.2 -.01 .8 .16];
VolFunc(1:numRates-1,1) = {@(t) SABRBGMVolFunc(SABRBGMVolParams,t)};

VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);
SABRRho = [0.0005;0.0006;0.0060;0.0055];
FwdVolCorrelation = diag(SABRRho);

SABRBGM_Rebonato_param = finmodel("SABRBraceGatarekMusiela",'Alpha',Alpha,'Beta',Beta,'VolatilityofVolatility',VolVolFunc,'Volatility',VolFunc,'FwdFwdCorrelation',FwdFwdCorrelation,'VolVolCorrelation',VolVolCorrelation,'FwdVolCorrelation',FwdVolCorrelation)
SABRBGM_Rebonato_param = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте IRMonteCarlo Объект калькулятора цен

Используйте finpricer создать IRMonteCarlo объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",'Model',SABRBGM_Rebonato_param,'DiscountCurve',myRC,'SimulationDates',simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    ...    ]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Цена FloatBond Инструмент

Используйте price вычислить цену и чувствительность для FloatBond инструмент.

[Price,outPR] = price(outPricer,FloatB,["all"])
Price = 106.1830
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price      Delta     Gamma 
    ______    _______    ______

    106.18    -9.2496    16.927

Можно получить доступ к симулированной процентной ставке Paths в PricerData вывод .

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

Больше о

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

Ссылки

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

[2] Crispoldi, C., Wigger, G. и П. Ларкин. SABR и модели рынка SABR LIBOR на практике. Пэлгрэйв Макмиллан, 2015.

[3] Хейган, P. и А. Лесниевский. Модель рынка LIBOR с Энергозависимостью Стиля SABR. Рабочий документ JPMorgan Chase, 2008.

[4] Rebonato, R., Маккей, K. и R. Белый. Модель Рынка SABR/LIBOR: оценка, Калибровка и Хеджирование для Комплексных Производных Процентной ставки. Вайли, 2009.

Введенный в R2021b