floatbybdt

Ценовая нота с плавающей ставкой из дерева процентных ставок Black-Derman-Toy

Описание

пример

[Price,PriceTree] = floatbybdt(BDTTree,Spread,Settle,Maturity) цены на купюру с плавающей ставкой из дерева процентных ставок Black-Derman-Toy.

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

пример

[Price,PriceTree] = floatbybdt(___,Name,Value) добавляет дополнительные аргументы пары "имя-значение".

Примеры

свернуть все

Оцените 20-базовую точку с плавающей ставкой с помощью дерева процентных ставок BDT.

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

load deriv.mat;

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

Spread = 20;
Settle = '01-Jan-2000';
Maturity = '01-Jan-2003';

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

Price = floatbybdt(BDTTree, Spread, Settle, Maturity)
Price = 100.4865

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

Создайте RateSpec.

Rates = [0.03583; 0.042147; 0.047345; 0.052707; 0.054302];
ValuationDate = '15-Nov-2011';
StartDates = ValuationDate;
EndDates = {'15-Nov-2012';'15-Nov-2013';'15-Nov-2014' ;'15-Nov-2015';'15-Nov-2016'};
Compounding = 1;
RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [5x1 double]
            Rates: [5x1 double]
         EndTimes: [5x1 double]
       StartTimes: [5x1 double]
         EndDates: [5x1 double]
       StartDates: 734822
    ValuationDate: 734822
            Basis: 0
     EndMonthRule: 1

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

Settle ='15-Nov-2011';
Maturity = '15-Nov-2015';
Spread = 15;

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

Principal ={{'15-Nov-2012' 100;'15-Nov-2013' 70;'15-Nov-2014' 40;'15-Nov-2015' 10}};

Создайте дерево BDT и предположите, что волатильность составляет 10%.

MatDates = {'15-Nov-2012'; '15-Nov-2013';'15-Nov-2014';'15-Nov-2015';'15-Nov-2016';'15-Nov-2017'};
BDTTimeSpec = bdttimespec(ValuationDate, MatDates);
Volatility = 0.10;  
BDTVolSpec = bdtvolspec(ValuationDate, MatDates, Volatility*ones(1,length(MatDates))');
BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);

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

Price = floatbybdt(BDTT, Spread, Settle, Maturity, 'Principal', Principal)
Price = 100.3059

Оцените ошейник с запиской с плавающей ставкой с помощью CapRate и FloorRate входной параметр для определения ценообразования ошейника.

Создайте RateSpec.

Rates = [0.0287; 0.03024; 0.03345; 0.03861; 0.04033];
ValuationDate = '1-April-2012';
StartDates = ValuationDate;
EndDates = {'1-April-2013';'1-April-2014';'1-April-2015' ;...
'1-April-2016';'1-April-2017'};
Compounding = 1;

Создайте RateSpec.

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

Создайте дерево BDT и предположите, что волатильность составляет 5%.

MatDates = {'1-April-2013'; '1-April-2014';'1-April-2015';'1-April-2016';'1-April-2017';'1-April-2018'};
BDTTimeSpec = bdttimespec(ValuationDate, MatDates);
Volatility = 0.05;  
BDTVolSpec = bdtvolspec(ValuationDate, MatDates, Volatility*ones(1,length(MatDates))');
BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);

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

Settle ='1-April-2012';
Maturity = '1-April-2016';
Spread = 10;
Principal = 100;

Вычислите цену служебной записки с плавающей ставкой.

CapStrike = {{'1-April-2013' 0.03; '1-April-2015' 0.055}};
FloorStrike = {{'1-April-2013' 0.025; '1-April-2015' 0.04}};

Price = floatbybdt(BDTT, Spread, Settle, Maturity, 'CapRate',...
CapStrike, 'FloorRate', FloorStrike)
Price = 101.2414

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

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

ValuationDate = '01-Sep-2013'; 
Rates = [0.0235; 0.0239; 0.0311; 0.0323]; 
EndDates = {'01-Sep-2014'; '01-Sep-2015'; '01-Sep-2016';'01-Sep-2017'};

Создайте RateSpec.

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

Создайте дерево BDT.

VolCurve = [.10; .11; .11; .12];

BDTVolatilitySpec = bdtvolspec(RateSpec.ValuationDate, EndDates,... 
                               VolCurve); 

BDTTimeSpec = bdttimespec(RateSpec.ValuationDate, EndDates, 1); 

BDTT = bdttree(BDTVolatilitySpec, RateSpec, BDTTimeSpec); 

Вычислите цену записки с плавающей ставкой с помощью следующих данных:

Spread = 5; 
Settle = '01-Sep-2013';
Maturity = '01-Dec-2015'; 
Reset = 2; 

Price = floatbybdt(BDTT, Spread, Settle, Maturity, 'FloatReset', Reset)
Warning: Not all cash flows are aligned with the tree. Result will be approximated. 
> In floatengbybdt at 204
  In floatbybdt at 123 
Error using floatengbybdt (line 299)
Instrument '1 ' has cash flow dates that span across tree nodes.

Error in floatbybdt (line 123)
[Price, PriceTree, CFTree, TLPpal] = floatengbybdt(BDTTree, Spread, Settle, Maturity, OArgs{:});

Эта ошибка указывает, что невозможно определить применимую ставку, используемую для вычисления окупаемости в даты сброса, учитывая, что необходимая применимая ставка не может быть вычислена (информация была потеряна из-за рекомбинации узлов дерева). Обратите внимание, что если период сброса для FRN охватывает более одного уровня дерева, вычисление платежа становится невозможным из-за рекомбинации дерева. То есть древовидный путь, соединяющий две последовательные даты сброса, не может быть однозначно определен, поскольку существует несколько возможных путей для соединения двух дат платежа. Самым простым решением является размещение древовидных уровней на датах денежного потока инструмента, что осуществляется путем определения BDTTimeSpec. Также допустимо иметь даты сброса между уровнями дерева, если на уровнях дерева существуют даты сброса.

Чтобы восстановить эту ошибку, создайте дерево, которое выстроится вместе с инструментом.

Basis = intenvget(RateSpec, 'Basis');
EOM = intenvget(RateSpec, 'EndMonthRule');
resetDates = cfdates(ValuationDate, Maturity, Reset ,Basis, EOM);
BDTTimeSpec = bdttimespec(RateSpec.ValuationDate,resetDates,Reset);
BDTT = bdttree(BDTVolatilitySpec, RateSpec, BDTTimeSpec);

Price = floatbybdt(BDTT, Spread, RateSpec.ValuationDate, ...
                   Maturity, 'FloatReset', Reset)
Price =

  100.1087

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

свернуть все

Древовидная структура процентной ставки, созданная bdttree

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

Количество базисных точек над скоростью ссылки, заданное как NINST-by- 1 вектор.

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

Дата расчета, заданная в виде скаляра или NINST-by- 1 вектор серийных номеров дат или векторов символов дат.

The Settle дата для каждой ноты с плавающей скоростью устанавливается в ValuationDate дерева BDT. Аргумент ноты с плавающей скоростью Settle игнорируется.

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

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

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

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

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

Пример: [Price,PriceTree] = floatbybdt(BDTTree,Spread,Settle,Maturity,'Basis',3)

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

Примечание

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

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

Базис отсчета дней, представляющий базис, используемый при аннуализации входа дерева прямой скорости, заданный как разделенная запятой пара, состоящий из 'Basis' и a NINST-by- 1 вектор.

  • 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 массив ячеек, где каждый элемент массива ячеек является NumDates-by- 2 массив ячеек и первый столбец - даты, а второй - связанное с ним условное основное значение. Дата указывает на последний день действия основного значения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Годовая скорость прописной буквы, заданная как разделенная разделенными запятой парами, состоящая из 'CapRate' и a NINST-by- 1 десятичный годовой темп или NINST-by- 1 массив ячеек, где каждый элемент является NumDates-by- 2 массив ячеек, и первый столбец массива ячеек является датами, а второй столбец - связанными скоростями прописной буквы. Дата указывает на последний день действия предельной ставки.

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

Годовая минимальная ставка, заданная как разделенная разделенными запятой парами, состоящая из 'FloorRate' и a NINST-by- 1 десятичный годовой темп или NINST-by- 1 массив ячеек, где каждый элемент является NumDates-by- 2 массив ячеек, и первый столбец массива ячеек является датами, а второй столбец - связанными скоростями этажа. Дата указывает на последний день действия минимальной ставки.

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

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

свернуть все

Ожидаемые цены ноты с плавающей ставкой в момент 0, возвращенные как NINST-by- 1 вектор.

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

  • PriceTree.PTree содержит чистые цены.

  • PriceTree.AITree содержит начисленные проценты.

  • PriceTree.tObs содержит время наблюдения.

Подробнее о

свернуть все

Примечание с плавающей скоростью

floating-rate note является обеспечением, подобным облигации, но процентная ставка банкноты периодически сбрасывается относительно ссылки индекса ставки, чтобы отразить колебания рыночных процентных ставок.

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