当前位置: 首页 > 工具软件 > QuantLib > 使用案例 >

使用C++ Builder编译QuantLib

巫坚白
2023-12-01

这几天心血来潮,想要使用C++ Builder(BCB)来编译QuantLib(QL)链接库。其实这个想法在我脑中至少已经有20年了。当年(2003)我第一次接触到QL时,就想用BCB来执行它,很可惜的是,在预设的架构下QL开发团队只提供Microsoft的Visual Studio(VS)方案,以及使用Linux下的Makefile方法。当年对于C++档案跨平台编译条件的设定方式经验不足,不知如何下手,所以只好放弃。

记得当年在台灣凯基证券时,开始接触到一些复杂的财务模型,需要进行模型参数市场校正,书上提到需要用到高阶的数值运算,非线性最适化。我当时发现,GNU数值运算链接库(图一),GNU Scientific Library(GSL),GSL - GNU Scientific Library - GNU Project - Free Software Foundation,就有这些函数可以呼叫,而且GSL是开源软件,可以看到程序代码。但可惜的是,Linux版有免费提供编译好的链接库,而且在Linux下自行编译也很简单,因为开发团队有提供Makefile,但在Windows版没有提供VS的方案,要付费才有设定好的VS方案与编译好的链接库。

当年只好用公司的预算,买了一套Windows版的GSL链接库来使用,其实心中有些不爽。不过他有提供一本纸本的手册(图二),到现在我都有留在手边,很有意思。后来我发现,QL里面就有这些高阶的数值运算功能,而且还跟金融模型的计算整合的很好,不过这也是我后来用Visual Studio把QL搞熟后,才知道的事情。另外,现在网络上也有善心人士,提供完整的方法,指导如何在Windows下,编译GSL,免费的。

在业界开发软件的人都知道,一个可以实用的软件,需要很多功能,不是只有模型计算的部分。例如,要有便利的GUI,方面User来使用操作,另外数据库的功能也不可少,尤其金融计算往往要处理一个部位的Portfolio。还有报表的输出也是必要的,这在银行界,更是不可少的东西。这些功能在QL项目中好像都没有。

当年QL项目发起时,团队是想要开发一个跨平台的金融计算核心链接库。然而,像GUI、Database、Report等功能,与系统平台的相依性太高,所以不在计划之中。但是实务上,像我在银行开发系统,我不可能回避这些需求,我需要找到一个好方案来开发系统。

回想1997年我刚进台灣中信银的交易室时,那时Borland刚推出Delphi这个号称VB杀手的RAD开发工具。我当年就用它开发了整个交易室TMU衍生商品的评价与风管系统。后来Borland又推出了C++ Builder(BCB)这个开发工具,它同时兼具GUI与Database整合功能,而且他是C++。我后来就用它与IT部门,合作开发了台湾第一套IRS/CCS前、中、后的整合作业风控系统。我觉得BCB真的很适合在Windows平台下开发严谨的计算系统。

也因此当我拿到QL时,我第一个想法就是能否在BCB下来编译他。当年知识经验不足,书本上也没说,不知如何动手。书上有说BCB的函数呼叫格式是OMF,VC是COFF,可以使用BCB提供的coff2omf.exe去转换,但试了很多次都不完全成功。主要是QL体积很大,如果只转换少量的链接库是可以的,但要全面转换就有问题。我的计算机功力到此就没辙了。

然而,在过去10多年的时间,我就乖乖的用VS,搭配一些GUI工具,如Qt与C++之父Bjarne书中推荐的FLTK图形链接库(Fast Light Toolkit - Fast Light Toolkit (FLTK)),来与QL协同工作。但其实就是觉得很别扭,跟BCB中直接使用VCL图形组件库不能比。这也是后来我决定把QL转写成C#的主要原因。

在VS的C#内,我们有很好用的视觉组件可以使用,几乎跟Delphi & BCB一样好用。其实如果知道过往Borland历史的人,应该都听过软件界传奇人物Anders Hejlsberg的名声,他是Delphi的开发者,后来跳巢的微软,主持C#与.NET的开发。所以两者基本上是血源相同,同一个爸爸。

前天又想到这件多年的往事,决定把QL拿出来,把核心的20多个档案,好好检视修改一下(图三),主要是跨平台的设定,放到BCB 10.3中跑一跑,没想到就编译成功,可以运行了(图四)。这20多个档案是我当年开始自我学习QL时,为了跑出一个简单的日期功能,精选的最核心档案,可以参考我之前自我学习(一)的文章。

突然觉得,我在QL上10多年的研究,真的是没有白费。QL这些跨平台的设定,现在看来都很简单。虽然我也都熟悉OpenCL & CUDA的.NET开发,但在BCB的C++下开发异质性平台如,GPU、FPGA的计算模块,相较于C#,自然是更为水乳交融的。

这时我想到当年利瓦伊写的宝兰传奇(图五),最后提到—“回到C/C++的王国”。我觉得对于追求高效能的财工人员而言,C/C++才是王者的Kingdom。能在BCB中发挥QL的强大功能,让人无比振奋。或许我可以考虑在网上维护一个BCB版本的QuantLib编译版本,不过这可能要跟QL团队沟通一下,等我之后有空再来处理此事啦!

 类似资料: