exponenta event banner

OptionEmbeddedFloatBond

OptionEmbeddedFloatBond объект прибора

Описание

Создать и оценить OptionEmbeddedFloatBond объект инструмента с использованием этого рабочего процесса:

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

  2. Использовать finmodel для указания HullWhite или BlackKarasinski модель для OptionEmbeddedFloatBond инструмент.

  3. Использовать finpricer для указания IRTree метод ценообразования для OptionEmbeddedFloatBond инструмент.

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

Для получения дополнительной информации о доступных моделях и методах ценообразования для OptionEmbeddedFloatBond см. раздел Выбор приборов, моделей и прайсеров.

Создание

Описание

пример

OptionEmbeddedFloatBondObj = fininstrument(InstrumentType,'Spread',spread_value,'Maturity',maturity_date,'CallSchedule',call_schedule_value) создает OptionEmbeddedFloatBond путем указания объекта InstrumentType и требуемые аргументы пары имя-значение Spread, Maturity, и CallSchedule задает свойства, используя необходимые аргументы пары имя-значение.

OptionEmbeddedFloatBond поддерживает ванильные связи со встроенными опциями, ступенчатые купонные связи со встроенными опционами и амортизирующие связи со встроенными опционами.

пример

OptionEmbeddedFloatBondObj = fininstrument(InstrumentType,'Spread',spread_value,'Maturity',maturity_date,'PutSchedule',put_schedule_value) создает OptionEmbeddedFloatBond путем указания объекта InstrumentType и требуемые аргументы пары имя-значение Spread, Maturity, и PutSchedule задает свойства, используя необходимые аргументы пары имя-значение.

пример

OptionEmbeddedFloatBondObj = fininstrument(___,Name,Value) задает дополнительные свойства, используя дополнительные пары имя-значение в дополнение к требуемым аргументам в предыдущем синтаксисе. Например, OptionEmbeddedFloatBondObj = fininstrument("OptionEmbeddedFloatBond",'Spread',0.01,'Maturity',datetime(2019,1,30),'Period',4,'Basis',5,'Principal',1000,'FirstCouponDate',datetime(2016,1,30),'EndMonthRule',1,'CallSchedule',schedule,'CallExerciseStyle',"american",'ProjectionCurve',ratecurve_obj,'Name',"optionembeddedfloatbond"). Можно указать несколько пар имя-значение.

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

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

Тип прибора, указанный как строка со значением "OptionEmbeddedFloatBond" или символьный вектор со значением 'OptionEmbeddedFloatBond'.

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

OptionEmbeddedFloatBond Аргументы пары «имя-значение»

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

Пример: OptionEmbeddedFloatBondObj = fininstrument("OptionEmbeddedFloatBond",'Spread',0.01,'Maturity',datetime(2019,1,30),'Period',4,'Basis',5,'Principal',1000,'FirstCouponDate',datetime(2016,1,30),'EndMonthRule',1,'CallSchedule',schedule,'CallExerciseStyle',"american",'ProjectionCurve',ratecurve_obj,'Name',"optionembeddedfloatbond")
Необходимый OptionEmbeddedFloatBond Аргументы пары «имя-значение»

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

Количество базисных точек над эталонной скоростью, указанной как пара, разделенная запятыми, состоящая из 'Spread' и скалярный неотрицательный числовой.

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

Дата погашения, указанная как пара, разделенная запятыми, состоящая из 'Maturity' и порядковый номер даты, вектор символов даты, строка даты или datetime.

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

Расписание вызовов, указанное как пара, разделенная запятыми, состоящая из 'CallSchedule' и расписание дат звонков и забастовок.

Если вы используете вектор символов даты или строку даты для дат в этом расписании, формат должен быть распознан по datetime потому что CallSchedule свойство сохраняется как datetime.

Примечание

OptionEmbeddedFloatBond опоры приборов CallSchedule и CallExerciseStyle или PutSchedule и PutExerciseStyleно не оба.

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

График размещения, указанный как разделенная запятыми пара, состоящая из 'PutSchedule' и расписание дат звонков и забастовок.

Если вы используете вектор символов даты или строку даты для дат в этом расписании, формат должен быть распознан по datetime потому что PutSchedule свойство сохраняется как datetime.

Примечание

OptionEmbeddedFloatBond опоры приборов CallSchedule и CallExerciseStyle или PutSchedule и PutExerciseStyleно не оба.

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

Дополнительный OptionEmbeddedFloatBond Аргументы пары «имя-значение»

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

Частота платежей в год, указанная как разделенная запятыми пара, состоящая из 'Reset' и скалярное целое число. Значения для Reset являются: 1, 2, 3, 4, 6, и 12.

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

Стиль упражнения опциона вызова, заданный как разделенная запятыми пара, состоящая из 'CallExerciseStyle' и скалярный строковый или символьный вектор.

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

Стиль упражнения Put option, заданный как разделенная запятыми пара, состоящая из 'PutExerciseStyle' и скалярный строковый или символьный вектор.

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

База подсчета дней, указанная как пара, разделенная запятыми, состоящая из 'Basis' и скалярное целое число, используя одно из следующих значений:

  • 0 - фактическое/фактическое

  • 1 - 30/360 (SIA)

  • 2 - фактическое/360

  • 3 - фактическое/365

  • 4 - 30/360 (PSA)

  • 5 - 30/360 (ISDA)

  • 6 - 30/360 (европейский)

  • 7 - фактический/365 (японский)

  • 8 - фактические/фактические (ICMA)

  • 9 - фактические/360 (ICMA)

  • 10 - фактически/365 (ICMA)

  • 11 - 30/360E (ICMA)

  • 12 - фактическое/365 (ISDA)

  • 13 - BUS/252

Дополнительные сведения см. в разделе Базис.

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

Условная сумма основного долга или график стоимости основного долга, указанный как пара, разделенная запятыми, состоящая из 'Principal' и скалярное числовое или расписание.

Principal принимает timetable, где первый столбец - даты, а второй столбец - связанное условное основное значение. Дата указывает последний день, когда действительным является основное значение.

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

Флаг, указывающий, корректируется ли денежный поток для соглашения по количеству дней, указанного как пара, разделенная запятыми, состоящая из 'DaycountAdjustedCashFlow' и скалярный логический со значением true или false.

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

Соглашения о рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'BusinessDayConvention' и скалярный строковый или символьный вектор. Выбор соглашения о рабочих днях определяет, как обрабатываются дни, не связанные с бизнесом. Дни, не связанные с бизнесом, определяются как выходные дни, а также любая другая дата, когда предприятия не открыты (например, официальные праздники). Значения:

  • "actual" - Дни, не связанные с бизнесом, фактически игнорируются. Предполагается, что денежные потоки, приходящиеся на нерабочие дни, распределяются на фактическую дату.

  • "follow" - Денежные потоки, приходящиеся на некоммерческий день, предполагается распределить на следующий рабочий день.

  • "modifiedfollow" - Денежные потоки, приходящиеся на некоммерческий день, предполагается распределить на следующий рабочий день. Однако если следующий рабочий день находится в другом месяце, вместо него используется предыдущий рабочий день.

  • "previous" - Денежные потоки, приходящиеся на некоммерческий день, предполагается распределить в предыдущий рабочий день.

  • "modifiedprevious" - Денежные потоки, приходящиеся на некоммерческий день, предполагается распределить в предыдущий рабочий день. Однако если предыдущий рабочий день находится в другом месяце, вместо него принимается следующий рабочий день.

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

Праздники, используемые в вычислительных рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'Holidays' и даты с использованием времени даты, серийных номеров дат, массива ячеек векторов символов даты или массива строк даты. Например:

H = holidays(datetime('today'),datetime(2025,12,15));
OptionEmbeddedFixedBondObj = fininstrument("OptionEmbeddedFixedBond",'CouponRate',0.34,'Maturity',datetime(2025,12,15),...
'CallSchedule',schedule,'CallExerciseStyle',"american",'Holidays',H)

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

Флаг правила конца месяца для генерации дат при Maturity - дата окончания месяца с 30 или менее днями, указанная как пара, разделенная запятыми, состоящая из 'EndMonthRule' и скалярное логическое значение true или false.

  • Если установить EndMonthRule кому false, программное обеспечение игнорирует правило, что означает, что дата платежа всегда совпадает с числовым днем месяца.

  • Если установить EndMonthRule кому true, программа устанавливает правило, означающее, что дата платежа всегда является последним фактическим днем месяца.

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

Дата выпуска облигаций, указанная как пара, разделенная запятыми, состоящая из 'IssueDate' и скалярное значение datetime, порядковый номер даты, вектор символов даты или строка даты.

Если используется вектор символов даты или строка даты, формат должен быть распознаваемым по datetime потому что IssueDate свойство сохраняется как datetime.

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

Неправильная дата первого купона, указанная как пара, разделенная запятыми, состоящая из 'FirstCouponDate' и скалярное значение datetime, порядковый номер даты, вектор символов даты или строка даты.

Когда FirstCouponDate и LastCouponDate оба указаны, FirstCouponDate имеет приоритет при определении структуры купонных выплат. Если не указать FirstCouponDateдаты оплаты денежного потока определяются из других входных данных.

Если используется вектор символов даты или строка даты, формат должен быть распознаваемым по datetime потому что FirstCouponDate свойство сохраняется как datetime.

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

Неправильная дата последнего купона, указанная как пара, разделенная запятыми, состоящая из 'LastCouponDate' и скалярное значение datetime, порядковый номер даты, вектор символов даты или строка даты.

При указании LastCouponDate но не FirstCouponDate, LastCouponDate определяет структуру купона облигации. Купонная структура облигации усечена при LastCouponDateнезависимо от того, куда она попадает, и следует только дата денежного потока погашения облигации. Если не указать LastCouponDateдаты оплаты денежного потока определяются из других входных данных.

Если используется вектор символов даты или строка даты, формат должен быть распознаваемым по datetime потому что LastCouponDate свойство сохраняется как datetime.

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

Прямая дата начала платежей, указанная как пара, разделенная запятыми, состоящая из 'StartDate' и скалярное значение datetime, порядковый номер даты, вектор символов даты или строка даты.

Если используется вектор символов даты или строка даты, формат должен быть распознаваемым по datetime потому что StartDate свойство сохраняется как datetime.

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

Определяемое пользователем имя прибора, указанное как пара, разделенная запятыми, состоящая из 'Name' и скалярный строковый или символьный вектор.

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

Свойства

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

Тип инструмента, возвращаемый в виде строки со значением "OptionEmbeddedFloatBond".

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

Количество базисных точек над опорной скоростью, возвращаемое как скалярное неотрицательное числовое.

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

Дата погашения, возвращенная в качестве даты и времени.

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

Расписание вызовов, возвращенное в виде расписания.

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

Поставьте график, вернули как расписание.

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

Частота платежей в год, возвращаемая как скалярное целое число.

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

Базисное число дней, возвращаемое как скалярное целое число.

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

Условная основная сумма или основное значение, возвращаемое как скалярное число или расписание.

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

Флаг, указывающий, возвращается ли денежный поток, скорректированный для соглашения о подсчете дней, как скалярный логический со значением true или false.

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

Условные обозначения рабочего дня, возвращенные в виде строки

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

Праздники, используемые в вычислительных рабочих днях, возвращенные в качестве дат.

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

Флаг правила конца месяца для генерации дат при Maturity - дата окончания месяца с 30 или менее днями, возвращаемая как скалярная логическая дата.

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

Дата выпуска облигаций, возвращенная в качестве даты и времени.

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

Нерегулярная дата первого купона, возвращенная в качестве даты и времени.

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

Нерегулярная дата последнего купона, возвращенная в качестве даты и времени.

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

Дата начала отправки платежей, возвращенная в качестве даты и времени.

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

Это свойство доступно только для чтения.

Стиль упражнения опциона вызова, возвращаемый в виде строки со значением "European", "American", или "Bermudan".

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

Это свойство доступно только для чтения.

Стиль упражнения Put option, возвращаемый в виде строки со значением "European", "American", или "Bermudan".

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

Определяемое пользователем имя инструмента, возвращаемое в виде строки.

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

Функции объекта

setCallExercisePolicyУстановка политики упражнений вызова для OptionEmbeddedFixedBond, OptionEmbeddedFloatBond, или ConvertibleBond инструмент
setPutExercisePolicyЗадать политику упражнений put для OptionEmbeddedFixedBond, OptionEmbeddedFloatBond, или ConvertibleBond инструмент

Примеры

свернуть все

В этом примере показан рабочий процесс для оценки американского, европейского и бермудского стилей упражнений для трех вызываемых OptionEmbeddedFloatBond инструменты при использовании HullWhite модель и IRTree способ ценообразования.

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

Создать ratecurve объект с использованием ratecurve.

Settle = datetime(2018,1,1);
ZeroTimes = calyears(1:10)';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
Compounding = 1;
ZeroCurve = ratecurve("zero",Settle,ZeroDates,ZeroRates, "Compounding",Compounding);

Создать OptionEmbeddedFloatBond Объекты КИП

Использовать fininstrument чтобы создать три OptionEmbeddedFloatBond объекты инструментов с различными стилями упражнений.

Maturity = datetime(2024,1,1);

% Option embedded float bond (Bermudan callable bond)
Strike = [100; 100];
ExerciseDates = [datetime(2020,1,1); datetime(2024,1,1)];
Reset = 1;
CallSchedule =  timetable(ExerciseDates,Strike,'VariableNames',{'Strike Schedule'}); 

CallableBondBermudan = fininstrument("OptionEmbeddedFloatBond",'Maturity',Maturity,...
                              'Spread',0.025,'Reset',Reset, ...
                              'CallSchedule',CallSchedule,'CallExerciseStyle', "bermudan")
CallableBondBermudan = 
  OptionEmbeddedFloatBond with properties:

                      Spread: 0.0250
             ProjectionCurve: [0x0 ratecurve]
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2024
                   CallDates: [2x1 datetime]
                    PutDates: [0x1 datetime]
                CallSchedule: [2x1 timetable]
                 PutSchedule: [0x0 timetable]
           CallExerciseStyle: "bermudan"
            PutExerciseStyle: [0x0 string]
                        Name: ""

% Option embedded float bond (American callable bond)
Strike = 100;
ExerciseDates = datetime(2024,1,1);
CallSchedule =  timetable(ExerciseDates,Strike,'VariableNames',{'Strike Schedule'}); 
Reset = 1;

CallableBondAmerican = fininstrument("OptionEmbeddedFloatBond",'Maturity',Maturity,...
                              'Spread',0.025,'Reset', Reset, ...
                              'CallSchedule',CallSchedule,'CallExerciseStyle',"american")
CallableBondAmerican = 
  OptionEmbeddedFloatBond with properties:

                      Spread: 0.0250
             ProjectionCurve: [0x0 ratecurve]
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2024
                   CallDates: 01-Jan-2024
                    PutDates: [0x1 datetime]
                CallSchedule: [1x1 timetable]
                 PutSchedule: [0x0 timetable]
           CallExerciseStyle: "american"
            PutExerciseStyle: [0x0 string]
                        Name: ""

% Option embedded float bond (European callable bond)
Strike = 100;
ExerciseDates = datetime(2024,1,1);
CallSchedule =  timetable(ExerciseDates,Strike,'VariableNames',{'Strike Schedule'}); 
Reset = 1;

CallableBondEuropean = fininstrument("OptionEmbeddedFloatBond",'Maturity',Maturity,...
                              'Spread',0.025,'Reset',Reset, ...
                              'CallSchedule',CallSchedule)                          
CallableBondEuropean = 
  OptionEmbeddedFloatBond with properties:

                      Spread: 0.0250
             ProjectionCurve: [0x0 ratecurve]
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jan-2024
                   CallDates: 01-Jan-2024
                    PutDates: [0x1 datetime]
                CallSchedule: [1x1 timetable]
                 PutSchedule: [0x0 timetable]
           CallExerciseStyle: "european"
            PutExerciseStyle: [0x0 string]
                        Name: ""

Создать HullWhite Объект модели

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

VolCurve = 0.01;
AlphaCurve = 0.1;

HWModel = finmodel("HullWhite",'alpha',AlphaCurve,'sigma',VolCurve);

Создать IRTree Объект прайсера

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

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

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

Цена OptionEmbeddedFixedBond Инструменты

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

[Price, outPR] = price(HWTreePricer,CallableBondBermudan,["all"])
Price = 104.9598
outPR = 
  priceresult with properties:

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

outPR.Results
ans=1×4 table
    Price     Vega    Gamma      Delta 
    ______    ____    ______    _______

    104.96     0      19.597    -7.3926

[Price, outPR] = price(HWTreePricer,CallableBondAmerican,["all"])
Price = 100
outPR = 
  priceresult with properties:

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

outPR.Results
ans=1×4 table
    Price    Vega    Gamma    Delta
    _____    ____    _____    _____

     100      0        0        0  

[Price, outPR] = price(HWTreePricer,CallableBondEuropean,["all"])
Price = 114.5571
outPR = 
  priceresult with properties:

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

outPR.Results
ans=1×4 table
    Price        Vega        Gamma      Delta 
    ______    ___________    ______    _______

    114.56    -2.8422e-10    262.58    -50.006

Подробнее

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

Совет

После создания OptionEmbeddedFixedBond , можно изменить CallSchedule и CallExerciseStyle использование setCallExercisePolicy. Или можно изменить PutSchedule и PutExerciseStyle значения с использованием setPutExercisePolicy.

Представлен в R2020a