QuantLIb C++金融工程库初体验

版权声明:原创文章如需转载,请在左侧博主描述栏目扫码联系我并取得授权,谢谢 https://blog.csdn.net/u012234115/article/details/81194675

QuantLib是一个有名的金融计算的C++库,能方便地用于计算许多金融模型和公式,包括简单的折现、年金、VAR甚至BS期权定价等。

本文对quantlib做了一个简单的使用初体验

源码下载

quantlib依赖于boost库,所以需要下载这两个项目的源码

本文使用的版本是quantlib-1.13和boost-1.63.0

其源码目录概要如下

这里写图片描述

这里写图片描述

编译依赖

外部项目想使用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

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

猜你喜欢

转载自blog.csdn.net/u012234115/article/details/81194675