В целях иллюстрации в этом разделе используются модели HJM и BDT. Функции HW и BK, выполняющие вычисления цены и чувствительности, здесь явно не показаны. Функции, использующие модели HW и BK, работают аналогично модели BDT.
Функции расчета цен портфеля hjmprice и bdtprice рассчитать цену любого набора поддерживаемых инструментов на основе дерева процентных ставок. Функции позволяют рассчитать цены для следующих видов инструментов:
Связи
Опционы на облигации
Соединение со встроенными опциями
Произвольные денежные потоки
Примечания с фиксированной ставкой
Банкноты с плавающей ставкой
Заметки с плавающей ставкой с опциями или встроенными опциями
Заглавные буквы
Этажи
Примечания к диапазону
Обмены
Swaptions
Например, синтаксис вызова hjmprice является:
[Price, PriceTree] = hjmprice(HJMTree, InstSet, Options)
Аналогично, синтаксис вызова для bdtprice является:
[Price, PriceTree] = bdtprice(BDTTree, InstSet, Options)
Каждая функция требует два входных аргумента: дерево процентных ставок и набор инструментов, InstSet. Необязательный аргумент, Options, далее управляет ценообразованием и выводом на экран. (См. раздел Структура вариантов ценообразования для получения информации о Options аргумент.)
HJMTree - выборка дерева Хита-Джарроу-Мортона процесса прямой скорости, созданная с помощью hjmtree. BDTTree - выборка дерева Black-Derman-Toy процесса процентной ставки, созданная с использованием bdttree. Сведения о создании этих структур см. в разделе Построение дерева форвардных ставок.
InstSet - набор инструментов, которые должны быть оценены по цене. Эта структура представляет набор инструментов, которые должны оцениваться независимо с использованием модели.
Options - структура опций, созданная с помощью функции derivset. Эта структура определяет способ использования дерева для поиска цены инструментов в портфеле и объем дополнительной информации, отображаемой в окне команд при вызове функции расчета цены. Если этот входной аргумент не указан в вызове функции ценообразования, используется структура опционов по умолчанию. Структура опционов расчета цены описана в разделе Структура опционов расчета цены.
Функции расчета цен портфеля классифицируют инструменты и вызывают соответствующую специфичную для инструмента функцию расчета цен для каждого из видов инструментов. Специфичные для инструмента функции расчета цен HJM: bondbyhjm, cfbyhjm, fixedbyhjm, floatbyhjm, optbndbyhjm, rangefloatbyhjm, swapbyhjm, и swaptionbyhjm. Для моделей BDT существует набор функций с аналогичным именем. Эти функции также можно использовать непосредственно для вычисления цены наборов инструментов одного типа.
Рассмотрим следующий пример, в котором используются данные портфеля и процентной ставки в MAT-файле. deriv.mat включен в набор инструментов. Загрузите данные в рабочую область MATLAB ®.
load deriv.mat
Использование MATLAB whos для отображения списка переменных, загруженных из MAT-файла.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 15956 struct BDTTree 1x1 5138 struct BKInstSet 1x1 15946 struct BKTree 1x1 5904 struct CRRInstSet 1x1 12434 struct CRRTree 1x1 5058 struct EQPInstSet 1x1 12434 struct EQPTree 1x1 5058 struct HJMInstSet 1x1 15948 struct HJMTree 1x1 5838 struct HWInstSet 1x1 15946 struct HWTree 1x1 5904 struct ITTInstSet 1x1 12438 struct ITTTree 1x1 8862 struct ZeroInstSet 1x1 10282 struct ZeroRateSpec 1x1 1580 struct
HJMTree и HJMInstSet являются входными аргументами, необходимыми для вызова функции hjmprice.
Используйте функцию instdisp для изучения набора инструментов, содержащихся в переменной HJMInstSet.
instdisp(HJMInstSet) Index Type CouponRate Settle Maturity Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face Name Quantity 1 Bond 0.04 01-Jan-2000 01-Jan-2003 1 NaN NaN NaN NaN NaN NaN NaN 4% bond 100 2 Bond 0.04 01-Jan-2000 01-Jan-2004 2 NaN NaN NaN NaN NaN NaN NaN 4% bond 50 Index Type UnderInd OptSpec Strike ExerciseDates AmericanOpt Name Quantity 3 OptBond 2 call 101 01-Jan-2003 NaN Option 101 -50 Index Type CouponRate Settle Maturity FixedReset Basis Principal Name Quantity 4 Fixed 0.04 01-Jan-2000 01-Jan-2003 1 NaN NaN 4% Fixed 80 Index Type Spread Settle Maturity FloatReset Basis Principal Name Quantity 5 Float 20 01-Jan-2000 01-Jan-2003 1 NaN NaN 20BP Float 8 Index Type Strike Settle Maturity CapReset Basis Principal Name Quantity 6 Cap 0.03 01-Jan-2000 01-Jan-2004 1 NaN NaN 3% Cap 30 Index Type Strike Settle Maturity FloorReset Basis Principal Name Quantity 7 Floor 0.03 01-Jan-2000 01-Jan-2004 1 NaN NaN 3% Floor 40 Index Type LegRate Settle Maturity LegReset Basis Principal LegType Name Quantity 8 Swap [0.06 20] 01-Jan-2000 01-Jan-2003 [1 1] NaN NaN [NaN] 6%/20BP Swap 10 Index Type CouponRate Settle Maturity Period Basis ... Name Quantity 1 Bond 0.04 01-Jan-2000 01-Jan-2003 1 NaN ... 4% bond 100 2 Bond 0.04 01-Jan-2000 01-Jan-2004 2 NaN ... 4% bond 50 |
В этом портфельном наборе восемь инструментов: две облигации, один облигационный опцион, одна нота с фиксированной ставкой, одна нота с плавающей ставкой, одна шапка, один этаж и один своп. Каждый инструмент имеет соответствующий индекс, который определяет цены инструмента в векторе цен, возвращаемом hjmprice.
Теперь используйте hjmprice для расчета цены каждого инструмента в наборе инструментов.
Price = hjmprice(HJMTree, HJMInstSet)
Warning: Not all cash flows are aligned with the tree. Result will
be approximated.
Price =
98.7159
97.5280
0.0486
98.7159
100.5529
6.2831
0.0486
3.6923
Примечание
Предупреждение, показанное выше, появляется, поскольку некоторые денежные потоки для второй облигации не попадают точно на узел дерева.
Загрузка файла MAT deriv.mat в рабочую область MATLAB.
load deriv.mat
Использование MATLAB whos для отображения списка переменных, загруженных из MAT-файла.
whos
Name Size Bytes Class Attributes BDTInstSet 1x1 15956 struct BDTTree 1x1 5138 struct BKInstSet 1x1 15946 struct BKTree 1x1 5904 struct CRRInstSet 1x1 12434 struct CRRTree 1x1 5058 struct EQPInstSet 1x1 12434 struct EQPTree 1x1 5058 struct HJMInstSet 1x1 15948 struct HJMTree 1x1 5838 struct HWInstSet 1x1 15946 struct HWTree 1x1 5904 struct ITTInstSet 1x1 12438 struct ITTTree 1x1 8862 struct ZeroInstSet 1x1 10282 struct ZeroRateSpec 1x1 1580 struct
BDTTree и BDTInstSet являются входными аргументами, необходимыми для вызова функции bdtprice.
Используйте функцию instdisp для изучения набора инструментов, содержащихся в переменной BDTInstSet.
instdisp(BDTInstSet) Index Type CouponRate Settle Maturity Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face Name Quantity 1 Bond 0.1 01-Jan-2000 01-Jan-2003 1 NaN NaN NaN NaN NaN NaN NaN 10% Bond 100 2 Bond 0.1 01-Jan-2000 01-Jan-2004 2 NaN NaN NaN NaN NaN NaN NaN 10% Bond 50 Index Type UnderInd OptSpec Strike ExerciseDates AmericanOpt Name Quantity 3 OptBond 1 call 95 01-Jan-2002 NaN Option 95 -50 Index Type CouponRate Settle Maturity FixedReset Basis Principal Name Quantity 4 Fixed 0.1 01-Jan-2000 01-Jan-2003 1 NaN NaN 10% Fixed 80 Index Type Spread Settle Maturity FloatReset Basis Principal Name Quantity 5 Float 20 01-Jan-2000 01-Jan-2003 1 NaN NaN 20BP Float 8 Index Type Strike Settle Maturity CapReset Basis Principal Name Quantity 6 Cap 0.15 01-Jan-2000 01-Jan-2004 1 NaN NaN 15% Cap 30 Index Type Strike Settle Maturity FloorReset Basis Principal Name Quantity 7 Floor 0.09 01-Jan-2000 01-Jan-2004 1 NaN NaN 9% Floor 40 Index Type LegRate Settle Maturity LegReset Basis Principal LegType Name Quantity 8 Swap [0.15 10] 01-Jan-2000 01-Jan-2003 [1 1] NaN NaN [NaN] 15%/10BP Swap 10 |
В этом портфельном наборе восемь инструментов: две облигации, один облигационный опцион, одна нота с фиксированной ставкой, одна нота с плавающей ставкой, одна шапка, один этаж и один своп. Каждый инструмент имеет соответствующий индекс, который определяет цены инструмента в векторе цен, возвращаемом bdtprice.
Теперь используйте bdtprice для расчета цены каждого инструмента в наборе инструментов.
Price = bdtprice(BDTTree, BDTInstSet)
Warning: Not all cash flows are aligned with the tree. Result will
be approximated.
Price =
95.5030
93.9079
1.7657
95.5030
100.4865
1.4863
0.0245
7.4222Цены в векторе выпуска Price соответствуют ценам в нулевое время наблюдения (tObs = 0), которая определяется как дата оценки дерева процентных ставок. Индексация прибора в пределах Price совпадает с индексацией в пределах InstSet.
В примере HJM цены в Price вектор соответствует приборам в этом порядке.
InstNames = instget(HJMInstSet, 'FieldName','Name')
InstNames = 4% bond 4% bond Option 101 4% Fixed 20BP Float 3% Cap 3% Floor 6%/20BP Swap
Итак, в Price вектор, четвертый элемент, 98,7159, представляет цену четвертого инструмента (4% нота с фиксированной ставкой); шестой элемент, 6.2831, представляет цену шестого инструмента (ограничение 3%).
В примере BDT цены в Price вектор соответствует приборам в этом порядке.
InstNames = instget(BDTInstSet, 'FieldName','Name')
InstNames = 10% Bond 10% Bond Option 95 10% Fixed 20BP Float 15% Cap 9% Floor 15%/10BP Swap
Итак, в Price вектор, четвертый элемент, 95.5030, представляет цену четвертого инструмента (10% нота с фиксированной ставкой); шестой элемент, 1.4863, представляет цену шестого инструмента (ограничение 15%).
Например, при вызове функции расчета цены с двумя аргументами вывода:
[Price, PriceTree] = hjmprice(HJMTree, HJMInstSet)
создается дерево цен вместе с информацией о ценах.
Необязательная древовидная структура выходных цен PriceTree содержит всю информацию о ценах.
Дерево цен HJM. В примере HJM первое поле этой структуры, FinObjуказывает, что эта структура представляет дерево цен. Второе поле, PBush, - дерево, держащее цену инструментов в каждом узле дерева. Третье поле, AIBush, - дерево, в котором хранятся начисленные проценты по инструментам в каждом узле дерева. Наконец, четвертое поле, tObs, представляет время наблюдения каждого уровня PBush и AIBush, с единицами в терминах периодов компаундирования.
В этом примере дерево цен выглядит следующим образом:
PriceTree =
FinObj: 'HJMPriceTree'
PBush: {[8x1 double] [8x1x2 double] ...[8x8 double]}
AIBush: {[8x1 double] [8x1x2 double] ... [8x8 double]}
tObs: [0 1 2 3 4]
Оба PBush и AIBush являются 1около-5 массивы ячеек, соответствующие пяти временам наблюдения tObs. Отображение данных здесь сокращено для размещения на одной строке.
С помощью интерфейса командной строки можно выполнить непосредственную проверку PriceTree.PBush, поле в пределах PriceTree структура, содержащая дерево цен с векторами цен в каждом штате. Первый узел представляет tObs = 0, соответствующее дате оценки.
PriceTree.PBush{1}ans =
98.7159
97.5280
0.0486
98.7159
100.5529
6.2831
0.0486
3.6923
С помощью этого интерфейса можно наблюдать цены для всех инструментов в портфеле в определенное время.
Дерево цен BDT. Древовидная структура выходных цен BDT PriceTree содержит всю информацию о ценах. Первое поле этой структуры, FinObjуказывает, что эта структура представляет дерево цен. Второе поле, PTree, - дерево, держащее цену инструментов в каждом узле дерева. Третье поле, AITree, - дерево, в котором хранятся начисленные проценты по инструментам в каждом узле дерева. Четвертое поле, tObs, представляет время наблюдения каждого уровня PTree и AITree, с единицами в терминах периодов компаундирования.
Вы можете непосредственно изучить поле в PriceTree структура, которая содержит дерево цен с векторами цен в каждом штате. Первый узел представляет tObs = 0, соответствующее дате оценки.
[Price, PriceTree] = bdtprice(BDTTree, BDTInstSet)
PriceTree.PTree{1}ans =
95.5030
93.9079
1.7657
95.5030
100.4865
1.4863
0.0245
7.4222
bdtprice | bdtsens | bdttimespec | bdttree | bdtvolspec | bkprice | bksens | bktimespec | bktree | bkvolspec | bondbybdt | bondbybk | bondbyhjm | bondbyhw | bondbyzero | capbybdt | capbybk | capbyblk | capbyhjm | capbyhw | cfbybdt | cfbybk | cfbyhjm | cfbyhw | cfbyzero | fixedbybdt | fixedbybk | fixedbyhjm | fixedbyhw | fixedbyzero | floatbybdt | floatbybk | floatbyhjm | floatbyhw | floatbyzero | floatdiscmargin | floatmargin | floorbybdt | floorbybk | floorbyblk | floorbyhjm | floorbyhw | hjmprice | hjmsens | hjmtimespec | hjmtree | hjmvolspec | hwcalbycap | hwcalbyfloor | hwprice | hwsens | hwtimespec | hwtree | hwvolspec | instbond | instcap | instcf | instfixed | instfloat | instfloor | instoptbnd | instoptembnd | instoptemfloat | instoptfloat | instrangefloat | instswap | instswaption | intenvprice | intenvsens | intenvset | mmktbybdt | mmktbyhjm | oasbybdt | oasbybk | oasbyhjm | oasbyhw | optbndbybdt | optbndbybk | optbndbyhjm | optbndbyhw | optembndbybdt | optembndbybk | optembndbyhjm | optembndbyhw | optemfloatbybdt | optemfloatbybk | optemfloatbyhjm | optemfloatbyhw | optfloatbybdt | optfloatbybk | optfloatbyhjm | optfloatbyhw | rangefloatbybdt | rangefloatbybk | rangefloatbyhjm | rangefloatbyhw | swapbybdt | swapbybk | swapbyhjm | swapbyhw | swapbyzero | swaptionbybdt | swaptionbybk | swaptionbyblk | swaptionbyhjm | swaptionbyhw