QuantLib是一个有名的金融计算的C++库,能方便地用于计算许多金融模型和公式,包括简单的折现、年金、VAR甚至BS期权定价等。
本文对quantlib做了一个简单的使用初体验
源码下载
quantlib依赖于boost库,所以需要下载这两个项目的源码
本文使用的版本是quantlib-1.13和boost-1.63.0
更新: 现在有一个民间维护的不依赖于boost的版本https://github.com/haozhangphd/QuantLib-noBoost
其源码目录概要如下
编译依赖
外部项目想使用quantlib作为依赖,需要先编译出quantlib的链接库
如果想跨平台编译请使用cmake,在windows里面要用cmake gui选择grouped和advanced配置好boost依赖项,在linux和mac下要预先安装好boost开发库,详情可参照官网文档
windows
环境windows10,vs2015
1 打开quantlib源码根目录的QuantLib.sln打开解决方案,选择编译模式为Release x64,确保QuantLib的生成类别为Static Library
2 然后针对所有的子项目,统一设置boost根目录到附加include目录
例如:D:\boost_1_63_0
注意,由于boost大多数库都是只要头文件就可以的,这里不需要编译boost出链接库
3 在解决方案管理器里面将testsuite这个项目设置为build排除
右键solution -> properties -> configuration -> testsuite的build取消勾选
这里是因为,testsuite依赖到了boost的lib,为了省事,不编译一这个项目也无伤大雅
4 最后,build整个solution得到QuantLib的依赖库
linux
环境ubuntu14.04,g++4.8
此处建议用cmake编译
1 安装boost库
sudo apt-get install libboost-all-dev
此处也可以用源码编译安装,前提是安装的路径被添加到了让quantlib编译时候能识别的环境变量
2 编译quantlib
进入QuantLib根目录,在根目录下执行命令
mkdir build
cd build
cmake ..
make
在编译后的ql目录可以看到libQuantLib.so动态连接库
在编译后的Examples目录可以看到示例项目的可执行程序
使用示例
windows
创建新的C++项目
配置boost和quantlib的头文件附加include目录
D:\boost_1_63_0
D:\QuantLib-1.13
配置quantlib附加库目录
D:\QuantLib-1.13\lib
由于boost和quantlib的库支持auto linking,所以不需要在附加依赖项input里面指定lib的名称
main.cpp
简单的应用一下quantlib里面的时间格式
#include <iostream>
#include <boost/timer.hpp>
#include <ql/qldefines.hpp>
#ifdef BOOST_MSVC
#include <ql/auto_link.hpp>
#endif
#include <ql/time/calendars/target.hpp>
int main()
{
boost::timer timer;
std::cout << timer.elapsed() << std::endl;
QuantLib::Calendar calendar = QuantLib::TARGET();
QuantLib::Date todaysDate(23, QuantLib::July, 2018);
// must be a business day
todaysDate = calendar.adjust(todaysDate);
std::cout << todaysDate.serialNumber() << std::endl;
return 0;
}
后续有机会可以深入研究和使用以下quantlib各项金融计算功能,如果生产系统需要部署实时的金融产品计算特性,可以考虑一下quantlib这个轮子
linux
linux下的项目组织稍微麻烦一点,需要用cmake配置文件,这里简单跑一下QuantLib自带计算债券的示例吧
在QuantLib根目录下执行
cd build/Examples/Bonds
./Bonds
运行结果
Today: Monday, September 15th, 2008
Settlement date: Thursday, September 18th, 2008
ZC Fixed Floating
------------------------------------------------
Net present value 100.92 107.67 102.36
Clean price 100.92 106.13 101.80
Dirty price 100.92 107.67 102.36
Accrued coupon 0.00 1.54 0.56
Previous coupon N/A 4.50 % 2.89 %
Next coupon N/A 4.50 % 3.43 %
Yield 3.00 % 3.65 % 2.20 %
Sample indirect computations (for the floating rate bond):
------------------------------------------------
Yield to Clean Price: 101.80
Clean Price to Yield: 2.20 %
Run completed in 0 s