Создайте finportfolio объект
Создайте finportfolio объект для набора объектов инструмента.
После создания инструментов, моделей и ценовых объектов используйте finportfolio для создания finportfolio объект для набора инструментов. Для получения дополнительной информации об этом рабочем процессе смотрите Запуск с рабочими процессами с использованием объектной среды для ценообразования финансовых инструментов.
Для получения дополнительной информации о доступных инструментах, моделях и методах ценообразования смотрите Выбор инструментов, Моделей и Ценников.
создает пустой 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 или массив объектов Instrument.
Типы данных: object
inPricers - Ценовые объекты в портфолиоОбъекты ценника в портфолио, заданные как скалярный объект Pricer или массив объектов Pricer.
Типы данных: object
inQuant - Количество приборовКоличество инструментов, заданное в виде скалярного числа или NINST-by- 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 и используйте объект 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
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.