نمونهگیری عوامل تنزیل از منحنی بازده درونیابیشده
خلاصه
سند نشان میدهد چگونه عوامل تنزیل را برای تاریخهای میان سررسیدهای اعلامشدهای به دست آوریم که برای ساخت منحنی تنزیل QuantLib استفاده میشوند. پس از ساخت منحنی تنزیل قطعهای و خطیـلگاریتمی از ورودیهای نرخ سوآپ، نمونه دنبالهای از تاریخهای آینده میسازد و برای هرکدام متد تنزیل منحنی را فراخوانی میکند. مقادیر حاصل نمونهای با فاصلههای منظم از منحنی هستند که میتوان آنها را کنار تاریخها نمایش داد.
کد نمونه با فاصلههای پنجساله مقدارگیری میکند، هرچند پرسش فاصلههای ششماهه را میخواهد؛ همین روش را میتوان با انتخاب تاریخهایی به فاصله شش ماه به کار برد. پاسخ دوم نکته اصلی را روشن میکند: منحنی میتواند ضریب تنزیل را برای هر تاریخ درخواستی برگرداند، پس نیازی نیست خروجی به گرههای اصلی منحنی محدود شود. نمونه از دادههای ساختگی سوآپ کرون سوئد استفاده میکند و برونیابی فراتر از آخرین سررسید ورودی را فعال میسازد. بنابراین، خروجی کاربرد 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 بر پایه متن اصلی نوشته است؛ نسخهای از اثر منبع نیست.