fitSmoothingSpline

Подгонка сглаживающего сплайна к данным рынка облигаций

Синтаксис

CurveObj = IRFunctionCurve.fitSmoothingSpline(Type,Settle,Instruments,Lambdafun)
CurveObj = IRFunctionCurve.fitSmoothingSpline(Type,Settle,Instruments,Lambdafun,Name,Value)

Аргументы

Примечание

Для использования Toolbox™ необходимо иметь лицензию на программное обеспечение Curve Fitting fitSmoothingSpline способ.

Type

Тип кривой процентной ставки для облигации: Forward, Zero, или Discount.

Settle

Скаляр для Settle дата кривой.

Instruments

N-by- 4 матрица данных для Instruments где первый столбец Settle дата, второй столбец Maturity, третий столбец - чистая цена, а четвертый столбец - CouponRate за связь.

Lambdafun

Функция штрафа, которая занимает в качестве входного времени и возвращает значение штрафа. Используйте указатель на функцию для поддержки функции штрафа. Указатель на функцию для штрафной функции, который принимает один числовой вход (время до зрелости) и возвращает один числовой выход (штраф, который будет применен к кривизне сплайна). Для получения дополнительной информации об определении указателя на функцию смотрите MATLAB® Документация по основам программирования.

Примечание

Сглаживающий сплайн представляет прямую кривую. Сплайн наказывается за искривление путем определения функции штрафа. Эта подгонка может быть выполнена только с помощью FitType от DurationWeightedPrice.

Knots

(Необязательно) Вектор расположения узлов (время-до-зрелости); по умолчанию узлы являются вектором, состоящим из 0 и время до зрелости всех входных инструментов. По умолчанию тип сплайна должен быть кубическим, но можно задать любой тип сплайна путем явного определения узлов. Пользовательские узлы могут быть заданы с помощью следующей команды, где k порядок: augknt(knots,k).

Compounding

(Необязательно) Скаляр, который устанавливает частоту компаундирования в год для IRFunctionCurve объект:

  • −1 = Непрерывное компаундирование (по умолчанию)

  • 1 = Годовое компаундирование

  • 2 = Полугодовое компаундирование

  • 3 = Смешивание три раза в год

  • 4 = ежеквартальное компаундирование

  • 6 = Двухмесячное компаундирование

  • 12 = Ежемесячное компаундирование

Basis

( Необязательный ) базис подсчета дней для кривой процентной ставки. Скаляр целых чисел.

  • 0 = факт/факт (по умолчанию)

  • 1 = 30/360 (SIA)

  • 2 = факт/360

  • 3 = факт/365

  • 4 = 30/360 (BMA)

  • 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

Для получения дополнительной информации см. раздел Базиса.

Параметры КИПиА

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

InstrumentPeriod

(Необязательно) Купоны в год облигации. Вектор из целых чисел. Допустимые значения: 0, 1, 2 (по умолчанию), 3, 4, 6 и 12.

InstrumentBasis

( Необязательный ) базис отсчета дня облигации. Вектор из целых чисел.

  • 0 = факт/факт (по умолчанию)

  • 1 = 30/360 (SIA)

  • 2 = факт/360

  • 3 = факт/365

  • 4 = 30/360 (BMA)

  • 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

Для получения дополнительной информации см. раздел Базиса.

InstrumentEndMonthRule

(Необязательно) Правило конца месяца. Вектор. Это правило применяется только тогда, когда Maturity - дата окончания месяца для месяца, имеющего 30 или менее дней. 0 = игнорировать правило, означающее, что дата купонного платежа облигации всегда совпадает с числовым днем месяца. 1 = установите правило (по умолчанию), означающее, что дата купонного платежа облигации всегда является последним фактическим днем месяца.

InstrumentIssueDate

(Необязательно) Дата выпуска инструмента.

InstrumentFirstCouponDate

(Необязательно) Дата, когда облигация производит свой первый купонный платеж; используется, когда облигация имеет нерегулярный первый купонный период. Когда FirstCouponDate и LastCouponDate оба заданы, FirstCouponDate имеет приоритет при определении структуры купонного платежа. Если вы не задаете FirstCouponDateДаты платежа денежного потока определяются из других входов.

InstrumentLastCouponDate

(Необязательно) Дата последнего купона облигации до даты погашения; используется, когда облигация имеет нерегулярный последний купонный период. При отсутствии заданного FirstCouponDate, a заданное LastCouponDate определяет купонную структуру облигации. Купонная структура облигации усечена в LastCouponDate, независимо от того, где он падает, и сопровождается только датой движения денежных средств по облигации со сроком погашения. Если вы не задаете LastCouponDateДаты платежа денежного потока определяются из других входов.

InstrumentFace

(Необязательно) Грань или номинал. По умолчанию = 100.

Примечание

При использовании Instrument Пары "имя-значение" можно задать простой процент для облигации путем определения InstrumentPeriod значение как 0. Если InstrumentBasis и InstrumentPeriod не заданы для облигации, используются следующие значения по умолчанию: Basis является 0 (действие/действие) и Period является 2.

Описание

Fcurve = IRFunctionCurve.fitSmoothingSpline(Type, Settle, Instruments, Lambdafun,Name,Value) подходит для сглаживания сплайна к рыночным данным для облигации. Необходимо ввести необязательные аргументы для Basis, Compounding, и Knots как разделенные запятыми пары Name, Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1, Value1..., NameN, ValueN.

Примеры

свернуть все

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

Settle = repmat(datenum('30-Apr-2008'),[6 1]);
Maturity = [datenum('07-Mar-2009');datenum('07-Mar-2011');...
datenum('07-Mar-2013');datenum('07-Sep-2016');...
datenum('07-Mar-2025');datenum('07-Mar-2036')];

CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3];
CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425];
Instruments = [Settle Maturity CleanPrice CouponRate];
PlottingPoints = datenum('07-Mar-2009'):180:datenum('07-Mar-2036');
Yield = bndyield(CleanPrice,CouponRate,Settle,Maturity);

% use the AUGKNT function to construct the knots for a cubic spline at every 5 years
CustomKnots = augknt(0:5:30,4);
SmoothingModel = IRFunctionCurve.fitSmoothingSpline('Zero',datenum('30-Apr-2008'),...
Instruments,@(t) 1000,'knots', CustomKnots);

% create the plot
plot(PlottingPoints, getParYields(SmoothingModel, PlottingPoints),'b')
hold on
scatter(Maturity,Yield,'black')
datetick('x')

Figure contains an axes. The axes contains 2 objects of type line, scatter.

Используйте fitSmoothinSpline метод для подгонки кривой процентной ставки и моделирования Lambdafun штрафная функция. Во-первых, загрузите данные.

load ukdata20080430

Преобразуйте ставки репо в эквивалентные нулевые купонные облигации.

RepoCouponRate = repmat(0,size(RepoRates));
RepoPrice = bndprice(RepoRates, RepoCouponRate, RepoSettle, RepoMaturity);

Агрегируйте данные.

Settle = [RepoSettle;BondSettle];
Maturity = [RepoMaturity;BondMaturity];
CleanPrice = [RepoPrice;BondCleanPrice];
CouponRate = [RepoCouponRate;BondCouponRate];
Instruments = [Settle Maturity CleanPrice CouponRate];
InstrumentPeriod = [repmat(0,6,1);repmat(2,31,1)];
CurveSettle = datenum('30-Apr-2008');

Выберите параметры для Lambdafun входной параметр.

L = 9.2;
S = -1;
mu = 1;

Определите Lambdafun штрафная функция.

lambdafun = @(t) exp(L - (L-S)*exp(-t/mu));
t = 0:.1:25;
y = lambdafun(t);
figure
semilogy(t,y);
title('Penalty Function for VRP Approach')
ylabel('Penalty')
xlabel('Time')

Используйте fitSmoothinSpline метод для подгонки кривой процентной ставки и моделирования Lambdafun штрафная функция.

VRPModel = IRFunctionCurve.fitSmoothingSpline('Forward',CurveSettle,...
Instruments,lambdafun,'Compounding',-1, 'InstrumentPeriod',InstrumentPeriod)
VRPModel = 

			 Type: Forward
		   Settle: 733528 (30-Apr-2008)
	  Compounding: -1
			Basis: 0 (actual/actual)

Постройте график сглаживания кривой процентной ставки сплайна для форвардных ставок.

PlottingDates = CurveSettle+20:30:CurveSettle+365*25;
TimeToMaturity = yearfrac(CurveSettle,PlottingDates);
VRPForwardRates = getForwardRates(VRPModel, PlottingDates);
figure;plot(TimeToMaturity,VRPForwardRates)
title('Smoothing Spline model of UK instantaneous nominal forward curve')

Алгоритмы

Структура термина может быть смоделирована сплайном - в частности, одним из способов моделирования структуры термина является представление прямой кривой с кубическим сплайном. Чтобы убедиться, что сплайн достаточно гладкий, накладывается штраф, относящийся к кривизне (второй производной) сплайна:

где первый термин является различием между наблюдаемой ценой P и прогнозируемой ценой, P^, (нагруженный длительностью связи, D), суммированный по всем связям в нашем наборе данных и втором сроке термин штрафа (где λ - функция штрафа, и f сплайн).

См. [3], [4], [5] ниже.

Были различные предложения по спецификации штрафной функции Один из подходов, за который выступает [4] и который в настоящее время используется Управлением по управлению долгом Великобритании, является функцией штрафов следующей формы:

Ссылки

[1] Nelson, C.R., Siegel, A.F. «Parsimonious modeling of выражения curves». Журнал бизнеса. Том 60, 1987, стр. 473-89.

[2] Свенссон, L.E.O. Оценка и интерпретация форвардных процентных ставок: Швеция 1992-4. Международный валютный фонд, рабочий документ МВФ, 1994/114 год.

[3] Фишер, М., Нычка, Д., Зервос, Д. «Подбор кривой срочной структуры процентных ставок с сглаживанием сплайнов». Совет управляющих Федеральной резервной системы, рабочий документ Федерального резервного совета 1995-1.

[4] Anderson, N., Sleath, J «. Новые оценки реальных и номинальных кривых выражения Великобритании». Ежеквартальный бюллетень Банка Англии, ноябрь 1999, стр. 384-92.

[5] Вагонер, Д. «Методы сплайна для извлечения кривых процентной ставки из цен купонных облигаций». Рабочий документ Федерального резервного совета 1997-10.

[6] «Кривые выражения с нулевым купоном: техническая документация». Документы БИС № 25, октябрь 2005 года.

[7] Bolder, D.J., Gusba, S. «Exponentials, Polynomials and Fourier Series: More Yield Curve Modeling at the Bank of Canada». Рабочие документы 2002-29, Банк Канады.

[8] Bolder, D.J., Streliski, D. «Yield Curve Modeling at the Bank of Canada». Технические отчеты 84, 1999, Банк Канады.

Введенный в R2008b