Swap

Описание

Создайте и оцените 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.

The 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' и a 1-by- 2 матрица. Каждая строка может быть определена как одна из следующих:

  • [CouponRate Spread] (с фиксированной запятой)

  • [Spread CouponRate] (с фиксированной запятой)

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

  • [Spread Spread] (с плавающей запятой)

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

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

Необязательные Swap Аргументы в виде пар имя-значение

расширить все

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

Примечание

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

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

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

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

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

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

Базис отсчета дней, представляющий базис для каждой ветви, заданный как разделенная разделенными запятой парами, состоящая из 'Basis' и a 1-by- 1 матрица (или 1-by- 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-by- 2 матрица, если Notional отличается для каждой ноги) или timetable для расписаний основных значений. Для расписаний первый столбец расписания является датами, а второй - связанным условным основным значением. Дата указывает на последний день действия основного значения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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-by- 1 матрица (или 1-by- 2 матрица, если EndMonthRule отличается для каждой ноги).

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

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

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

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

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

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

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

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

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

Свойства

расширить все

Дата погашения, возвращенная как datetime.

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

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

  • [CouponRate Spread] (с фиксированной запятой)

  • [Spread CouponRate] (с фиксированной запятой)

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

  • [Spread Spread] (с плавающей запятой)

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

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

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

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

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

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

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

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

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

Задержка в настройке скорости, возвращается как 1-by- 2 матрица.

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

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

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

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

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

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

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

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

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

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

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

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

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

Начинается обмен датой, возвращается как datetime.

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

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

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

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

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

Примеры

свернуть все

Этот пример показывает рабочий процесс, чтобы оценить ваниль Swap инструмент, когда вы используете ratecurve и a 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 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 и a 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 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 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