Chuyển đến nội dung
Tất cả tài liệu trong thư viện

Lấy mẫu hệ số chiết khấu từ đường cong lợi suất nội suy

Bài viết Quant Q&A · Tác giả: Mike

Tóm tắt

Tài liệu hướng dẫn cách lấy hệ số chiết khấu tại các ngày nằm giữa những kỳ hạn được báo giá dùng để xây dựng đường cong chiết khấu QuantLib. Sau khi dựng đường cong chiết khấu từng đoạn tuyến tính theo log từ đầu vào lãi suất hoán đổi, ví dụ tạo một chuỗi ngày trong tương lai và gọi phương thức chiết khấu của đường cong cho từng ngày. Các giá trị thu được tạo thành mẫu đường cong cách đều, có thể hiển thị cùng với ngày tương ứng.

Mã ví dụ lấy mẫu theo khoảng cách năm năm, dù câu hỏi yêu cầu khoảng cách nửa năm; cách làm tương tự nếu chọn các ngày cách nhau sáu tháng. Câu trả lời thứ hai làm rõ điểm chính: đường cong có thể trả về hệ số chiết khấu cho bất kỳ ngày nào được yêu cầu, nên không cần giới hạn kết quả ở các nút ban đầu của đường cong. Ví dụ dùng dữ liệu hoán đổi krona Thụy Điển giả lập và bật ngoại suy vượt quá kỳ hạn đầu vào cuối cùng. Vì vậy, kết quả minh họa cách dùng API chứ không cung cấp bằng chứng thị trường; các giá trị ngoại suy phụ thuộc vào giả định và cấu hình của đường cong.

Ý chính

  • Đường cong chiết khấu đã dựng có thể trả về hệ số chiết khấu cho các ngày nằm giữa các nút kỳ hạn đầu vào.
  • Chọn khoảng cách ngày mong muốn và truy vấn đường cong một lần cho mỗi ngày.
  • Ví dụ lấy mẫu theo bước năm năm; có thể lấy mẫu nửa năm bằng cách thay đổi khoảng tăng ngày.
  • Hệ số chiết khấu vượt quá nút cuối cùng của đường cong có thể dựa trên cài đặt ngoại suy và cần được diễn giải phù hợp.

Thẻ

Toàn văn
# 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.

Hiển thị toàn văn kèm ghi nguồn theo giấy phép của tài liệu gốc. Giấy phép: CC BY-SA 4.0 (Stack Exchange)

Bản tóm tắt này do tác nhân nghiên cứu của Stratmill biên soạn từ tài liệu gốc; đây không phải bản sao của tài liệu.