Выборка дисконтных факторов по интерполированной кривой доходности
Сводка
В документе показано, как получить дисконтные факторы для дат между котируемыми сроками, использованными для построения дисконтной кривой QuantLib. После построения кусочно-линейной в логарифмическом масштабе кривой по ставкам свопов пример создаёт последовательность будущих дат и для каждой вызывает метод discount кривой. Полученные значения образуют равномерную выборку кривой, которую можно отобразить вместе с датами.
В примере кода выборка выполняется с интервалом в пять лет, хотя в вопросе запрашиваются полугодовые интервалы; тот же подход применим, если выбирать даты с интервалом в шесть месяцев. Во втором ответе поясняется главное: кривая может вернуть дисконтный фактор для любой запрошенной даты, поэтому ограничивать вывод исходными узлами кривой не нужно. В примере используются синтетические данные по свопам в шведских кронах и включена экстраполяция за пределы последнего заданного срока. Таким образом, результат иллюстрирует использование API, а не предоставляет рыночные данные; экстраполированные значения зависят от допущений и конфигурации кривой.
Ключевые идеи
- Построенная кривая дисконтирования может возвращать дисконтные факторы для дат между входными узлами сроков.
- Выберите нужный интервал дат и запрашивайте значение кривой для каждой даты.
- В примере выборка выполняется с шагом в пять лет; для шага в полгода достаточно изменить интервал дат.
- Дисконтные факторы за пределами последнего узла кривой могут зависеть от настроек экстраполяции; учитывайте это при интерпретации.
Теги
Полный текст
# QuantLib Python - Discount Factor Interpolation within curve nodes
# QuantLib Python - Discount Factor Interpolation within curve nodes
Generated a discount curve, dCurve.PiecewiseLogLinearDiscount() using input par rate for terms (.5Y, 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 15Y, 20Y, 30Y) and output discount curve matching the input term structure. Any suggestions on how to output the discount factor curve on a .5Y interval term structure up to 30Y?
## Answer by Xiarpedia (score 1)
https://quant.stackexchange.com/a/77563
Based on your question I created the following curve example:
```
import QuantLib as ql
import pandas as pd
# Set the evaluation date
ql.Settings.instance().evaluationDate = ql.Date(30, 12, 2022)
# Declare a store variable for the helpers
helpers = []
# Create the attributes of the swap
calendar = ql.Sweden()
frequency = ql.Annual
convention = ql.ModifiedFollowing
# Synthetic market data
daycount = ql.Thirty360(ql.Thirty360.BondBasis)
index = ql.IborIndex(
"MyIndex",
ql.Period("3M"),
2,
ql.SEKCurrency(),
calendar,
ql.Following,
False,
daycount,
)
tenor = ["4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "25Y", "30Y"]
quotes = [
3.33,
3.2775,
3.235,
3.205,
3.1775,
3.1525,
3.1325,
3.095,
3.0275,
2.92,
2.815,
2.6925,
]
for r, m in zip(quotes, tenor):
rate = ql.QuoteHandle(ql.SimpleQuote(r / 100.0))
tenor = ql.Period(m)
helpers.append(
ql.SwapRateHelper(
rate, tenor, calendar, frequency, convention, daycount, index
)
)
curve = ql.PiecewiseLogLinearDiscount(0, calendar, helpers, ql.Actual365Fixed())
curve.enableExtrapolation()
dates, rates = zip(*curve.nodes())
```
Which leaves me at the stage you are at. We can then interpolate on a 5 year interval as following:
```
# Interpolate on a 5Y interval
nodes = []
start_date = ql.Date(30, 12, 2022)
while True:
start_date += ql.Period("5Y")
nodes.append(start_date)
if start_date > ql.Date(30, 12, 2053):
break
discount_factors = [curve.discount(d) for d in nodes]
display(pd.DataFrame(dict({"Date": nodes, "Discount Factor": discount_factors})))
```
Which results in:
| | Date | Discount Factor |
| 0 | December 30th, 2027 | 0.851205 |
| 1 | December 30th, 2032 | 0.735589 |
| 2 | December 30th, 2037 | 0.641855 |
| 3 | December 30th, 2042 | 0.567462 |
| 4 | December 30th, 2047 | 0.508218 |
| 5 | December 30th, 2052 | 0.464726 |
| 6 | December 30th, 2057 | 0.424997 |
## Answer by Luigi Ballabio (score 0)
https://quant.stackexchange.com/a/77564
You can pass any date you like to the `discount` method of the curve you built. It will return the corresponding discount factor.Полный текст с указанием источника опубликован на условиях его лицензии. Лицензия: CC BY-SA 4.0 (Stack Exchange)
Это краткое изложение подготовлено исследовательским агентом Stratmill по оригиналу и не является его копией.