QuantLib 研究ノート - quantlib を使用してゼロ金利 (ゼロ金利) の期間構造曲線を描く

⭐️はじめに

金利というこの一見単純な概念は、金融分野において多くの意味を持っています。この用語に基づいて、ゼロ金利(スポット金利)や先渡し金利などの概念が拡張されます。この記事では、ゼロ金利について説明し、ゼロ金利の期間構造曲線を描きます。
ここに画像の説明を挿入

⭐️ いくつかの財務概念

1. ゼロ金利

スポット金利とは、ゼロ金利とも呼ばれ、当社の普通預金のように、途中で利息を支払わず、満期後に元利金を返済する運用金利のことを指します。

2. ゼロクーポン債

ゼロクーポン債は割引債とも呼ばれ、割引価格で発行され、発行者は債券期間中利息を支払わず、満期時には額面で保有者に償還されます。そしてその利回りは債券のゼロ金利として理解できます。

上記の概念を、利付債券(債券の保有期間中に利息が発生する、つまり保有者は定期的にクーポンを受け取る)などのより一般的な状況と比較して、分解、利付という概念を使用して理解します。債券は複数のゼロクーポン債で構成されており、各ゼロクーポン債の満期収入が利付債券のクーポンとなり、最後のゼロクーポン債の満期収入が元本となります。そして有利子債のクーポン。
ゼロ金利がいかに重要であるかがわかります。

3. 金利期間構造

金利の期間構造(金利の期間構造)とは、ある時点におけるさまざまな期間金利またはファンド利回り(利回り)と満期(マチュリティ)の間の関係を指します。金利の期間構造は、さまざまな期間の資金の需要と供給の関係を反映し、市場金利の全体的な水準と変化の方向を明らかにし、投資家が債券投資に取り組む際や関連政府部門が債券を強化する際の参考資料を提供します。管理。

金利期間構造曲線には、正曲線、逆曲線、平坦曲線の 3 種類があります。プラスカーブの特徴は、短期金利が長期金利よりも低く、市場が将来に対して楽観的であり、投資家が将来の金利が高くなるのを期待していることを意味します。逆カーブとは、短期金利が長期金利よりも高いことを指します。これは、市場が多くのリスクを抱えていることを意味します。投資家は、短期金利が高い投資経路を選択します。フラットカーブは、短期金利が特徴です。・長期金利と同水準の長期金利は、市場投資家が過度な期待を寄せておらず、安定した状態にあることを示している。

⭐️ quantlib の基本

さて、金融に関する知識がある程度わかったところで、このコードで使用されているツールを見てみましょう。
quantlib は、無料でオープン ソースの定量的財務コンピューティング ソフトウェア ライブラリです。財務概念に基づいていくつかのデータ構造を抽象化し、これらのデータ構造に基づいてさまざまな財務関連の計算を提供します。この記事で使用されているコンポーネントの簡単な説明は次のとおりです。

1.カレンダー

ql.Calendar クラスは、特定の取引所または特定の国において、日付が営業日であるか休日であるかを判断し、日付を特定の営業日数ずつ増減するためのインターフェイスを提供します。
多くの国のカレンダーがサポートされており、この記事では米国のカレンダーが使用されています。

2.デイカウンター

「日数計算規則」は、金融商品の評価に不可欠です。日数を計算します。この記事で使用されるルールは、Thirty360 です。これは、1 か月あたり 30 日、1 年あたり 360 日を意味します。

3. ゼロ金利の期間構造

このクラスは、ゼロクーポン金利期間構造をインスタンス化するために使用されます。

ql.ZeroCurve(日付、収量、dayCounter、cal、i、comp、freq)

パラメータは次のように説明されます

パラメータ 説明する
日付 ゼロ金利期間一覧
収量 ゼロ金利一覧
デイカウンター カレンダー
カロリー カレンダー
線形補間方法。ここでは非線形ではなく線形性が非常に重要です。
コンプ 単利ですか、複利ですか?
周波数 関心の頻度

⭐️コード

このペーパーでは、線形および非線形内挿法を使用して金利期間構造曲線を生成し、プロットします。

import numpy as np
import QuantLib as ql
import matplotlib
import matplotlib.pyplot as plt


if __name__ == "__main__": 
    # 日历
    cal = ql.UnitedStates(0)
    # 天数计数器
    day_cnt = ql.Thirty365()
    # 已知即期日期
    spot_dates = [ql.Date(15,1,2020), ql.Date(15,7,2020), ql.Date(15,1,2021), ql.Date(15,7,2021), ql.Date(15,1,2022)]
    # 已知即期利率
    spot_rates = [0.1, 0.2, 0.3, 0.25, 0.19]
    # 利率结构曲线(采用不同插值方法)
    z_curve = ql.ZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    llz_curve = ql.LogLinearZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    cz_curve = ql.CubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    ncz_curve = ql.NaturalCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    lcz_curve = ql.LogCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    mcz_curve = ql.MonotonicCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    # 采用的插值方法和对应的利率结构曲线
    curve_list = dict({
    
    "ZeroCurve":z_curve, "LogLinearZeroCurve":llz_curve, "CubicZeroCurve":cz_curve, 
                       "NaturalCubicZeroCurve":ncz_curve, "LogCubicZeroCurve":lcz_curve, "MonotonicCubicZeroCurve":mcz_curve, })
    # 绘图准备
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    fig = plt.figure(figsize=(9, 7), facecolor='w')
    fig.suptitle('利用不同插值方法生成即期利率结构曲线', fontsize=15)    
    # 遍历所有插值类型
    for i in range(len(list(curve_list.keys()))):
        # 插值类型
        curve_type = list(curve_list.keys())[i]
        print(curve_type)
        # YieldTermStructureHandle
        handle = ql.YieldTermStructureHandle(curve_list[curve_type])
        # 生成多个时间点,以年为单位
        times = np.linspace(0, handle.maxTime(), 100)
        # 计算时间对应的利率
        rate_list = [handle.zeroRate(t, ql.Continuous).rate() for t in times]
        # 绘制子图
        ax = fig.add_subplot(2, 3, i+1)
        ax.set_xlabel("years")
        ax.set_ylabel("rate")
        ax.plot(times, rate_list)
        ax.grid(visible=True, ls=":", color="#808080")
        ax.set_title(r'%s' % curve_type, fontsize=12)
    plt.tight_layout()
    plt.subplots_adjust(top=0.9)
    plt.show()
    # plt.savefig('zerorate.png', dpi=800)

描画結果は以下の通りです
ここに画像の説明を挿入
作者のレベルに限界があるので、間違っているところがあればコメント・修正歓迎です!

おすすめ

転載: blog.csdn.net/weixin_37522117/article/details/132233666