[TOC]html
QuantLib 金融計算——QuantLib 入門
簡介
紛繁複雜、瞬息萬變的金融市場開發出了太多的金融產品,產生了太多的計算問題,這對於 Fintech 來說是一個巨大的挑戰,不管是計算能力上的,仍是軟件設計上的。好在開源軟件界歷來都不缺乏英雄,QuantLib 正是其中的佼佼者。python
QuantLib 是一個免費、開源的軟件庫,旨在爲量化金融計算提供一個統一的、綜合的軟件框架。QuantLib 的源代碼由 C++ 編寫,得力於 C++ 在面向對象和泛型編程方面強大的表現力,以及對貼近底層所帶來的出衆執行效率,QuantLib 一方面能夠清晰地描述各類複雜的金融產品,同時兼顧了計算速度。git
主要功能
QuantLib 所提供的功能聚焦在兩大領域:github
- 期權訂價以及相關計算;
- 固定收益產品訂價以及相關計算。
與期權相關的主要內容有:編程
- 表示亞式期權、歐式期權、美式期權、百慕大期權等等不一樣種類期權的數據結構;
- 基於解析法、有限差分法、二(三)叉樹法和 Monte Carlo 的訂價引擎;
- 多種波動率模型,例如 Heston 模型、GARCH 模型和局部波動率模型;
- 校準波動率期限結構的方法。
- ...
與固定收益相關的主要內容有:ubuntu
- 表示固息債、浮息債、零息債、通脹掛鉤債券、利率互換、可轉債等等不一樣種類固定收益產品的數據結構;
- 表示收益率期限結構的數據結構;
- 現金流分析;
- 若干種收益率曲線的插值方法;
- 若干種計息方法,例如 Actual / 36五、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,只須要在終端鍵入:bash
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 的主頁。