目次
はじめに
今回はQuantLibをPythonから呼び出すためのラッパーであるQuantLib-Pythonのインストール方法について書いていく。
QuantLibとは
QuantLibとは、デリバティブや債券などの金融商品を評価することに特化したライブラリであり、C++で作られている。以下の関連記事でQuantLibのインストール方法などを説明してきた。
QuantLib-Pythonとは
QuantLib-Pythonとは、QuantLibと同じ機能をPythonから呼び出せるラッパーである。C++を呼び出す部分のソースコードは、SWIGというライブラリをつかって自動生成されている。QuantLib-SWIGでは、Pythonの他にもJava, Scala, C#, Rから呼び出すコードが自動生成されている。
QuantLibはC++のライブラリであり、使いこなすにはC++の知識が不可欠となる。しかし、C++はどうしてもポインタやスマートポインタのところでつまづく人が多く、とっつきにくい印象があるようだ。QuantLib-PythonはC++の知識が不要であり、Pythonから気軽に呼び出せる。最近はプログラミングといえばPython、というくらいPythonが普及していることもあり、(QuantLibの内部を自前で拡張するのではなく、)単にライブラリとして外部からQuantLibを呼び出したいだけの人にとっては、QuantLib-Pythonが良いだろう。
前提
- Windows10 (64bit)
- boost-1.74
- QuantLib-1.19
- QuantLib-SWIG-1.19
- Anaconda3-2020.07 (Python3.8)
Windows以外でのインストール方法については以下の参考URL(英語)を参照。IT企業からすると信じられないだろうが、金融機関のPCは未だにWindowsである。
インストール方法の参考URL
- QuantLib公式サイト(Windows)
- QuantLib公式サイト(Mac OS X)
- QuantLib公式サイト(Linux/Unix)
- 参考1(Ubuntu, Windows)
- 参考2(Windows)
- 参考3(Windows)
pipでのインストール
Anacondaのインストール方法はネットにいくらでもあるので省略。
pipでインストールするには、Anaconda Promptから
pip install QuantLib-Python
とすればよい。自分でQuantLib-Pythonの中を修正したい、というような人以外は、上記の方法でコンパイル済みバイナリーをインストールすればそれで十分だ。うまくいかない場合は以下で説明するように自力でインストールする必要がある。pipでインストールできた場合は以下の節は飛ばしてもらって構わない。
自力でのインストール
BoostとQuantLibのインストール
・QuantLib-PythonのインストールにはQuantLibのビルド済みバイナリーファイルが必要
・QuantLibをビルドするにはBoostのヘッダーファイルとバイナリーファイルが必要
ということで、まずBoostをインストールし、次にQuantLibをインストールする。方法は以下の記事で詳細に説明しているので、そちらを参照のこと。
QuantLib-SWIGのインストール
QuantLibのビルドまで終わったら、次にQuantLib-SWIGをインストールする。
ダウンロードサイトに行き、下の方にあるDownloadsから最新バージョンのzipファイルを落とす。本記事の執筆時では1.19が最新であった。
ここで注意すべきは、既にインストールしたQuantLibのバージョンと、QuantLib-SWIGのバージョンが対応していないといけない、ということだ。
zipファイルを好きなところに解凍する。QuantLib-SWIGのインストール自体はこれで終了で、あとはQuantLib-SWIGが入っているフォルダへのパスを以下のQuantLib-Pythonのインストール段階で指定すればそれでOK。
QuantLib-Pythonのインストール
最後にQuantLib-Python本体をインストールする。
Anaconda Promptを開き、以下のようにパスを設定。
ここでは、C:\localの下にQuantLib-SWIG, QuantLib, boostが全て入っている前提で書いているので、各自で自分のパスに直す必要がある。
cd C:\local\QuantLib-SWIG-1.9\Python
set QL_DIR=C:\local\QuantLib-1.9
set INCLUDE=C:\local\boost_1_64_0
ここまで終われば、あとはビルドする。以下のコマンドを入力。
python setup.py build
きちんとビルドされたか確認のために、以下のコマンドを入力。
python setup.py test
最後に、インストール済みのPythonに対して、ビルドしたモジュールを紐付けるため、以下のコマンドを入力。
python setup.py install
これでインストールは完了となる。
あとは好きなIDEで動かせばよい。JupyterLab/JupyterNotebook, PyCharm, Spyderあたり、またはVSCodeでも良いだろう。
QuantLibを使うには次のようにインポートすればよい。
import QuantLib as ql
正しくインストールできたかテスト
テストコード
簡単なテストコードを動かしてみる。ここではバニラオプションをBlack-Scholesモデルで評価する。コードの内容は次回の記事で解説。
import QuantLib as ql
# date settings
todaysDate = ql.Date(1, 10, 2020)
ql.Settings.instance().evaluationDate = todaysDate
day_count = ql.Actual365Fixed()
calendar = ql.UnitedStates()
# market data
spot = 130
risk_free = 0.001
dividend = 0.02
vol = 0.20
# trade data
maturity = ql.Date(1, 4, 2021)
strike = 130
option_type = ql.Option.Call
# make market objects
spot_handle = ql.QuoteHandle(ql.SimpleQuote(spot))
flat_rf_ts = ql.YieldTermStructureHandle(
ql.FlatForward(todaysDate, risk_free, day_count)
)
flat_div_ts = ql.YieldTermStructureHandle(
ql.FlatForward(todaysDate, dividend, day_count)
)
flat_vol_ts = ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(todaysDate, calendar, vol, day_count)
)
# make trade objects
payoff = ql.PlainVanillaPayoff(option_type, strike)
exercise = ql.EuropeanExercise(maturity)
option = ql.VanillaOption(payoff, exercise)
# make model object
bsm_process = ql.BlackScholesMertonProcess(
spot_handle, flat_div_ts, flat_rf_ts, flat_vol_ts)
# make pricing engine
engine = ql.AnalyticEuropeanEngine(bsm_process)
# set pricing engine
option.setPricingEngine(engine)
# run calculation
print(option.NPV())
実行結果
6.683946573403789
おわりに
今回はQuantLib-Pythonをインストールし、テストコードを動かすところまでを見てきた。次回以降は毎回、自作の簡単なテストコードを解説していく。