exponenta event banner

swapbyzero

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

Описание

пример

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

пример

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

В частности, можно использовать пары имя-значение для 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

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 сначала используется без, а затем с необязательным аргументом name-value input 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];

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

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

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

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

Цена существующего валютного свопа, который получает фиксированный курс JPY и платит фиксированный курс USD с годовой периодичностью.

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около-2 входная переменная RateSpecs, со вторым RateSpec структура, содержащая одну или несколько кривых дисконтирования для плательщика, если только одна RateSpec структура указана, то это RateSpec используется для дисконтирования обеих ветвей.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [Price,SwapRate,AI,RecCF,RecCFDates,PayCF,PayCFDates] = swapbyzero(RateSpec,LegRate,Settle,
Maturity,'LegType',LegType,'LatestFloatingRate',LatestFloatingRate,'AdjustCashFlowsBasis',true,
'BusinessDayConvention','modifiedfollow')
Ванильные свопы, амортизирующие свопы, форвардные свопы

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Валютные свопы

свернуть все

Валютный курс, применяемый к денежным потокам, определяемый как пара, разделенная запятыми, состоящая из 'FXRate' и NINSTоколо-2 массив двойников. Поскольку валютный курс может быть применен к ветви плательщика или получателя, в массиве ввода имеется 2 столбца, и необходимо указать, какая трасса имеет иностранную валюту.

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

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

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

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

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

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

свернуть все

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

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

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

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

Примечание

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

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

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

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

Подробнее

свернуть все

Амортизирующий своп

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

Перемотка вперед

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

Валютный своп

Свопы, в которых ветви платежа свопа номинированы в различных валютах.

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

Ссылки

[1] Халл, J. Опционы, фьючерсы и другие деривативы Четвертое издание. Прентис Холл, 2000.

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