実践編 トップ

このサイトのタイトルに“実務で使える”という形容詞を付けた以上、金融工学で研究されている様々なデリバティブズの価格計算方法について、実際にコンピュータープログラムに落とし込んで、どのように計算しているかの説明が必要かと思います。しかも、その計算アルゴリズムは、実務で使われている、日数計算方法や、休日の取扱い、カレンダー、決済期間、先物の最終決済価格の決め方などについても、きちんと対応できている必要があります。 

市販の金融商品のトレーディングシステムや、リスク管理システムは、そういった計算アルゴリズムが内包されていますが、具体的なプログラムコードはブラックボックスになっており、伺い知る事ができません。そこで、QuantLibと呼ばれているオープンソースを使って、それらについて解説を試みたいと思います。 

QuantLibとは 

  • 様々な金融商品の“価格計算アルゴリズム”を、
  • C++言語を使って、
  • オブジェクト指向プログラミングの手法でクラス階層に抽象化した、
  • オープンソースライブラリーです。

QuantLib開発のプロジェクトは2000年頃にスタートし、バージョン 1.0 が発表されたのは、2010年2月です。現在(2023年11月時点)、Version1.32 が公開された所です。 

中心となるモジュールは“Financial Instruments”と”Pricing Engines”で、それらの機能をサポートする、数10~数100のクラスからなる複数のモジュールが提供されています。メインページのURLを添貼しますので、なによりもまずQuantLibのサイトに行ってみて下さい。 

デリバティブズ業務を本格的に展開している、欧米の大手金融機関であれば、こういった価格計算アルゴリズムのライブラリーは、独自で開発しているものと思われます。そういったライブラリーは、80年代以降、おそらく、通算で数百人単位の専門の開発担当者が、数十万行から数百万行のプログラムコードを、数百万時間から数千万時間かけて構築されたものと推察します。当然、途中で何度も大幅な見直しが行われたであろう事は想像に難くありません。 

同じ様なものを後発の金融機関が導入しようとする場合、ゼロからのスタートでは膨大なリソースとコストと時間を覚悟する必要があります。しかし、QuantLibのようなオープンソースを応用すれば、コストと時間を大幅に節約できる可能性があります。 

また、金融工学をアカデミクスで研究されている方にとっても、デリバティブズの価格計算アルゴリズムを実際に走らせる事は重要かと思います。金融工学は、名前の通り理学ではなく“工学”であり、様々なモデル・理論が実際に実務で使えるかどうか確認する事が重要です。理論だけ探求すれば言い訳ではありません。その為には、モデルが、実際にうまく経済現象を記述できているのかを、市場データを使って検証する必要があります。また、計算時間は実務で使用可能な範囲内でおさまる必要があります。しかし、それらをゼロから自分で開発するのは非常に困難です。そういった方にとっても、QuantLibのようなオープンソースは便利なはずです。 

しかし、QuantLibを使うのは容易ではありません。おそらく“最低限”でも、次の様な知識レベルが要求されます。 

  • C++のシンタックス。基本レベルのみならず、オブジェクト指向プログラミングの技法や、デザインパターンの使い方を、ある程度理解しておく必要があります。
  • 金融工学に関するハイレベルの知識。及び、それを理解するのに必要な数学の知識。(様々なオプションモデル、有限差分法や数値積分などの数値解析の手法、モンテカルロシミュレーションのテクニック、SolverやOptimizer、高速な行列演算の手法、等々)
  • かなり広範な金融商品および金融実務の知識。(広範なデリバティブズ関連の商品知識と取引慣行)

“最低限”と言いながら、そうとうハイレベルな内容です。金融実務に携わっている人で、これらすべてに精通している人は、それほど多くはない無いと思います。 

逆に、QuantLibを使って、そういった事を学んでいくのも手です。様々なオプションモデルに関する論文や書籍を読んでも、具体的な価格計算アルゴリズムの記述が無いか、あったとしても、プログラム言語での記述方法までは解説されていません。価格計算アルゴリズムのプログラムコードを解説した書籍も、僅かながら存在しますが、実際にコンピューター上で走らせないと意味がありません。書物だけで理解するより、実際にプログラムを走らせ、計算してみる事で、モデルの使用感が実感できます。また、価格計算アルゴリズムについても、具体的な計算過程が可視化されているので、より理解しやすくなると思います。 

という事で、“実務で使える”レベルの金融工学を理解するには、QuantLibの使い方を解説するのが、最も有効ではないかと考えました。 

このサイトをご覧になられている方は、すでに金融の実務に携わっておられるか、あるいはアカデミクスの世界で学んでいるか研究されている方ではないかと思います。そういった方々であっても、C++言語については、あまり馴染みが無いのではないかと推察します。もしそうであれば、まずC++について、数週間から数カ月かけて基本的なシンタックスを理解してからここに戻ってきて下さい。それが無いと、プログラムコードの解析は、暗号解読よりも困難です。 

そこまで時間をかけて学ぶ価値があるのかという疑問があるでしょう。しかし、デリバティブズの価格計算を行っていく中で、計算結果が異常値を示す事がしばしばあります。そういった場合、その原因を理解するには、どのような計算アルゴリズムが、具体的にどのようにプログラムコードで記述されているかを理解している事が重要です。Bugから発生する場合もありますが、モデルの特性や、計算方法の特性から異常値が出る事もあります。盲目的にプログラムを信じると、間違ったリスク量でポジション管理をしたり、間違った時価評価をしたりするリスクがあります。そういった事象を、気付く能力や修正する能力も、実務では非常に重要です。ブラックボックスを盲目的に信じるのは危険です。 

もうひとつ、実利的な意味での学ぶ価値としては、QuantLibが理解できて、使えるレベルまでのスキル・知識あれば、欧米の投資銀行で、クオンツアナリスト、リスクマネージャー、プロダクトコントローラーなどのポストで、数千万円単位の年俸が期待できるかも知れません。 

QuantLibを使って、“実務で使える金融工学”を解説するなど、少し大風呂敷を広げた感があります。QuantLibが提供しているライブラリーの量は広範かつ膨大で、相当高度なオプションモデルの計算アルゴリズムを含みます。自分自身、それらすべてを理解している訳ではありません。また、私は、C++のプログラマーではなく、開発されたアルゴリズムを使うユーザー側だったので、C++に関する詳細な知識がある訳ではありません。従って、QuantLibのすべてを解説できる訳では無く(膨大であり、無理です)、私自身が、重要と考える部分について、あくまで、私自身の理解している範囲内での説明になりますので、ご容赦下さい。 

< 実践編の構成 >

まずQunatLibを使う為には、c++言語の開発環境が必要になりますが、Microsoftが無償で提供しているVisual Studio のダウンロードとインストール方法を解説し、その上でQuantLibのダウンロード方法を解説します。またQuantLib を使うには、Boost と呼ばれるテンプレートライブラリも必要になります。それらのインストール方法も併せて解説します。

次に、QuantLibのクラスライブラリーをどのように使うか、いくつか用意されているExamplesを使って、具体的に解説したいと思います。また、各Exampleで使われているモデルや計算アルゴリズムについても、簡単な解説を行いたいと思います。さらに、日数計算方法や、休日の取扱い方法など、市場慣行にかかるクラスの取扱い方法についても説明していきたいと思います。 

最後に、QuantLibプロジェクトの主要メンバーであるLuigi Ballabio氏が書いた“Implementing QuantLib”の訳を載せたいと考えています。この書物は、QuantLibが提供している基本的なモジュールのオブジェクトモデル構造や、その使い方、さらにプログラムの問題点などをまとめたものです。これからQuantLibを使おうとする方が全体の構造を理解する為の一助になると思います。一応、Ballabioしから、翻訳を公開する了解を頂いております。この書物のオリジナルは、LeanPubで購入可能ですし、やや古いバージョンであればBallabio氏自身のBlogでも公開されています。 

<ライセンス表示>

QuantLibのソースコードを使う場合は、以下のようなライセンス表示とDisclaimerの表示が義務付けられているので、添付します。 

ライセンス

QuantLib is
Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl

Copyright (C) 2001, 2002, 2003 Nicolas Di Césaré
Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb

Copyright (C) 2002, 2003, 2004 Decillion Pty(Ltd)
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014, 2015 Ferdinando Ametrano

Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2017, 2018 StatPro Italia srl
Copyright (C) 2003, 2004, 2007 Neil Firth
Copyright (C) 2003, 2004 Roman Gitlin
Copyright (C) 2003 Niels Elken Sønderby
Copyright (C) 2003 Kawanishi Tomoya

Copyright (C) 2004 FIMAT Group
Copyright (C) 2004 M-Dimension Consulting Inc.
Copyright (C) 2004 Mike Parker
Copyright (C) 2004 Walter Penschke
Copyright (C) 2004 Gianni Piolanti
Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Klaus Spanderen
Copyright (C) 2004 Jeff Yu

Copyright (C) 2005, 2006, 2008 Toyin Akin
Copyright (C) 2005 Sercan Atalik
Copyright (C) 2005, 2006 Theo Boafo
Copyright (C) 2005, 2006, 2007, 2009 Piter Dias
Copyright (C) 2005, 2013 Gary Kennedy
Copyright (C) 2005, 2006, 2007 Joseph Wang
Copyright (C) 2005 Charles Whitmore

Copyright (C) 2006, 2007 Banca Profilo S.p.A.
Copyright (C) 2006, 2007 Marco Bianchetti
Copyright (C) 2006 Yiping Chen
Copyright (C) 2006 Warren Chou
Copyright (C) 2006, 2007 Cristina Duminuco
Copyright (C) 2006, 2007 Giorgio Facchinetti
Copyright (C) 2006, 2007 Chiara Fornarola
Copyright (C) 2006 Silvia Frasson
Copyright (C) 2006 Richard Gould
Copyright (C) 2006, 2007, 2008, 2009, 2010 Mark Joshi
Copyright (C) 2006, 2007, 2008 Allen Kuo
Copyright (C) 2006, 2007, 2008, 2009, 2012 Roland Lichters
Copyright (C) 2006, 2007 Katiuscia Manzoni
Copyright (C) 2006, 2007 Mario Pucci
Copyright (C) 2006, 2007 François du Vignaud

Copyright (C) 2007 Affine Group Limited
Copyright (C) 2007 Richard Gomes
Copyright (C) 2007, 2008 Laurent Hoffmann
Copyright (C) 2007, 2008, 2009, 2010, 2011 Chris Kenyon
Copyright (C) 2007 Gang Liang

Copyright (C) 2008, 2009, 2014, 2015, 2016 Jose Aparicio
Copyright (C) 2008 Yee Man Chan
Copyright (C) 2008, 2011 Charles Chongseok Hyun
Copyright (C) 2008 Piero Del Boca
Copyright (C) 2008 Paul Farrington
Copyright (C) 2008 Lorella Fatone
Copyright (C) 2008, 2009 Andreas Gaida
Copyright (C) 2008 Marek Glowacki
Copyright (C) 2008 Florent Grenier
Copyright (C) 2008 Frank Hövermann
Copyright (C) 2008 Simon Ibbotson
Copyright (C) 2008 John Maiden
Copyright (C) 2008 Francesca Mariani Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Master IMAFA - Polytech'Nice Sophia - Université de Nice Sophia Antipolis
Copyright (C) 2008, 2009 Andrea Odetti
Copyright (C) 2008 J. Erik Radmall
Copyright (C) 2008 Maria Cristina Recchioni
Copyright (C) 2008, 2009, 2012, 2014 Ralph Schreyer
Copyright (C) 2008 Roland Stamm
Copyright (C) 2008 Francesco Zirilli

Copyright (C) 2009 Nathan Abbott
Copyright (C) 2009 Sylvain Bertrand
Copyright (C) 2009 Frédéric Degraeve
Copyright (C) 2009 Dirk Eddelbuettel
Copyright (C) 2009 Bernd Engelmann
Copyright (C) 2009, 2010, 2012 Liquidnet Holdings, Inc.
Copyright (C) 2009 Bojan Nikolic
Copyright (C) 2009, 2010 Dimitri Reiswich
Copyright (C) 2009 Sun Xiuxin

Copyright (C) 2010 Kakhkhor Abdijalilov
Copyright (C) 2010 Hachemi Benyahia
Copyright (C) 2010 Manas Bhatt
Copyright (C) 2010 DeriveXperts SAS
Copyright (C) 2010, 2014 Cavit Hafizoglu
Copyright (C) 2010 Michael Heckl
Copyright (C) 2010 Slava Mazur
Copyright (C) 2010, 2011, 2012, 2013 Andre Miemiec
Copyright (C) 2010 Adrian O' Neill
Copyright (C) 2010 Robert Philipp
Copyright (C) 2010 Alessandro Roveda
Copyright (C) 2010 SunTrust Bank

Copyright (C) 2011, 2013, 2014 Fabien Le Floc'h

Copyright (C) 2012, 2013 Grzegorz Andruszkiewicz
Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017, 2018 Peter Caspers
Copyright (C) 2012 Mateusz Kapturski
Copyright (C) 2012 Simon Shakeshaft
Copyright (C) 2012 Édouard Tallent
Copyright (C) 2012 Samuel Tebege

Copyright (C) 2013 BGC Partners L.P.
Copyright (C) 2013 Chris Higgs
Copyright (C) 2013, 2014, 2015 Cheng Li
Copyright (C) 2013 Yue Tian

Copyright (C) 2014, 2017 Francois Botha
Copyright (C) 2014, 2015 Johannes Göttker-Schnetmann
Copyright (C) 2014 Michal Kaut
Copyright (C) 2014, 2015 Bernd Lewerenz
Copyright (C) 2014, 2015, 2016 Paolo Mazzocchi
Copyright (C) 2014, 2015 Thema Consulting SA
Copyright (C) 2014, 2015, 2016 Michael von den Driesch

Copyright (C) 2015 Riccardo Barone
Copyright (C) 2015 CompatibL
Copyright (C) 2015, 2016 Andres Hernandez
Copyright (C) 2015 Dmitri Nesteruk
Copyright (C) 2015 Maddalena Zanzi

Copyright (C) 2016 Nicholas Bertocchi
Copyright (C) 2016 Stefano Fondi
Copyright (C) 2016, 2017 Fabrice Lecuyer
Copyright (C) 2016 Eisuke Tani

Copyright (C) 2017 BN Algorithms Ltd
Copyright (C) 2017 Paul Giltinan
Copyright (C) 2017 Werner Kuerzinger
Copyright (C) 2017 Oleg Kulkov
Copyright (C) 2017 Joseph Jeisman

Copyright (C) 2018 Tom Anderson
Copyright (C) 2018 Alexey Indiryakov
Copyright (C) 2018 Matthias Groncki
Copyright (C) 2018 Matthias Lungwitz
Copyright (C) 2018 Roy Zywina

QuantLib includes code taken from Peter Jäckel's book "Monte Carlo Methods in Finance".
QuantLib includes software developed by the University of Chicago,as Operator of Argonne National Laboratory.
QuantLib includes a set of numbers provided by Stephen Joe and Frances Kuo under a BSD-style license.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

Neither the names of the copyright holders nor the names of the QuantLib
Group and its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.


THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 

 

目次

Page Top に戻る

// // //