見出し画像

Quant College レクチャーシリーズ(16)QuantLib-Python チュートリアル(債券イールドカーブ編その1)

1.はじめに

概要と位置付け:
Pythonの金融商品評価ライブラリQuantLib-Pythonの使い方を解説するシリーズの第6回。今回は「債券イールドカーブ編その1」として、マーケットレートからの債券イールドカーブ構築を取り扱う。ソースコード一式はJupyter Notebook形式でダウンロード可能
当noteの続編では、Nelson-Siegelモデル等による債券イールドカーブの補間・補外などを取り扱う予定。

当noteリリースの背景:
近年のPython人気過熱を受け、ファイナンス理論についてもPythonで計算しながらハンズオンで学びたいというニーズが増えてきている。また、金融実務でもPythonの活用が広がっており、従来であればExcelマクロなどで対応していた計算も、Pythonのライブラリを駆使してできるだけ効率良くツール開発したい、というニーズも生じている。

ファイナンス理論については良質なテキストが日本語で多数出ており(洋書の翻訳版が多いが)、学習者にとって教材に事欠くことは少ない。また、Pythonの文法や機械学習ライブラリの使い方については非常に多くの和書が出ており、どれを選べばいいか悩むほどである。

しかしファイナンス理論をPythonで学ぶ和書はまだ数が少なく、また、それらの多くはスクラッチ実装をベースに学ぶ形式になっている。特に実務家にとっては、スクラッチ実装のような悠長なことは言っておられず、実務で必要な計算ツールを素早く効率的に作りたいはずである。そもそもExcelマクロ等ではなくPythonを使う理由は「多数の便利なライブラリを有効活用したいから」のはずである。

Pythonには実は、QuantLib-Pythonという主に金融商品評価ライブラリが存在し、これを使えば、実務で必要となる計算の大部分は、少ないコードで実装できる。ところがQuantLib-Pythonの解説は、少々マニアックな分野ということもあり、英語で探しても断片的なものしか見つからない。日本語のものに至ってはほぼ皆無という状況であり、初学者の自習にはハードルが高いといえる。さらに、QuantLib-PythonはC++で開発されたライブラリであるQuantLibをPythonから呼び出す形になっており、適切な使い方を自力で把握しようとすると、C++の広範な知識が要求されてしまう

そこで当noteでは:
QuantLib-Pythonの使い方について、簡単なサンプルコードを用いてできるだけ丁寧に日本語でまとめた。関数に与える引数についても、可能な限り一つずつ説明する。これにより、ライブラリのエンドユーザーにとって必要な知識が効率的に得られるはずである。
なお当noteはシリーズ記事の一部であり、債券イールドカーブ構築と債券評価を主に扱う。シリーズの続編として、「モデルによる債券イールドカーブの補間・補外編」や「ボラティリティスマイル編」などを予定している。

当noteの特徴:
・ライブラリの使い方を簡単なサンプルコードを通して説明した。
・関数に与える引数の意味をできるだけ平易に解説した。
・Pythonの若干難しめな文法や機能は使わないで説明するよう努めた。
・ファイナンス関連の実務知識もその都度、簡単に補足説明した。
・ソースコード一式をすぐに動かせるよう、Jupyter Notebook形式で配布している。

当noteの著者について:
・クオンツとして新卒入社後、デリバティブや仕組債の評価実務に長年従事
・評価モデルの調査、ロジック開発、ライブラリ開発の実務を経験
・運営するサイトQuantCollegeでは金融工学関連記事を700本以上執筆
・Twitterフォロワー3万3千人超
・note販売実績1,041部(2022年10月末時点)

当noteはこのような方におすすめ:
・Pythonで効率的に金融商品評価を行いたい/学びたい
・QuantLib-Pythonを用いたイールドカーブ構築方法を知りたい
・Pythonの文法は学んだが今度は金融実務への応用を学びたい
・Excel/VBAでイールドカーブを構築しているがPythonに移行したい
・QuantLibを使ってみたいが、C++の知識がないので断念した
・英語の文献を読むのはしんどいので、日本語で効率的に学びたい

当noteで前提とする知識:
・Google Colaboratoryを使えること(またはPython環境を構築できること)
・Pythonの基本的な文法の知識
・(必須ではないが)債券の基本的な知識があるとより深く理解しやすい
・(必須ではないが)オブジェクト指向プログラミングの基本的な知識(クラス、オブジェクト/インスタンス、コンストラクタ、メソッド、継承、多態性など)があるとより深く理解しやすい

当noteを読んで得られるメリット:
・QuantLib-Pythonを用いたイールドカーブ構築方法がわかる
・Pythonで具体的に数値を出しながら金融商品評価を学べる
・C++を知らなくても、QuantLibを用いた計算を実装できる
・慣れない英語でQuantLib関連資料を読み込む時間を節約できる
・債券市場データからイールドカーブを構築する方法、シンプルな債券の評価方法についてPythonで学べる

当noteに書いていない内容:
・Pythonの環境構築、基本文法の解説
・QuantLib-Pythonの背後にある実装の詳細(C++レイヤーでのクラス設計、SWIGを用いたPythonラッパーの生成など)
・イールドカーブの背後にあるファイナンス理論の解説、ディスカウントファクターを求める数式やその導出
・スワップ市場データによるイールドカーブ構築の実装、スワップの評価(過去noteで解説済み)
・Nelson-Siegelモデル等を用いたイールドカーブ補間の実装(続編で扱う予定)
・クーポンのキャップ/フロア、マルチコーラブルなどオプション性のある債券・仕組債の評価(続編で扱う予定)

当noteはこのような方にはおすすめしません:
・Pythonの環境構築、基本文法から教えてほしい
・そもそもの金利、イールドカーブ、債券、割引現在価値の概念をゼロから詳しく教えてほしい
・債券評価の背後にあるファイナンス理論、ディスカウントファクターを求める数式やその導出を学びたい
・イールドカーブ構築の計算をスクラッチで(ライブラリを使わずに)実装したい
・スワップ市場データを用いたイールドカーブ構築の実装だけを学びたい
・オプション性のある債券・仕組債の実装だけを学びたい

ディスクレーマー:
当noteの著作権を含む知的所有権は当note著者に帰属し、事前に当note著者からの承諾を得ることなく、当noteおよびその複製物に修正・加工を施すことを固く禁じます。また、当noteおよびその複製物を転載、共有、配布、送信、転用、譲渡、販売すること、及びそれらに準ずる行為を固く禁じます。
上記の禁止事項が発覚した場合は然るべき対応をとらせて頂きます。
当noteの内容については、正しい情報あるいは十分に信頼できると判断した情報に基づき作成することに最大限努めてはおりますが、情報の正確性、完全性について当note著者は保証せず、いかなる責任を負うものでもありません。当noteの内容及びリンク先から読者様・購入者様へいかなる損失・損害などの被害が発生したとしても、当noteでは責任を負いかねますのでご了承下さい。
当noteはパブリックに公開されている情報、及び広く一般の購入者・購読者に向け発信されている情報を基に作成されたものであり、特定企業に固有の情報・特定企業が占有する情報を含みません。当noteに記載の内容や意見につきましては、当note運営者の個人的見解であり、当note運営者の雇用主の公式見解ではありません。

1.1 当noteの構成

当noteの構成は次の通り。

2章でQuantLib-Pythonの概要とインストールについて簡単に確認する。
3章以降が本編であり、各Notebookのコードを順に解説していく。

3章は債券価格・債券利回りによるイールドカーブ構築のコードを説明する。通貨は日本円と米ドルを想定し、以下2通りのカーブ構築を見ていく。
・債券市場価格から構築する方法
・債券市場利回りから構築する方法
さらに、構築されたカーブのもとで、インプットに用いたマーケットデータが再現することを確認する。

4章は構築済みのイールドカーブを用いて債券を評価するコードについて説明する。評価対象の債券は割引債、固定利付債、変動利付債、アモチ付き固定利付債、アモチ付き変動利付債、固定利付社債、変動利付社債である。社債はイールドカーブにクレジットスプレッドを乗せて割り引き評価する。
また、イールドカーブを変更して再計算する方法や、クレジットスプレッドを変更して再計算する方法も解説する。

5章はおまけとして、債券評価関連の関数をまとめて紹介する。利回り、クリーンプライス、ダーティプライス、経過利息、Z-スプレッドのほか、金利感応度(デュレーションやコンベクシティなど)を計算する。

6章で当noteをまとめる。

ソースコード一式は当note の末尾に添付しており、Jupyter Notebook形式でダウンロードできる。

2.QuantLib-Pythonの概要とインストール

2.1 概要

まずQuantLibとは、デリバティブや債券など、金融商品のプライシングやリスク計算が行えるライブラリであり、C++で開発されている。

QuantLib-Pythonとは、QuantLibをPythonから呼び出すラッパーである。C++を呼び出す部分のソースコードは、SWIGというツールで自動生成されている。内部的にはQuantLibを呼ぶ出しているだけなので、QuantLib-Pythonに入っているがQuantLibには入っていないという機能は無い。逆にQuantLibには入っているがQuantLib-Pythonには入っていない機能は存在する点に注意。ロジックの核心部分がPythonで書かれているわけではないので、計算方法の実装を知りたい場合はQuantLibのC++コードを読みに行く必要がある。

2.2 インストール

方法としては、ビルド済みのものをインストールするか、自力でビルドするかのどちらかである。自力でビルドするにはC++の環境構築などが必要になるので特別な事情がない限りはおすすめしない。Pythonの他のライブラリと同様、ビルド済みのものをインストールすればよい。

2.2.1 コマンド

ビルド済みのものをインストールする方法もまた、Pythonの他のライブラリと同様であり、QuantLib-Pythonに特有のプロセスは必要ない。コマンドは

python -m pip install QuantLib

である。

なお注意として、上記コマンドでQuantLibではなくQuantLib-Pythonを指定すると、古いバージョン(バージョン1.18以前)しかインストールできない。2022年10月末現在、QuantLib、およびQuantLib-Python(のもとになっているQuantLib-SWIG)の最新バージョンはいずれも1.28である。
QuantLibのPython版をインストールする際に指定する名前が、以前はQuantLib-Pythonだったが、バージョン1.19以降はQuantLibに変更された。以前に古いバージョンをQuantLib-Pythonとしてインストールしている場合は、改めてQuantLibとしてインストールし直しておこう。

当noteではC++で開発されたQuantLib本体と区別するために、QuantLib-Pythonと表記している。

2.2.2 Jupyter Notebook / Google Colaboratory上でインストール

Jupyter NotebookやGoogle Colaboratory上でインストールする場合は

!pip install QuantLib

とすればよい。

Google Colaboratory上でインストールした場合の様子は以下の通り。

2.2.3 関連リンク

QuantLib-Pythonのインストール方法についてはこちらの記事で解説しているので参照されたい(内容が若干古くなっているかもしれないが)。

念のためにQuantLib公式のインストール方法のページ(英語)をリンクしておく。

QuantLib公式サイト(Windows)
QuantLib公式サイト(Mac OS)
QuantLib公式サイト(Linux)

3.債券イールドカーブの構築

本章のソースコードは末尾添付の以下ファイルを参照。
14_bond_yield_ver1.0.ipynb

本章では債券のマーケットレートから債券イールドカーブを構築する。債券イールドカーブとは債券キャッシュフローを現在価値に割り引くのに用いるイールドカーブ(割引カーブ)である。

カーブ構築方法は以下の3通りを紹介する。

ここから先は

69,531字 / 7画像 / 3ファイル

¥ 1,480

この記事が気に入ったらサポートをしてみませんか?