QuantLib 金融計算——QuantLib 入門
簡介
紛繁復雜、瞬息萬變的金融市場開發出了太多的金融產品,產生了太多的計算問題,這對於 Fintech 來講是一個巨大的挑戰,無論是計算能力上的,還是軟件設計上的。好在開源軟件界從來都不缺少英雄,QuantLib 正是其中的佼佼者。
QuantLib 是一個免費、開源的軟件庫,旨在為量化金融計算提供一個統一的、綜合的軟件框架。QuantLib 的源代碼由 C++ 編寫,得力於 C++ 在面向對象和泛型編程方面強大的表現力,以及對貼近底層所帶來的出眾執行效率,QuantLib 一方面可以清晰地描述各種復雜的金融產品,同時兼顧了計算速度。
主要功能
QuantLib 所提供的功能聚焦在兩大領域:
- 期權定價以及相關計算;
- 固定收益產品定價以及相關計算。
與期權相關的主要內容有:
- 表示亞式期權、歐式期權、美式期權、百慕大期權等等不同種類期權的數據結構;
- 基於解析法、有限差分法、二(三)叉樹法和 Monte Carlo 的定價引擎;
- 多種波動率模型,例如 Heston 模型、GARCH 模型和局部波動率模型;
- 校准波動率期限結構的方法。
- ...
與固定收益相關的主要內容有:
- 表示固息債、浮息債、零息債、通脹掛鈎債券、利率互換、可轉債等等不同種類固定收益產品的數據結構;
- 表示收益率期限結構的數據結構;
- 現金流分析;
- 若干種收益率曲線的插值方法;
- 若干種計息方法,例如 Actual / 365、Actual / 360、30 / 360 等等。
- ...
安裝與使用
推薦在 Ubuntu 操作系統下安裝和使用 QuantLib ,如果使用的是 Ubuntu 16.04 或 17.04,請先在系統中添加 Dirk Eddelbuettel 維護的 PPA,以便輕松地安裝最新版本。
sudo add-apt-repository ppa:edd/misc
sudo apt-get update
QuantLib 高度依賴 Boost 庫,在安裝 QuantLib 之前務必安裝 Boost,只需要在終端鍵入:
sudo apt-get install libboost-all-dev
安裝 QuantLib:
sudo apt-get install libquantlib0-dev libquantlib0v5
在 C++ 的 IDE 中配置編譯器的連接器和搜索路徑,讓編譯器能夠找到文件 /usr/lib/libQuantLib.so
和路徑 /usr/include/ql
就可以探索和使用 QuantLib 了 😃。
學習指南
作為金融實務、學術研究和軟件設計三者的交叉點,學習和使用 QuantLib 並非一項簡單的任務。要掌握這一得力工具,你必須成為一個多面手。
John Hull 編寫的 Risk Management and Financial Institutions 和 Options, Futures and other Derivatives 是兩本非常出色的書,能夠提供金融實務和學術研究方面足夠的基礎知識讓你可以開始探索 QuantLib。除此之外,QuantLib 提供了一套非常詳盡的文檔,更加深入細致的專業知識可以在這里獲得。例如,可以在亞式期權定價引擎類 AnalyticDiscreteGeometricAverageStrikeAsianEngine
的頁面中找到介紹這種定價方法的學術論文,“The formula is from "Asian Option", E. Levy (1997) in "Exotic Options: The State of the Art", edited by L. Clewlow, C. Strickland, pag 65-97”。
紙上得來終覺淺
絕知此事要躬行
上手編程、操作軟件是掌握 QuantLib 的過程中要面對的一大挑戰。
The HARD Way
QuantLib 的源代碼由 C++ 編寫,使用 C++ 編程是學習、探索 QuantLib 最直接的方式,不過也是最具挑戰性的,因為 C++ 本身是一門非常“硬核”的計算機語言,而且 QuantLib 目前的體量和結構已經很龐大和復雜。
在上手之前,你需要了解、掌握 C++ 編程的基本知識(語法、函數、類、模板和 STL),C++ Primer 是一個非常好的開始。想要熟練使用 QuantLib 必須要能夠理解其復雜的內部架構,這就需要一點“設計模式”的知識,Head First Design Patterns 是入門的不二選擇(Gof4 的 Design Patterns 過於晦澀了),Modern C++ Design 適合進階。
為了幫助使用者深入了解 QuantLib 的設計細節和思路,QuantLib 的核心作者 Luigi Ballabio 專門編寫了 Implementing QuantLib(本書的中譯版《構建 QuantLib》已經在 leanpub.com 出版)。
有了上述知識和技能的准備,就可以從 github 上作者提供的例子開始了,不要忘了勤快地查看文檔。
The EASY Way
如果要快速上手學習、使用 QuantLib,C++ 就顯得過於困難了。鑒於 C++ 版的 QuantLib 取得了巨大的成功,許多開源愛好者把 QuantLib 拓展到了其他語言和軟件環境下,在 C#、Java、Perl、Python、Julia、Ruby 和 R 等語言中都可以找到對 QuantLib 的封裝;在 Microsoft Excel 和 LibreOffice Calc 中也有 QuantLib 的插件。
在 Ubuntu 環境下,常用的三個擴展分別是:
- Python 封裝,QuantLib-Python
- LibreOffice Calc 插件,QuantLibAddin
- R 封裝,RQuantLib
遺憾的是,這些擴展不能提供 C++ 版本的全部功能。
QuantLib-Python
QuantLib-Python 是三個擴展中做的最好的,盡可能的移植了 C++ 版本的架構和使用方法,提供的功能也是最多的。quantlib-python 的安裝十分輕松:
pip3 install QuantLib
感謝 Gouthaman Balaraman 提供了 quantlib-python 詳盡的范例教程,和他編寫的書——QuantLib Python Cookbook。
如果想要擴展 QuantLib-Python 目前的功能,實現定制化,你需要一點 SWIG 的知識用來創建自己的封裝。
QuantLibAddin
LibreOffice Calc 相當於 Ubuntu 上的 Excel,插件 QuantLibAddin 把 QuantLib 中的部分內容封裝,你可以像使用 Excel 內置函數一樣在電子表格里調用 QuantLib 的功能。插件的下載地址在這里,更多詳盡的說明請參考 QuantLib Addin 的主頁。
RQuantLib
和 Python 相比,R 在面向對象編程方面的能力比較弱,所以 RQuantLib 沒有保留 QuantLib 原始的架構和用法,而是將部分功能包裝成為函數,相對於 QuantLib-Python 而言,RQuantLib 保留的功能更少。
RQuantLib 的主頁。