exponenta event banner

Обмен

Описание

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

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

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

  3. Использовать finpricer для указания Discount метод ценообразования при использовании ratecurve объект или IRTree метод ценообразования при использовании HullWhite или BlackKarasinski модель для Swap инструмент.

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

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

Создание

Описание

пример

SwapInstrument = fininstrument(InstrumentType,'Maturity',maturity_date,'LegRate',leg_rate) создает Swap путем указания объекта InstrumentType и задает свойства для необходимых аргументов пары имя-значение Maturity и LegRate.

Swap инструмент поддерживает ванильные свопы, амортизирующие свопы и прямые свопы. Вы можете использовать Swap инструмент для свопа в одной валюте, но не для валютного свопа. Для получения дополнительной информации о Swap см. раздел Подробнее.

пример

SwapInstrument = fininstrument(___,Name,Value) задает дополнительные свойства, используя дополнительные пары имя-значение в дополнение к требуемым аргументам в предыдущем синтаксисе. Например, SwapInstrument = fininstrument("Swap",'Maturity',datetime(2019,1,30),'LegRate',[0.06 0.12],'LegType',["fixed","fixed"],'Basis',1,'Notional',100,'StartDate',datetime(2016,1,30),'DaycountAdjustedCashFlow',true,'BusinessDayConvention',"follow",'ProjectionCurve',ratecurve,'Name',"swap_instrument") создает Swap опцион со сроком погашения 30 января 2019 года. Можно указать несколько аргументов пары имя-значение.

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

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

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

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

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

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

Пример: SwapInstrument = fininstrument("Swap",'Maturity',datetime(2019,1,30),'LegRate',[0.06 0.12],'LegType',["fixed","fixed"],'Basis',1,'Notional',100,'StartDate',datetime(2016,1,30),'DaycountAdjustedCashFlow',true,'BusinessDayConvention',"follow",'ProjectionCurve',ratecurve,'Name',"swap_instrument")
Необходимый Swap Аргументы пары «имя-значение»

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

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

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

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

Скорость ответвления в десятичных значениях, заданная как разделенная запятыми пара, состоящая из 'LegRate' и 1около-2 матрица. Каждая строка может быть определена как одна из следующих:

  • [CouponRate Spread] (фиксированный поплавок)

  • [Spread CouponRate] (поплавковый)

  • [CouponRate CouponRate] (фиксированный-фиксированный)

  • [Spread Spread] (поплавок-поплавок)

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

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

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

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

Тип ножки, указанный как разделенная запятыми пара, состоящая из 'LegType' и массив ячеек из векторов символов или строковый массив с поддерживаемыми значениями. LegType определяет интерпретацию значений, введенных в LegRate.

Примечание

При указании Swap инструмент в качестве базового актива для Swaption во время использования Normal, SABR, Black, или HullWhite прайсер, Swap LegType должно быть ["fixed","float"] или ["float","fixed"]. Необходимо также установить ExerciseStyle аргумент пары имя-значение связанного Swaption инструмент для 'European'.

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

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

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

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

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

База подсчета дней, представляющая основу для каждого этапа, указанная как пара, разделенная запятыми, состоящая из 'Basis' и 1около-1 матрица (или 1около-2 матрица, если 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

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

Notional принимает скаляр для основной величины (или 1около-2 матрица, если Notional отличается для каждой ветви) или timetable для графиков основных значений. Для расписаний первым столбцом расписания являются даты, а вторым столбцом - связанное условное основное значение. Дата указывает последний день, когда действительным является основное значение.

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

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

LatestFloatingRate является 1около-1 матрица (или 1около-2 матрица, если LatestFloatingRate отличается для каждой ветви).

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

Запаздывание в установке скорости, указанное как пара, разделенная запятыми, состоящая из 'ResetOffset' и 1около-2 матрица.

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

Флажок для корректировки денежных потоков на основе фактического количества дней периода, указанного как пара, разделенная запятыми, состоящая из 'DaycountAdjustedCashFlow' и 1около-1 матрица (или 1около-2 матрица, если AdjustCashFlowsBasis отличается для каждой ветви) логики со значениями true или false.

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

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

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

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

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

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

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

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

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

H = holidays(datetime('today'),datetime(2025,12,15));
Swap = fininstrument("Swap",'Maturity',datetime(2025,12,15),'LegRate',[0.06 20],'Holidays',H)

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

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

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

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

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

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

Использовать StartDate чтобы оценить форвардный своп, то есть своп, который начинается с будущей даты.

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

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

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

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

Свойства

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

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

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

Скорость ног, возвращенная как 1около-2 матрица десятичных значений, при этом каждая строка определяется как одна из следующих:

  • [CouponRate Spread] (фиксированный поплавок)

  • [Spread CouponRate] (поплавковый)

  • [CouponRate CouponRate] (фиксированный-фиксированный)

  • [Spread Spread] (поплавок-поплавок)

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

Тип ветви, возвращаемый как строковый массив со значениями ["fixed","fixed"], ["fixed","float"], ["float","fixed"], или ["float","float"].

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

Кривая ставки, используемая при прогнозировании будущих денежных потоков, возвращенная как ratecurve объект.

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

Частота сброса в год для каждого свопа, возвращаемого как 1около-2 матрица.

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

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

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

Отставание в настройке скорости, возвращенное как 1около-2 матрица.

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

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

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

Ставка для следующего плавающего платежа, установленная на дату последнего сброса, возвращается в виде скалярного числового значения.

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

Флажок для корректировки денежных потоков на основе фактического количества дней периода, возвращаемого как 1около-1 матрица (или 1около-2 матрица, если AdjustCashFlowsBasis отличается для каждой ветви) логики со значениями true или false.

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

Условные обозначения рабочего дня, возвращаемые в виде строки или 1около-2 строковый массив, если BusinessDayConvention отличается для каждой ноги.

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

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

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

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

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

Замена даты начинается, возвращается в качестве даты и времени.

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

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

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

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

cashflowsВычисляет денежный поток для FixedBond, FloatBond, Swap, FRA, или Deposit инструмент
parswaprateРасчет ставки паушального свопа для Swap инструмент

Примеры

свернуть все

В этом примере показан поток операций по цене ванили. Swap инструмент при использовании ratecurve и Discount способ ценообразования.

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

Создать ratecurve объект с использованием ratecurve для базовой кривой процентных ставок для Swap инструмент.

Settle = datetime(2019,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-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

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

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

Swap = fininstrument("Swap",'Maturity',datetime(2024,9,15),'LegRate',[0.022 0.019 ],'LegType',["float","fixed"],'ProjectionCurve',myRC,'Name',"swap_instrument")
Swap = 
  Swap with properties:

                     LegRate: [0.0220 0.0190]
                     LegType: ["float"    "fixed"]
                       Reset: [2 2]
                       Basis: [0 0]
                    Notional: 100
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [1x2 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: NaT
                    Maturity: 15-Sep-2024
                        Name: "swap_instrument"

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

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

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

    DiscountCurve: [1x1 ratecurve]

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

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

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

       Results: [1x2 table]
    PricerData: []

outPR.Results
ans=1×2 table
    Price       DV01  
    ______    ________

    7.2279    -0.02212

В этом примере показан поток операций для оценки амортизации. Swap инструмент при использовании ratecurve и Discount способ ценообразования.

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

Создать ratecurve объект с использованием ratecurve для базовой кривой процентных ставок для Swap инструмент.

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"

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

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

Maturity = datetime(2024,1,1);
ADates = datetime([2020,1,1 ; 2024,1,1]);
APrincipal = [100; 85];
Notional = timetable(ADates,APrincipal);
Swap = fininstrument("Swap",'Maturity',Maturity,'LegRate',[0.035,0.01],'Reset',[1 1],'Notional',Notional,'Name',"swap_instrument")
Swap = 
  Swap with properties:

                     LegRate: [0.0350 0.0100]
                     LegType: ["fixed"    "float"]
                       Reset: [1 1]
                       Basis: [0 0]
                    Notional: [2x1 timetable]
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [0x0 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: NaT
                    Maturity: 01-Jan-2024
                        Name: "swap_instrument"

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

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

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

    DiscountCurve: [1x1 ratecurve]

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

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

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

       Results: [1x2 table]
    PricerData: []

outPR.Results
ans=1×2 table
    Price       DV01  
    ______    ________

    5.7183    0.022979

В этом примере показан поток операций по цене ванили. Swap инструмент при использовании HullWhite модель и IRTree способ ценообразования.

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

Создать ratecurve объект с использованием ratecurve для базовой кривой процентных ставок для Swap инструмент.

Settle = datetime(2020,1,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-Jan-2020
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

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

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

LegType = ["float","fixed"]
LegType = 1x2 string
    "float"    "fixed"

Swap = fininstrument("Swap",'Maturity',datetime(2030,9,15),'LegRate',[0.022 0.019],'LegType',LegType,'ProjectionCurve',myRC,'Name',"swap_instrument");

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

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

HullWhiteModel = finmodel("HullWhite",'Alpha',0.032,'Sigma',0.04)
HullWhiteModel = 
  HullWhite with properties:

    Alpha: 0.0320
    Sigma: 0.0400

Вычислить Swap Даты движения денежных средств по инструментам

Использовать cfdates для вычисления денежных потоков.

CFdates = cfdates(Settle, Swap.Maturity, Swap.Reset(1), Swap.Basis(1))
CFdates = 1x22 datetime
Columns 1 through 5

   15-Mar-2020   15-Sep-2020   15-Mar-2021   15-Sep-2021   15-Mar-2022

Columns 6 through 10

   15-Sep-2022   15-Mar-2023   15-Sep-2023   15-Mar-2024   15-Sep-2024

Columns 11 through 15

   15-Mar-2025   15-Sep-2025   15-Mar-2026   15-Sep-2026   15-Mar-2027

Columns 16 through 20

   15-Sep-2027   15-Mar-2028   15-Sep-2028   15-Mar-2029   15-Sep-2029

Columns 21 through 22

   15-Mar-2030   15-Sep-2030

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

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

HWTreePricer = finpricer("IRTree",'Model',HullWhiteModel,'DiscountCurve',myRC,'TreeDates',CFdates')
HWTreePricer = 
  HWBKTree with properties:

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

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

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

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

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

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

    24.373    8.5265e-10    -8790.5    820.67

Подробнее

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

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