swapbyzero

Инструмент ценового свопа из набора нулевых кривых и ценовых кросс-валютных свопов

Описание

пример

[Price,SwapRate,AI,RecCF,RecCFDates,PayCF,PayCFDates] = swapbyzero(RateSpec,LegRate,Settle,Maturity) цены своп инструмент. Можно использовать swapbyzero для расчета цен на ванильные свопы, амортизацию свопов и форвардные свопы. Все входы либо скаляры, либо NINST-by- 1 векторы, если не задано иное. Любая дата может быть серийным номером даты или вектором символов даты. Необязательный аргумент может быть передан как пустая матрица [].

пример

[Price,SwapRate,AI,RecCF,RecCFDates,PayCF,PayCFDates] = swapbyzero(RateSpec,LegRate,Settle,Maturity,Name,Value) цена своп инструмента с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар. Можно использовать swapbyzero для расчета цен на ванильные свопы, амортизацию свопов, форвардные свопы и кросс-валютные свопы. Для получения дополнительной информации о парах "имя-значение" для свопов ванили, амортизации свопов и прямых свопов, смотрите Vanilla Swaps, Amortizing Swaps, Forward Swaps.

В частности, можно использовать пары "имя-значение" для FXRate, ExchangeInitialPrincipal, и ExchangeMaturityPrincipal для вычисления цены для валютных свопов. Для получения дополнительной информации о парах "имя-значение" для валютных свопов смотрите Переквалютные свопы.

Примеры

свернуть все

Цена процентного свопа с фиксированной приемной ножкой и плавающей оплатой. Платежи производятся один раз в год, а условная основная сумма составляет $100. Значения для остальных аргументов:

  • Ставка купона для фиксированной стойки: 0.06 (6%)

  • Спред для плавающей ноги: 20 базисных точек

  • Дата урегулирования свопа: 01 января 2000 г.

  • Дата погашения свопа: 01 января 2003 г.

На основе приведенной выше информации установите необходимые аргументы и создайте LegRate, LegType, и LegReset матрицы:

Settle = '01-Jan-2000';
Maturity = '01-Jan-2003';
Basis = 0; 
Principal = 100;
LegRate = [0.06 20]; % [CouponRate Spread] 
LegType = [1 0]; % [Fixed Float] 
LegReset = [1 1]; % Payments once per year

Загрузите файл deriv.mat, который обеспечивает ZeroRateSpec, структура процентной ставки, необходимая для ценообразования облигации.

load deriv.mat;

Использование swapbyzero для вычисления цены свопа.

Price = swapbyzero(ZeroRateSpec, LegRate, Settle, Maturity,... 
LegReset, Basis, Principal, LegType)
Price = 3.6923

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

LegRate = [NaN 20]; 

[Price, SwapRate] = swapbyzero(ZeroRateSpec, LegRate, Settle,...
Maturity, LegReset, Basis, Principal, LegType)
Price = 0
SwapRate = 0.0466

В swapbyzero , если Settle не на дату сброса (и 'StartDate' не задан), датой вступления в силу считается предыдущая дата сброса перед Settle в порядок для вычисления начисленных процентов и грязной цены. В этом примере датой вступления в силу является ('15-Sep-2009' ), которая является предыдущей датой сброса перед ('08-Jun-2010' ) Settle дата.

Использование swapbyzero с аргументами пары "имя-значение" для LegRate, LegType, LatestFloatingRate, AdjustCashFlowsBasis, и BusinessDayConvention чтобы вычислить выход для Price, SwapRate, AI, RecCF, RecCFDates, PayCF, и PayCFDates:

Settle = datenum('08-Jun-2010');
RateSpec = intenvset('Rates', [.005 .0075 .01 .014 .02 .025 .03]',...
'StartDates',Settle, 'EndDates',{'08-Dec-2010','08-Jun-2011',...
'08-Jun-2012','08-Jun-2013','08-Jun-2015','08-Jun-2017','08-Jun-2020'}');
Maturity = datenum('15-Sep-2020');
LegRate = [.025 50];
LegType = [1 0]; % fixed/floating
LatestFloatingRate = .005;
 
[Price, SwapRate, AI, RecCF, RecCFDates, PayCF,PayCFDates] = ...
swapbyzero(RateSpec, LegRate, Settle, Maturity,'LegType',LegType,...
'LatestFloatingRate',LatestFloatingRate,'AdjustCashFlowsBasis',true,...
'BusinessDayConvention','modifiedfollow')
Price = -6.7259
SwapRate = NaN
AI = 1.4575
RecCF = 1×12

   -1.8219    2.5000    2.5000    2.5137    2.4932    2.4932    2.5000    2.5000    2.5000    2.5137    2.4932  102.4932

RecCFDates = 1×12

      734297      734396      734761      735129      735493      735857      736222      736588      736953      737320      737684      738049

PayCF = 1×12

   -0.3644    0.5000    1.4048    1.9961    2.8379    3.2760    3.8218    4.1733    4.5164    4.4920    4.7950  104.6608

PayCFDates = 1×12

      734297      734396      734761      735129      735493      735857      736222      736588      736953      737320      737684      738049

Цена трех свопов с помощью двух кривых процентной ставки. Во-первых, определите данные для структуры процентной ставки:

StartDates = '01-May-2012'; 
EndDates = {'01-May-2013'; '01-May-2014';'01-May-2015';'01-May-2016'};
Rates = [[0.0356;0.041185;0.04489;0.047741],[0.0366;0.04218;0.04589;0.04974]];

Создайте RateSpec использование intenvset.

RateSpec = intenvset('Rates', Rates, 'StartDates',StartDates,...
'EndDates', EndDates, 'Compounding', 1)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [4x2 double]
            Rates: [4x2 double]
         EndTimes: [4x1 double]
       StartTimes: [4x1 double]
         EndDates: [4x1 double]
       StartDates: 734990
    ValuationDate: 734990
            Basis: 0
     EndMonthRule: 1

Посмотрите на Rates для двух кривых процентной ставки.

RateSpec.Rates
ans = 4×2

    0.0356    0.0366
    0.0412    0.0422
    0.0449    0.0459
    0.0477    0.0497

Определите инструменты подкачки.

Settle = '01-May-2012';
Maturity = '01-May-2015';
LegRate = [0.06 10]; 
Principal = [100;50;100];  % Three notional amounts

Цена трех свопов с помощью двух кривых.

Price = swapbyzero(RateSpec, LegRate, Settle, Maturity, 'Principal', Principal)
Price = 3×2

    3.9688    3.6869
    1.9844    1.8434
    3.9688    3.6869

Оцените своп с помощью двух кривых процентной ставки. Во-первых, определите данные для двух структур процентных ставок:

StartDates = '01-May-2012'; 
EndDates = {'01-May-2013'; '01-May-2014';'01-May-2015';'01-May-2016'};
Rates1 = [0.0356;0.041185;0.04489;0.047741];
Rates2 = [0.0366;0.04218;0.04589;0.04974];

Создайте RateSpec использование intenvset.

RateSpecReceiving = intenvset('Rates', Rates1, 'StartDates',StartDates,...
'EndDates', EndDates, 'Compounding', 1);
RateSpecPaying= intenvset('Rates', Rates2, 'StartDates',StartDates,...
'EndDates', EndDates, 'Compounding', 1);
RateSpec=[RateSpecReceiving RateSpecPaying]
RateSpec=1×2 struct array with fields:
    FinObj
    Compounding
    Disc
    Rates
    EndTimes
    StartTimes
    EndDates
    StartDates
    ValuationDate
    Basis
    EndMonthRule

Определите инструменты подкачки.

Settle = '01-May-2012';
Maturity = '01-May-2015';
LegRate = [0.06 10]; 
Principal = [100;50;100];

Цена трех свопов с помощью двух кривых.

Price = swapbyzero(RateSpec, LegRate, Settle, Maturity, 'Principal', Principal)
Price = 3×1

    3.9693
    1.9846
    3.9693

Чтобы вычислить скорость прямого свопа, установите StartDate Параметру к будущей дате и установите фиксированную ставку купона в LegRate вход в NaN.

Определите данные нулевой кривой и создайте нулевую кривую используя IRDataCurve.

ZeroRates = [2.09 2.47 2.71 3.12 3.43 3.85 4.57]'/100;
Settle = datenum('1-Jan-2012');
EndDates = datemnth(Settle,12*[1 2 3 5 7 10 20]');
Compounding = 1;

ZeroCurve = IRDataCurve('Zero',Settle,EndDates,ZeroRates,'Compounding',Compounding)
ZeroCurve = 
			 Type: Zero
		   Settle: 734869 (01-Jan-2012)
	  Compounding: 1
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [7x1 double]
			 Data: [7x1 double]

Создайте RateSpec структуру, использующую toRateSpec способ.

RateSpec = ZeroCurve.toRateSpec(EndDates)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [7x1 double]
            Rates: [7x1 double]
         EndTimes: [7x1 double]
       StartTimes: [7x1 double]
         EndDates: [7x1 double]
       StartDates: 734869
    ValuationDate: 734869
            Basis: 0
     EndMonthRule: 1

Вычислите ставку форвардного свопа (ставку купона для фиксированного участка), так чтобы цена форвардного свопа в момент = 0 равен нулю. Форвардный своп начинается через месяц (1-Feb-2012) и созревает через 10 лет (1 февраля-2022).

StartDate = datenum('1-Feb-2012');
Maturity = datenum('1-Feb-2022');
LegRate = [NaN 0];

[Price, SwapRate] = swapbyzero(RateSpec, LegRate, Settle, Maturity,...
'StartDate', StartDate)
Price = 0
SwapRate = 0.0378

The swapbyzero функция генерирует даты денежного потока на основе Settle и Maturity дат, при использовании Maturity дата как дата «якоря», с которой следует отсчитывать назад в регулярных интервалах. По умолчанию swapbyzero не отличает нерабочие дни от рабочих дней. Чтобы сделать swapbyzero перенести нерабочие дни в следующие рабочие дни, можно задать необязательный входной параметр имя-значение BusinessDayConvention со значением follow.

Определите данные нулевой кривой и создайте нулевую кривую используя IRDataCurve.

ZeroRates = [2.09 2.47 2.71 3.12 3.43 3.85 4.57]'/100;
Settle = datenum('5-Jan-2012');
EndDates = datemnth(Settle,12*[1 2 3 5 7 10 20]');
Compounding = 1;
ZeroCurve = IRDataCurve('Zero',Settle,EndDates,ZeroRates,'Compounding',Compounding);
RateSpec = ZeroCurve.toRateSpec(EndDates);
StartDate = datenum('5-Feb-2012');
Maturity = datenum('5-Feb-2022');
LegRate = [NaN 0];

Чтобы продемонстрировать необязательный вход BusinessDayConvention, swapbyzero сначала используется без, а затем с необязательным входным параметром имя-значение BusinessDayConvention. Заметьте, что при использовании BusinessDayConvention, все дни являются рабочими днями.

[Price1,SwapRate1,~,~,RecCFDates1,~,PayCFDates1] = swapbyzero(RateSpec,LegRate,Settle,Maturity,...
    'StartDate',StartDate);
datestr(RecCFDates1)
ans = 11x11 char array
    '05-Jan-2012'
    '05-Feb-2013'
    '05-Feb-2014'
    '05-Feb-2015'
    '05-Feb-2016'
    '05-Feb-2017'
    '05-Feb-2018'
    '05-Feb-2019'
    '05-Feb-2020'
    '05-Feb-2021'
    '05-Feb-2022'

isbusday(RecCFDates1)
ans = 11x1 logical array

   1
   1
   1
   1
   1
   0
   1
   1
   1
   1
      ⋮

[Price2,SwapRate2,~,~,RecCFDates2,~,PayCFDates2] = swapbyzero(RateSpec,LegRate,Settle,Maturity,...
    'StartDate',StartDate,'BusinessDayConvention','follow');
datestr(RecCFDates2)
ans = 12x11 char array
    '05-Jan-2012'
    '06-Feb-2012'
    '05-Feb-2013'
    '05-Feb-2014'
    '05-Feb-2015'
    '05-Feb-2016'
    '06-Feb-2017'
    '05-Feb-2018'
    '05-Feb-2019'
    '05-Feb-2020'
    '05-Feb-2021'
    '07-Feb-2022'

isbusday(RecCFDates2)
ans = 12x1 logical array

   1
   1
   1
   1
   1
   1
   1
   1
   1
   1
      ⋮

Оцените амортизационный своп с помощью Principal входной параметр для определения графика амортизации.

Создайте RateSpec.

Rates = 0.035;
ValuationDate = '1-Jan-2011';
StartDates = ValuationDate;
EndDates = '1-Jan-2017';
Compounding = 1;

RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding);

Создайте инструмент свопа с помощью следующих данных:

Settle ='1-Jan-2011';
Maturity = '1-Jan-2017';
LegRate = [0.04 10];

Определите график амортизации свопов.

Principal ={{'1-Jan-2013' 100;'1-Jan-2014' 80;'1-Jan-2015' 60;'1-Jan-2016' 40; '1-Jan-2017' 20}};

Вычислите цену амортизирующего свопа.

Price = swapbyzero(RateSpec, LegRate, Settle, Maturity, 'Principal' , Principal)
Price = 1.4574

Оцените форвардный своп с помощью StartDate входной параметр для определения будущей начальной даты свопа.

Создайте RateSpec.

Rates = 0.0325;
ValuationDate = '1-Jan-2012';
StartDates = ValuationDate;
EndDates = '1-Jan-2018';
Compounding = 1;

RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: 0.8254
            Rates: 0.0325
         EndTimes: 6
       StartTimes: 0
         EndDates: 737061
       StartDates: 734869
    ValuationDate: 734869
            Basis: 0
     EndMonthRule: 1

Рассчитать цену форвардного свопа, который начинается через год (1 января 2013 г.) и созревает через три года со ставкой форвардного свопа 4,27%.

Settle ='1-Jan-2012';
StartDate = '1-Jan-2013';
Maturity = '1-Jan-2016';
LegRate = [0.0427 10];

Price = swapbyzero(RateSpec, LegRate, Settle, Maturity, 'StartDate' , StartDate)
Price = 2.5083

Используя предыдущие данные, вычислите ставку форвардного свопа, ставку купона для фиксированного участка, так что цена форвардного свопа в момент = 0 равна нулю.

LegRate = [NaN 10];
[Price, SwapRate] = swapbyzero(RateSpec, LegRate, Settle, Maturity,...
'StartDate' , StartDate)
Price = 0
SwapRate = 0.0335

Если Settle не находится на дате сброса примечания с плавающей скоростью, swapbyzero пытается получить последнюю плавающую скорость перед Settle от RateSpec или LatestFloatingRate параметр. Когда дата сброса для этой скорости выходит за область значений RateSpecLatestFloatingRate не задан), swapbyzero Не удается получить частоту для этой даты и генерирует ошибку. В этом примере показано, как использовать LatestFloatingRate входной параметр, чтобы избежать ошибки.

Создайте условие ошибки, когда инструмент подкачки StartDate не может быть определено из RateSpec.

Settle = '01-Jan-2000';
Maturity = '01-Dec-2003';
Basis = 0; 
Principal = 100;
LegRate = [0.06 20]; % [CouponRate Spread] 
LegType = [1 0]; % [Fixed Float] 
LegReset = [1 1]; % Payments once per year 

load deriv.mat; 

Price = swapbyzero(ZeroRateSpec,LegRate,Settle,Maturity,... 
'LegReset',LegReset,'Basis',Basis,'Principal',Principal, ...
'LegType',LegType)
Error using floatbyzero (line 256)
The rate at the instrument starting date cannot be obtained from RateSpec.
 Its reset date (01-Dec-1999) is out of the range of dates contained in RateSpec.
 This rate is required to calculate cash flows at the instrument starting date.
 Consider specifying this rate with the 'LatestFloatingRate' input parameter.

Error in swapbyzero (line 289)
[FloatFullPrice, FloatPrice,FloatCF,FloatCFDates] = floatbyzero(FloatRateSpec, Spreads, Settle,...

Здесь, дата сброса для скорости по Settle был 01-Dec-1999, что было раньше даты оценки ZeroRateSpec (01-Jan-2000). Этой ошибки можно избежать, указав скорость на дату начала инструмента свопа с помощью LatestFloatingRate входной параметр.

Определите LatestFloatingRate и рассчитать цену с плавающей ставкой.

Price = swapbyzero(ZeroRateSpec,LegRate,Settle,Maturity,... 
'LegReset',LegReset,'Basis',Basis,'Principal',Principal, ...
'LegType',LegType,'LatestFloatingRate',0.03)
Price =

    4.7594

Определите ставки OIS и Libor.

Settle = datenum('15-Mar-2013');
CurveDates = daysadd(Settle,360*[1/12 2/12 3/12 6/12 1 2 3 4 5 7 10],1);
OISRates = [.0018 .0019 .0021 .0023 .0031 .006  .011 .017 .021 .026 .03]';
LiborRates = [.0045 .0047 .005 .0055 .0075 .011 .016 .022 .026 .030 .0348]';

Постройте график двух кривых.

figure,plot(CurveDates,OISRates,'r');hold on;plot(CurveDates,LiborRates,'b')
datetick
legend({'OIS Curve', 'Libor Curve'})

Figure contains an axes. The axes contains 2 objects of type line. These objects represent OIS Curve, Libor Curve.

Создайте связанную RateSpec для кривых OIS и Libor.

OISCurve = intenvset('Rates',OISRates,'StartDate',Settle,'EndDates',CurveDates);
LiborCurve = intenvset('Rates',LiborRates,'StartDate',Settle,'EndDates',CurveDates);

Определите своп.

Maturity = datenum('15-Mar-2018'); % Five year swap
FloatSpread = 0;
FixedRate = .025;
LegRate = [FixedRate FloatSpread];

Вычислите цену инструмента свопа. The LiborCurve term structure будет использоваться для генерации денежных потоков плавающей законы. the OISCurve для дисконтирования денежных потоков будет использоваться структура терминов.

Price = swapbyzero(OISCurve, LegRate, Settle,...
Maturity,'ProjectionCurve',LiborCurve)
Price = -0.3697

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

PriceSwap = swapbyzero(OISCurve, LegRate, Settle, Maturity)
PriceSwap = 2.0517

Цена существующего кросс-валютного свопа, который получает фиксированный курс JPY и платит фиксированный курс в долларах США с ежегодной частотой.

Settle = datenum('15-Aug-2015');
Maturity = datenum('15-Aug-2018');
Reset = 1;
LegType = [1 1]; % Fixed-Fixed

r_USD = .09;
r_JPY = .04;
 
FixedRate_USD = .08;
FixedRate_JPY = .05;

Principal_USD = 10000000;
Principal_JPY = 1200000000;
 
S = 1/110;

RateSpec_USD = intenvset('StartDate',Settle,'EndDate', Maturity,'Rates',r_USD,'Compounding',-1);
RateSpec_JPY = intenvset('StartDate',Settle,'EndDate', Maturity,'Rates', r_JPY,'Compounding',-1);

Price = swapbyzero([RateSpec_JPY RateSpec_USD], [FixedRate_JPY FixedRate_USD],...
Settle, Maturity,'Principal',[Principal_JPY Principal_USD],'FXRate',[S 1], 'LegType',LegType)
Price = 1.5430e+06

Оцените новый своп, где вы платите EUR float и получаете USD float.

Settle = datenum('22-Dec-2015');
Maturity = datenum('15-Aug-2018');
LegRate = [0 -50/10000];
LegType = [0 0]; % Float Float
LegReset = [4 4];
FXRate = 1.1;
Notional = [10000000 8000000];

USD_Dates = datemnth(Settle,[1 3 6 12*[1 2 3 5 7 10 20 30]]');
USD_Zero = [0.03 0.06 0.08 0.13 0.36 0.76 1.63 2.29 2.88 3.64 3.89]'/100;
Curve_USD = intenvset('StartDate',Settle,'EndDates',USD_Dates,'Rates',USD_Zero);

EUR_Dates = datemnth(Settle,[3 6 12*[1 2 3 5 7 10 20 30]]');
EUR_Zero = [0.017 0.033 0.088 .27 .512 1.056 1.573 2.183 2.898 2.797]'/100;
Curve_EUR = intenvset('StartDate',Settle,'EndDates',EUR_Dates,'Rates',EUR_Zero);

Price = swapbyzero([Curve_USD Curve_EUR], ...
    LegRate, Settle, Maturity,'LegType',LegType,'LegReset',LegReset,'Principal',Notional,...
    'FXRate',[1 FXRate],'ExchangeInitialPrincipal',false)
Price = 1.2002e+06

Входные параметры

свернуть все

Структура процентной ставки, заданная с помощью intenvset для создания RateSpec.

RateSpec может также быть 1-by- 2 входная переменная RateSpecs, со вторым RateSpec структура, содержащая одну или несколько кривых скидки для плательщика. Если только один RateSpec задается структура, затем эта RateSpec используется для скидки на обе ноги.

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

Скорость ног, заданная как NINST-by- 2 матрица с каждой строкой, заданной как одна из следующих:

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

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

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

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

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

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

Дата расчета, заданная в виде скаляра или NINST-by- 1 вектор серийных номеров дат или векторов символов дат того же значения, которые представляют дату расчета для каждого свопа. Settle должно быть раньше Maturity.

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

Дата зрелости, заданная как NINST-by- 1 вектор серийных номеров дат или векторов символов дат, представляющих дату погашения для каждого свопа.

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

Аргументы в виде пар имя-значение

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

Пример: [Цена, SwapRate, AI, RecCF, RecCFDates, PayCF, PayCFDates] = swapbyzero (RateSpec, LegRate, Settle,
Срок исполнения, 'LegType', LegType, 'LatestFloatingRate', LatestFloatingRate, 'AdjustCashFlowsBasis', true,
'BusinessDayConvention', 'modifiedfollow')
Vanilla Swaps, Amortizing Swaps, Forward Swaps

свернуть все

Частота сброса в год для каждого свопа, заданная как разделенная разделенными запятой парами, состоящая из 'LegReset' и a NINST-by- 2 вектор.

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

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

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

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

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

Тип ножки, заданный как разделенная разделенными запятой парами, состоящая из 'LegType' и a NINST-by- 2 матрица со значениями [1 1] (фиксированно-фиксированное), [1 0] (с фиксированной запятой), [0 1] (с фиксированной запятой), или [0 0] (с плавающей запятой). Каждая строка представляет инструмент. Каждый столбец указывает, является ли соответствующая стойка фиксированной (1) или плавающий (0). Эта матрица определяет интерпретацию значений, введенных в LegRate. LegType позволяет [1 1] (фиксированно-фиксированное), [1 0] (с фиксированной запятой), [0 1] (с фиксированной запятой), или [0 0] (с плавающей запятой) свопы

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

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

  • 0 = Игнорировать правило, означающее, что дата платежа всегда является одним и тем же числовым днем месяца.

  • 1 = Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.

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

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

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

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

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

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

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

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

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

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

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

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

Даты, когда свопы фактически начинаются, заданные как разделенная разделенными запятой парами, состоящая из 'StartDate' и a NINST-by- 1 вектор порядковых номеров дат, векторов символов или массива ячеек векторов символов.

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

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

LatestFloatingRate принимает ставку для следующего плавающего платежа, установленную на последнюю дату сброса. LatestFloatingRate является NINST-by- 1 (или NINST-by- 2 если LatestFloatingRate отличается для каждой ноги).

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

Кривая ставки, используемая при генерации денежных потоков для плавающей ветви свопа, заданная как разделенная разделенными запятой парами, состоящая из 'ProjectionCurve' и a RateSpec.

Если задается своп с плавающей запятой или с фиксированной запятой, ProjectionCurve кривая ставки используется при генерации денежных потоков для плавающей ветви свопа. Эта структура должна быть создана с помощью intenvset.

Если задается фиксированно-фиксированный или с плавающей запятой, то ProjectionCurve является NINST-by- 2 вектор, поскольку каждая плавающая ветвь может иметь разную проекционную кривую.

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

Кросс-валютные свопы

свернуть все

Курс иностранной валюты (FX), применяемый к денежным потокам, задается как разделенная разделенными запятой парами, состоящая из 'FXRate' и a NINST-by- 2 массив типа double. Поскольку курс иностранной валюты может быть применен к плательщику или приемнику ветви, в массиве входа есть 2 столбца, и необходимо указать, какая ветвь имеет иностранную валюту.

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

Флаг для указания, является ли начальный Principal обменивается, задается как разделенная разделенными запятой парами, состоящая из 'ExchangeInitialPrincipal' и a NINST-by- 1 массив логик.

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

Флаг, указывающий, Principal обменивается на Maturity, заданная как разделенная разделенными запятой парами, состоящая из 'ExchangeMaturityPrincipal' и a NINST-by- 1 массив логик. Хотя на практике большинство свопов в одной валюте не обмениваются принципалом на срок погашения, по умолчанию поддержание обратной совместимости верно.

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

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

свернуть все

Цены свопов, возвращенные как количество инструментов (NINST) по количеству кривых (NUMCURVES) матрица. Каждый столбец возникает из-за одной из нулевых кривых. Price выход - грязная цена. Для вычисления чистой цены вычитайте начисленные проценты (AI) от грязной цены.

Тарифы, применимые к фиксированной стойке, возвращенные как NINST-by- NUMCURVES матрица ставок, применимых к фиксированной ветви, так что значения свопов "равны нулю в момент 0. Эта ставка используется при вычислении цен свопов, когда ставка задана для фиксированного участка в LegRate является NaN. The SwapRate выход заполнен NaN для тех инструментов, в которых CouponRate не установлено в NaN.

Начисленные проценты, возвращенные как NINST-by- NUMCURVES матрица.

Денежные потоки для получателя, возвращенные как NINST-by- NUMCURVES матрица.

Примечание

Если в RateSpec задано несколько кривых вход, затем первый NCURVES строка соответствует первому свопу, второй NCURVES строка соответствует второму свопу и так далее.

Даты оплаты для получателя, возвращенные как NINST-by- NUMCURVES матрица.

Денежные потоки для платежной стойки, возвращенные как NINST-by- NUMCURVES матрица.

Даты оплаты за платежную ветвь, возвращенные как NINST-by- NUMCURVES матрица.

Подробнее о

свернуть все

Амортизация свопа

При амортизации свопа условный принципал периодически уменьшается, потому что он привязан к базовому финансовому инструменту со снижающимся (амортизирующим) основным балансом, таким как ипотека.

Прямая замена

Соглашение о заключении соглашения об обмене процентными ставками на фиксированную дату в будущем.

Кросс-валютный своп

Свопы, где условия оплаты свопа номинированы в разных валютах.

Одно из различий между валютными свопами и стандартными свопами заключается в том, что обмен основной суммы может происходить в начале и/или конце свопа. Обмен начальной основной суммы будет играть роль только в ценообразовании валютного свопа на начальном этапе (другими словами, ценообразование существующего валютного свопа произойдет после этого денежного потока). Кроме того, эти биржи основной суммы обычно не влияют на стоимость свопа (поскольку основные значения двух ветвей выбираются на основе валютного курса), а влияют на денежные потоки для каждой ветви.

Ссылки

[1] Hull, J. Options, Futures and Other Derivatives Fourth Edition. Prentice Hall, 2000.

Представлено до R2006a