18Oct/100
QuantLib (4) 类和模块介绍(1)date,网格结构,有限差分模型
1.date和time
在quantlib中有一个模块用来处理日期和与时间相关的内容,首先是时间的date的类,提供了时间的基本单位,可以提供周,月
年的一些用处,同时利用这个类处理我们在金融中可能出现的需要进行的日期的计算。
年的一些用处,同时利用这个类处理我们在金融中可能出现的需要进行的日期的计算。
另外quantlib还提供了不同国家的节假日的类,具体包含的内容可以直接在vb中的project找的,稍微看了下,基本上我们能用的都有了。
除了这个之外就是讨厌的时间计算模式了,行业习惯一般有4种不同的时间计算,对于不同国家,不同产品的计算方法都不尽相同。quantlib中提供了一下4种模式。
Actual/360
Actual/365
Actual/Actual,which can be calculated according to:
– ISMA and US Treasury convention,also known as
"Actual/Actual(Bond)";
– ISDA,also known as"Actual/Actual(Historical)";
– AFB,also known as"Actual/Actual(Euro)";
30/360,which can be calculated accordingto:
– USAconvention;
– Europeanconvention;
– Italianconvention.
Actual/365
Actual/Actual,which can be calculated according to:
– ISMA and US Treasury convention,also known as
"Actual/Actual(Bond)";
– ISDA,also known as"Actual/Actual(Historical)";
– AFB,also known as"Actual/Actual(Euro)";
30/360,which can be calculated accordingto:
– USAconvention;
– Europeanconvention;
– Italianconvention.
2.网格结构
这个名字感觉有些陌生,不过想想这个的实际应用就是我们常见的binomial trees或者trinomial trees就大致能理解了。在做定价中,用二叉树模型做的mc比我们bs可能更常用,而且在很多情况下,binomial都能作为一个研究方法,而不仅仅是在期权中用一下,按照quantlib的说法,在做随机过程的计算中做三叉树的速度能比二叉树更加快,这两个的大致原理应该是一样的,就是路径不一样吧,我始终觉得二叉树是一个二维的,三叉树应该要上到三维空间才好,不过这个也就是想想而已,现在的应该还是分支的增加而不是维度的增加。
话说在标准的option模型中,二叉树的应用还是可以的,可是如果有的path dependent
option的时候,二叉树可能比较麻烦,这应该是指一些奇异期权的应用吧,可惜的是我自己没有做过哪些个的定价计算也没有实际用过,大多数时候用的就是直接用BS或者MCS,老师上课讲的finite
difference/element也没有用过。等以后吧。
option的时候,二叉树可能比较麻烦,这应该是指一些奇异期权的应用吧,可惜的是我自己没有做过哪些个的定价计算也没有实际用过,大多数时候用的就是直接用BS或者MCS,老师上课讲的finite
difference/element也没有用过。等以后吧。
3.有限差分模型
这个也就是上课的时候听老师讲过,中间也没有实际去用,不过既然quantlib已经提供了这个的模块,我想数学上的推导应该往后退退了,大致wiki下吧。
有限差分法:
把欲解系统,剖分成有限个网格单元,以网格中全部节点代替研究系统,用数值微商或数值积分公式导出相应的线性代数方程组,解方程组的值,从而达到求解系统偏微分方程的一种数值方法.
把欲解系统,剖分成有限个网格单元,以网格中全部节点代替研究系统,用数值微商或数值积分公式导出相应的线性代数方程组,解方程组的值,从而达到求解系统偏微分方程的一种数值方法.
具体到细节上,就是要找到一个差分代替微分,差分的选取常用的有向前差分向后差分还有中心差分。确定差分方法后,利用泰勒展开得到一系列的表达式,我们一般就是用1阶和2阶进行相关的计算,上课的时候好像教授有个项目是把这个做到3阶甚至是4阶,法国人数学好,没事瞎淘腾的。不过好像他的在做保险定价中还是有一些用处的。我也只是听他讲过,我自己肯定是不会做了。差分选取没有规定一般得考虑一些精度,经济以及简单的因素吧,因为这个东西还只是开始,越弄得复杂只能是给自己找麻烦的。
回头看了下,这些个东东好多都忘了。
12Oct/100
QuantLib 学习 (3) VC.Net(2008)下配置QuantLib开发环境
工具准备:
VC.Net(2008)
QuantLib源文件包,可以从http://quantlib.org/download.shtml下载,V0.97
Boost源文件包,可以从http://www.boost.org/下载,V1.37.0
准备步骤:
·编译与配置Boost库
1、解压缩的boost库,解压后的文件目录为boost_1_37_0,进入到boost_1_37_0toolsjamsrc目录中,运行build.bat,会在boost_1_37_0toolsjamsrcbin.ntx86下生成后续要用到的bjam.exe文件
2、copy bjam.exe到boost_1_37_0目录下
3、修改编译器配置文件,找到boost_1_37_0toolsbuildv2user-config.jam文件,按照下述配置进行修改
# ——————-
# MSVC configuration.
# ——————-
# MSVC configuration.
# ——————-
# Configure msvc (default version, searched for in standard
locations and PATH).
# using msvc ;
locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard
locations and PATH).
# using msvc : 9.0 ;
locations and PATH).
# using msvc : 9.0 ;
#在这里添加 vs2008 的配置
using msvc : 9.0 :
: /wd4819 /D_CRT_SECURE_NO_DEPRECATE
/D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 ;
: /wd4819 /D_CRT_SECURE_NO_DEPRECATE
/D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 ;
11Oct/100
QuantLib 学习 (2) quantlib环境设置
实际上,在前面你构建开源计算平台时,就已经构建好QuantLib的计算环境了。
在那条aptitude instalL命令里面,libquantlib-0.9.0就是QuantLib的运行环境,而libquantlib0-dev就是QuantLib的开发环境。因为QuantLib基于boost构建,所以,在安装quantlib的时候,会自动安装上boost的相关环境。同时,你也可以使用$aptitude search quantlib
这条命令来看你的源里有什么与QuantLib相关软件可以装。
使用Debian/Ubuntu来构建你的计算环境,你是幸运的,因为这些环境的下载、安装、配置,只需要一条命令就够了,你只用专注于你的实际金融问题。而如果你在Windows上的话,你要单独下载编译器或者IDE(如VS,DEV,C++),然后下载quantlib和boost,对他们进行本地编译并安装好后再对编译器或者IDE进行配置。安装后还要对环境进行一些路径和库的设置以保证编译器能找到库的位置。很麻烦是不是?网上有在VisualC++环境下配置它的文章,你可以去看一下。
在那条aptitude instalL命令里面,libquantlib-0.9.0就是QuantLib的运行环境,而libquantlib0-dev就是QuantLib的开发环境。因为QuantLib基于boost构建,所以,在安装quantlib的时候,会自动安装上boost的相关环境。同时,你也可以使用$aptitude search quantlib
这条命令来看你的源里有什么与QuantLib相关软件可以装。
使用Debian/Ubuntu来构建你的计算环境,你是幸运的,因为这些环境的下载、安装、配置,只需要一条命令就够了,你只用专注于你的实际金融问题。而如果你在Windows上的话,你要单独下载编译器或者IDE(如VS,DEV,C++),然后下载quantlib和boost,对他们进行本地编译并安装好后再对编译器或者IDE进行配置。安装后还要对环境进行一些路径和库的设置以保证编译器能找到库的位置。很麻烦是不是?网上有在VisualC++环境下配置它的文章,你可以去看一下。
在Linux下,如果你不想让机器自己下载和安装这些库的话,那也很简单,先下载boost源代码后解压,在解压后的目录下使用以下这组命令:
$./config
$make
$make install
这就把boost安装上了。用同样的方法和命令可以安装quantlib。都比在Windows下要简单。事实上,开发环境的友好,正是Linux和BSD等开源操作系统的特点之一!
安装好后,如何编译第一个QuantLib程序呢?
首先,你得写好一个使用QuantLib的源程序,最简单的下面这个。
把这段程序拷进一个文件中,命名为main.cpp,然后用这个命令编译它:
$gcc -lQuantLib -o main main.cpp
过一会,就形成了一个可执行程序:main
此时用
$./main
就可以运行它了。
如果编译正确,表明你已经正确地安装了QuantLib库。
11Oct/100
QuantLib 学习 (1)什么是QuantLib
这一系列是一堆转贴,希望看完这些东西后自己对这些有一个全面的了解了。
QuantLib是一个金融计算的C++库。
首先,它的用途是进行金融计算。利用它,你能方便地计算许多常用和不常用的金融模型和公式,包括简单的折现、年金,复杂点的FAR,更复杂点的BS期权定价模型。总之,够你用的。
首先,它的用途是进行金融计算。利用它,你能方便地计算许多常用和不常用的金融模型和公式,包括简单的折现、年金,复杂点的FAR,更复杂点的BS期权定价模型。总之,够你用的。
其次,是他的使用方法。QuantLib其实只是一个库,不是某个有界面的工具,也不是编程语言,要使用它你得把它和某个工具(如R,EXCEL,SPSS)或者和某种编程语言(如C++,python等)联系起来。在这我要问你,你会编程吗?尤其是使用C/C++进行编程?不会?不要紧,去学吧,如果你认真学习的话,我保证你一个星期会上手(到Google上去寻找这方面的学习指导)。如果不想学C++也没关系,你可以学python,甚至你不想编程也没关系,你可以使用quantlib在Excel中的插件,通过Excel为界面来使用它,或者通过安装R对应的库,通过R来使用它(当然R也需要一点点编程思维)。QuantLib基于C++的boost库开发。因为其原生语言是C++,所以你如果通过C++来使用它,会获得更好的体验。
QuqntLib的官方网站是:http://quantlib.org/,英文网站,里面的内容有下载、FAQ、邮件列表、文档、例子等。只是我觉得它的官方文档并不够详细,以例子为主,这点是应该完善的。你可以加入他们的邮件列表,这样你就能获得关于QuantLib的最新信息以及它的开发者的直接帮助(只是记住,别上去问太小白的问题,开发者不是启蒙老师!他们并不清闲。有什么初级的问题,来这我们一起交流吧。)。
QuqntLib的官方网站是:http://quantlib.org/,英文网站,里面的内容有下载、FAQ、邮件列表、文档、例子等。只是我觉得它的官方文档并不够详细,以例子为主,这点是应该完善的。你可以加入他们的邮件列表,这样你就能获得关于QuantLib的最新信息以及它的开发者的直接帮助(只是记住,别上去问太小白的问题,开发者不是启蒙老师!他们并不清闲。有什么初级的问题,来这我们一起交流吧。)。
10Oct/100
QuantLib
最早开始知道这个东西,应该是上课的时候,Novo教我们用R的时候,顺路说了下一些C++的资源,不过那个时候只是知道而已,而且自己也不用c++做东西就没有认真想这个怎么弄,后来在wilmott上看见一些讨论quantlib的帖子,算是又有一次了解了,前些天,做MT5的dll的时候突然觉得是不是我完全不用再用MATLab,既然只是一个计算,用一个完整的程序库应该还是要比自己去一个个函数的编的好,于是找了些网上的资源。
如果可以用C++作出的dll来接到MT5上的话,其实没有必要一定要用matlab的函数吧,好像用dll方式的时候不能调用工具箱的函数,虽然没有做出来,不过还是有些放弃了用matlab做数据处理的想法,先不说我要花大量的时间去做matlab的函数,就算作出函数,dll的调用其实还是用的engine的方法,而这种方法最大问题是最终还是要matlab的客户端后台运行的,虽然做研究的时候matlab可以提供一些便利,可是这个过程其实是很忙的,如果光是做策略的话可以用matlab可是像现在这样,想做到实时的计算,这样用matlab并不一定是一个好的结果。
既然这样的话,就用quantlib和quantcode上的函数,数据处理这部分直接用C++来做了,只是不知道最后的结果会不会有自己想的那么理想,不过这样应该会使工作稍微简单点吧。
首先介绍下quantlib上的函数列表了。