pricePortfolio

Вычисление цены и чувствительности для портфеля инструментов

Описание

пример

[PortPrice,InstPrice,PortSens,InstSens] = pricePortfolio(inPort) вычисляет цену и чувствительность для портфеля инструментов, который ранее был создан с помощью finportfolio.

Примеры

свернуть все

Использование finportfolio и pricePortfolio создать и оценить портфель, содержащий FixedBond инструмент и американский Vanilla опционный прибор.

Создание FixedBond Объект прибора

Использование fininstrument для создания FixedBond объект прибора.

FixB = fininstrument("FixedBond",'Maturity',datetime(2022,9,15),'CouponRate',0.05,'Name',"fixed_bond")
FixB = 
  FixedBond with properties:

                  CouponRate: 0.0500
                      Period: 2
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 15-Sep-2022
                        Name: "fixed_bond"

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

Создайте ratecurve объект, использующий ratecurve.

Settle = datetime(2018,9,15);
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: 15-Sep-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создание Discount Объект ценника для FixedBond Инструмент

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

FBPricer = finpricer("Discount",'DiscountCurve',myRC)
FBPricer = 
  Discount with properties:

    DiscountCurve: [1x1 ratecurve]

Создание Vanilla Объект прибора

Использование fininstrument создать американскую Vanilla объект прибора.

Maturity = datetime(2023,9,15);
AmericanOpt = fininstrument("Vanilla",'ExerciseDate',Maturity,'Strike',120,'ExerciseStyle',"american",'Name',"vanilla_option")
AmericanOpt = 
  Vanilla with properties:

       OptionType: "call"
    ExerciseStyle: "american"
     ExerciseDate: 15-Sep-2023
           Strike: 120
             Name: "vanilla_option"

Создание BlackScholes Объект модели для Vanilla Инструмент

Использование finmodel для создания BlackScholes объект модели.

BSModel = finmodel("BlackScholes",'Volatility',0.12)
BSModel = 
  BlackScholes with properties:

     Volatility: 0.1200
    Correlation: 1

Создание BjerksundStensland Объект ценника для Vanilla Инструмент

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

BJSPricer = finpricer("analytic",'Model',BSModel,'DiscountCurve',myRC,'SpotPrice',100,'DividendValue',.02,'PricingMethod',"BjerksundStensland")
BJSPricer = 
  BjerksundStensland with properties:

    DiscountCurve: [1x1 ratecurve]
            Model: [1x1 finmodel.BlackScholes]
        SpotPrice: 100
    DividendValue: 0.0200
     DividendType: "continuous"

Добавьте инструменты к finportfolio Объект

Создайте finportfolio объект, использующий finportfolio и добавить эти два инструмента со связанными ценами в портфель.

f1 = finportfolio([AmericanOpt,FixB],[BJSPricer,FBPricer])
f1 = 
  finportfolio with properties:

    Instruments: [2x1 fininstrument.FinInstrument]
        Pricers: [2x1 finpricer.FinPricer]
    PricerIndex: [2x1 double]
       Quantity: [2x1 double]

Ценовой портфель

Использование pricePortfolio вычислить цену и чувствительность для портфеля и инструментов в портфеле.

[PortPrice,InstPrice,PortSens,InstSens] = pricePortfolio(f1)
PortPrice = 119.1665
InstPrice = 2×1

    3.1912
  115.9753

PortSens=1×8 table
    Price      DV01       Delta      Gamma      Lambda     Vega      Theta       Rho 
    ______    _______    _______    ________    ______    ______    ________    _____

    119.17    0.04295    0.23188    0.011522    7.2661    65.454    -0.81408    86.71

InstSens=2×8 table
                      Price      DV01       Delta      Gamma      Lambda     Vega      Theta       Rho 
                      ______    _______    _______    ________    ______    ______    ________    _____

    vanilla_option    3.1912        NaN    0.23188    0.011522    7.2661    65.454    -0.81408    86.71
    fixed_bond        115.98    0.04295        NaN         NaN       NaN       NaN         NaN      NaN

В этом примере показан рабочий процесс создания и ценообразования портфеля инструментов облигаций и опций по облигациям. Можно использовать finportfolio и pricePortfolio к ценам FixedBond, FixedBondOption, OptionEmbeddedFixedBond, и FloatBond инструменты, использующие IRTree метод ценообразования.

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

Создайте ratecurve объект, использующий ratecurve.

Settle = datetime(2018, 1, 1);
 ZeroTimes = calyears(1:4)';
 ZeroRates = [0.035; 0.042147; 0.047345; 0.052707];
 ZeroDates = Settle + ZeroTimes;
 Compounding = 1;
 ZeroCurve = ratecurve("zero",Settle,ZeroDates,ZeroRates, "Compounding",Compounding)
ZeroCurve = 
  ratecurve with properties:

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

Создание облигаций и опционных инструментов

Использование fininstrument для создания FixedBond, FixedBondOption, OptionEmbeddedFixedBond, и FloatBond объекты прибора.

CDates = datetime([2020,1,1 ; 2022,1,1]);
CRates = [.0425; .0750];
CouponRate = timetable(CDates,CRates);
Maturity = datetime(2022,1,1);
Period = 1;

% Vanilla FixedBond
VBond = fininstrument("FixedBond",'Maturity',Maturity,'CouponRate',0.0425,'Period',Period,'Name',"vanilla_fixed") 
VBond = 
  FixedBond with properties:

                  CouponRate: 0.0425
                      Period: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2022
                        Name: "vanilla_fixed"

 % Stepped coupon bond
SBond = fininstrument("FixedBond",'Maturity',Maturity,'CouponRate',CouponRate,'Period',Period,'Name',"stepped_coupon_bond") 
SBond = 
  FixedBond with properties:

                  CouponRate: [2x1 timetable]
                      Period: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2022
                        Name: "stepped_coupon_bond"

% FloatBond
Spread = 0;
Reset = 1;
Float = fininstrument("FloatBond",'Maturity',Maturity,'Spread',Spread,'Reset', Reset,...
                      'ProjectionCurve',ZeroCurve,'Name',"floatbond")
Float = 
  FloatBond with properties:

                      Spread: 0
             ProjectionCurve: [1x1 ratecurve]
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
          LatestFloatingRate: NaN
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2022
                        Name: "floatbond"

% Call option
Strike = 100;
ExerciseDates = datetime(2020,1,1); 
OptionType ='call';
Period = 1;
CallOption = fininstrument("FixedBondOption",'Strike',Strike,'ExerciseDate',ExerciseDates,...
                   'OptionType',OptionType,'ExerciseStyle',"american",'Bond', VBond,'Name',"fixed_bond_option")    
CallOption = 
  FixedBondOption with properties:

       OptionType: "call"
    ExerciseStyle: "american"
     ExerciseDate: 01-Jan-2020
           Strike: 100
             Bond: [1x1 fininstrument.FixedBond]
             Name: "fixed_bond_option"

% Option for embedded bond (callable bond)
CDates = datetime([2020,1,1 ; 2022,1,1]);
CRates = [.0425; .0750];
CouponRate = timetable(CDates,CRates);
StrikeOE = [100; 100];
ExerciseDatesOE = [datetime(2020,1,1); datetime(2021,1,1)];
CallSchedule =  timetable(ExerciseDatesOE,StrikeOE,'VariableNames',{'Strike Schedule'}); 
CallableBond = fininstrument("OptionEmbeddedFixedBond", 'Maturity',Maturity,...
                              'CouponRate',CouponRate,'Period', Period, ...
                              'CallSchedule',CallSchedule,'Name',"option_embedded_fixedbond")
CallableBond = 
  OptionEmbeddedFixedBond with properties:

                  CouponRate: [2x1 timetable]
                      Period: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2022
                   CallDates: [2x1 datetime]
                    PutDates: [0x1 datetime]
                CallSchedule: [2x1 timetable]
                 PutSchedule: [0x0 timetable]
           CallExerciseStyle: "american"
            PutExerciseStyle: [0x0 string]
                        Name: "option_embedded_fixedbond"

Создание HullWhite Модель

Использование finmodel для создания HullWhite объект модели.

VolCurve = 0.01;
AlphaCurve = 0.1;

HWModel = finmodel("hullwhite",'alpha',AlphaCurve,'sigma',VolCurve)
HWModel = 
  HullWhite with properties:

    Alpha: 0.1000
    Sigma: 0.0100

Создание IRTree Стоимость для HullWhite Модель

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

HWTreePricer = finpricer("IRTree",'Model',HWModel,'DiscountCurve',ZeroCurve,'TreeDates',ZeroDates)
HWTreePricer = 
  HWBKTree with properties:

             Tree: [1x1 struct]
        TreeDates: [4x1 datetime]
            Model: [1x1 finmodel.HullWhite]
    DiscountCurve: [1x1 ratecurve]

Создание finportfolio Объект и добавление Callable Bond Instrument

Создайте finportfolio объект с ванильной облигацией, ступенчатой купонной облигацией, плавающей облигацией и опцией вызова.

myportfolio = finportfolio([VBond,SBond,Float,CallOption],HWTreePricer, [1,2,2,1])
myportfolio = 
  finportfolio with properties:

    Instruments: [4x1 fininstrument.FinInstrument]
        Pricers: [1x1 finpricer.irtree.HWBKTree]
    PricerIndex: [4x1 double]
       Quantity: [4x1 double]

Использование addInstrument для добавления инструмента вызываемой облигации к существующему портфелю.

myportfolio = addInstrument(myportfolio,CallableBond,HWTreePricer,1)
myportfolio = 
  finportfolio with properties:

    Instruments: [5x1 fininstrument.FinInstrument]
        Pricers: [1x1 finpricer.irtree.HWBKTree]
    PricerIndex: [5x1 double]
       Quantity: [5x1 double]

myportfolio.PricerIndex
ans = 5×1

     1
     1
     1
     1
     1

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

Ценовой портфель

Использование pricePortfolio вычислить цену и чувствительность для портфеля и облигационных и опционных инструментов в портфеле.

format bank
[PortPrice,InstPrice,PortSens,InstSens] = pricePortfolio(myportfolio)
PortPrice = 
        600.55

InstPrice = 5×1

         96.59
        204.14
        200.00
          0.05
         99.77

PortSens=1×4 table
    Price      Vega      Gamma      Delta  
    ______    ______    _______    ________

    600.55    -63.40    5759.65    -1297.48

InstSens=5×4 table
                                 Price      Vega      Gamma      Delta 
                                 ______    ______    _______    _______

    vanilla_fixed                 96.59     -0.00    1603.49    -344.81
    stepped_coupon_bond          204.14      0.00    3364.60    -725.96
    floatbond                    200.00     -0.00      -0.00       0.00
    fixed_bond_option              0.05     12.48      24.15      -3.69
    option_embedded_fixedbond     99.77    -75.88     767.41    -223.03

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

свернуть все

Объект портфеля, ранее созданный с использованием finportfolio.

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

Выходные аргументы

свернуть все

Цена портфеля инструментов, возвращаемая числом.

Цены на приборы, возвращенные в виде числа.

Чувствительности портфеля, возвращенные в виде числа.

Чувствительность инструмента, возвращенная в виде числа.

Введенный в R2020a
Для просмотра документации необходимо авторизоваться на сайте