Создайте finportfolio
объект
Создайте finportfolio
объект для набора инструментальных объектов.
После создания инструментов модели и объекты калькулятора цен, используют finportfolio
создать finportfolio
объект для набора инструментов. Для более подробной информации об этом рабочем процессе смотрите Начало работы с Рабочими процессами Используя Основанную на объектах Среду для Оценки Финансовых инструментов.
Для получения дополнительной информации о доступных инструментах видят модели и методы ценообразования, Выбирают Instruments, Models и Pricers.
создает пустой finportfolio_obj
= finportfoliofinportfolio
объект.
создает finportfolio_obj
= finportfolio(inInstruments
)finportfolio
объект, содержащий инструмент, возражает inInstruments
.
создает finportfolio_obj
= finportfolio(inInstruments
,inPricers
)finportfolio
объект, содержащий инструмент, возражает inInstruments
и калькулятор цен возражает inPricers
.
опционально устанавливает finportfolio_obj
= finportfolio(___,inQuant
)inQuant
свойство, которое задает количество инструментов. Используйте этот синтаксис с любой из комбинаций входных аргументов в предыдущих синтаксисах, чтобы установить свойства для finportfolio
объект. Например, finportfolio_obj = finportfolio([CapObj,FloorObj,SwaptionObj],[BlackPricerObj,NormalPricerObj,SabrPricerObj])
создает finportfolio
объект, который содержит объекты калькулятора цен и инструмент.
inInstruments
— Инструмент возражает в портфелеИнструмент возражает в портфеле в виде скалярного объекта Instrument или массива Инструментальных объектов.
Типы данных: object
inPricers
— Калькулятор цен возражает в портфелеКалькулятор цен возражает в портфеле в виде скалярного объекта Pricer или массива объектов Калькулятора цен.
Типы данных: object
inQuant
— Количество инструментовКоличество инструментов в виде числового скаляра или NINST
- 1
массив числовых значений. Используйте положительное значение для длинных позиций и отрицательную величину для коротких позиций.
Типы данных: double
Instruments
— Инструмент возражает в портфелеИнструмент возражает в портфеле, возвращенном как скалярный инструментальный объект или массив инструментальных объектов.
Типы данных: struct
Pricers
— Калькулятор цен возражает в портфелеКалькулятор цен возражает в портфеле, возвращенном как скалярный объект калькулятора цен или массив объектов калькулятора цен.
Типы данных: struct
PricerIndex
— Отображение инструмента возражает против объектов калькулятора цен в портфелеЭто свойство доступно только для чтения.
Отображение инструмента объекты к объектам калькулятора цен в портфеле, возвращенном как числовой.
PricerIndex
имеет длину, равную количеству инструментальных объектов в finportfolio
объект и хранилища, индекс которых калькулятор цен используется для каждого инструментального объекта.
Типы данных: struct
Quantity
— Количество инструментовКоличество инструментов, возвращенных как скалярный числовой или числовой массив.
Типы данных: double
pricePortfolio | Вычислите цену и чувствительность для портфеля инструментов |
addInstrument | Добавьте инструмент в портфель инструментов |
removeInstrument | Удалите инструмент из портфеля инструментов |
setPricer | Установите калькулятор цен для 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
объект калькулятора цен и использование 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
Возразите и добавьте вызываемый инструмент связи
Создайте 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
PricerIndex
свойство имеет длину, равную длине инструментальных объектов в finportfolio
объект и хранилища, индекс которых калькулятор цен используется для каждого инструментального объекта. В этом случае, потому что существует только один калькулятор цен, каждый инструмент должен использовать тот калькулятор цен.
Ценовой портфель
Используйте pricePortfolio
вычислить цену и чувствительность для портфеля и связи и инструментов опции в портфеле.
format bank
[PortPrice,InstPrice,PortSens,InstSens] = pricePortfolio(myportfolio)
PortPrice = 600.55
InstPrice = 5×1
96.5943
204.1377
200.0000
0.0487
99.7738
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
и pricePortfolio
создать и оценить портфель, содержащий три FixedBond
инструменты и три американских Vanilla
инструменты опции.
Создайте FixedBond
Инструментальный объект
Используйте fininstrument
создать FixedBond
инструментальный объект для трех Фиксированных инструментов Связи.
FixB = fininstrument("FixedBond",'Maturity',datetime([2022,9,15 ; 2022,10,15 ; 2022,11,15]),'CouponRate',0.05,'Name',"fixed_bond")
FixB=3×1 object
3x1 FixedBond array with properties:
CouponRate
Period
Basis
EndMonthRule
Principal
DaycountAdjustedCashFlow
BusinessDayConvention
Holidays
IssueDate
FirstCouponDate
LastCouponDate
StartDate
Maturity
Name
Создайте 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
объект калькулятора цен и использование ratecurve
объект для 'DiscountCurve'
аргумент пары "имя-значение".
FBPricer = finpricer("Discount",'DiscountCurve',myRC)
FBPricer = Discount with properties: DiscountCurve: [1x1 ratecurve]
Создайте Vanilla
Инструментальный объект
Используйте fininstrument
создать американский Vanilla
инструментальный объект для трех инструментов Ванили.
Maturity = datetime([2023,9,15 ; 2023,10,15 ; 2023,11,15]); AmericanOpt = fininstrument("Vanilla",'ExerciseDate',Maturity,'Strike',120,'ExerciseStyle',"american",'Name',"vanilla_option")
AmericanOpt=3×1 object
3x1 Vanilla array with properties:
OptionType
ExerciseStyle
ExerciseDate
Strike
Name
Создайте 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, BJSPricer, BJSPricer, FBPricer, FBPricer, FBPricer])
f1 = finportfolio with properties: Instruments: [6x1 fininstrument.FinInstrument] Pricers: [6x1 finpricer.FinPricer] PricerIndex: [6x1 double] Quantity: [6x1 double]
Ценовой портфель
Используйте pricePortfolio
вычислить цену и чувствительность для портфеля и инструментов в портфеле.
[PortPrice,InstPrice,PortSens,InstSens] = pricePortfolio(f1)
PortPrice = 358.4108
InstPrice = 6×1
3.1912
3.2579
3.3272
115.9753
116.2114
116.4478
PortSens=1×8 table
Price DV01 Delta Gamma Lambda Vega Theta Rho
______ _______ _______ ________ ______ ______ _______ ______
358.41 0.13159 0.70286 0.034471 21.572 198.96 -2.4455 266.62
InstSens=6×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
vanilla_option_1 3.2579 NaN 0.23427 0.011494 7.1907 66.314 -0.81353 88.842
vanilla_option_2 3.3272 NaN 0.23672 0.011455 7.1147 67.196 -0.81784 91.063
fixed_bond 115.98 0.04295 NaN NaN NaN NaN NaN NaN
fixed_bond_1 116.21 0.043858 NaN NaN NaN NaN NaN NaN
fixed_bond_2 116.45 0.044786 NaN NaN NaN NaN NaN NaN
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.