الانتقال إلى المحتوى
جميع مستندات المكتبة

استخراج عوامل الخصم من منحنى عائد مستوفى

مقال Quant Q&A · المؤلف: Mike

الملخص

توضح الوثيقة كيفية الحصول على عوامل الخصم لتواريخ تقع بين آجال الاستحقاق المقتبسة المستخدمة لبناء منحنى خصم 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 هذا الملخص استنادًا إلى المصدر الأصلي؛ وهو ليس نسخة منه.