文章

《Implementing QuantLib》译后记

就在几天之前,经历了一年时间断断续续的坚持,《Implementing QuantLib》的初步翻译工作告一段落。撰写此文作为总结和纪念。

译后记

初心

当我还在读研究生的时候,为了实践某些计算金融学的课题自学了 C++ 语言(当时 C++ 大概是“老派 quant”最为推崇的语言,现在“新派 quant”可能都转向 python 了),进而接触到当时就已经久负盛名的 QuantLib。

刚开始使用 QuantLib 时就遇到了 Luigi 在书中指出的问题:缺乏相应文档的弊端开始显示,我对这个库的整体架构一无所知,函数之间的调用关系似懂非懂,类之间的继承关系不清不楚,更棘手的是当时没有遇到任何中英文文献帮助我解决上述问题。

后来事情出现了好转,我读到了名为《QuantLib 实现》的翻译文章(对不起,我已经记不起译者的名字了),并了解到 Luigi 正在撰写相关文档描述 QuantLib 的整体设计和实现细节,尽管当时文档的内容还非常有限。

直到 2013 年,我得知 Luigi 开始在其网站以博客的形式连载这些文档。当时我曾计划,等 Luigi 差不多写完,我就开始着手翻译工作,因为我主观上觉察到先前的那位译者似乎中断了翻译计划。

但是我高估了意大利人写书的效率。一两年之后我发现 Luigi 的写作转移到了 leanpub 上,接着就是漫长的等待。

收获

2017 年 8 月份,《Implementing QuantLib》的第一个完成版本发布,我的工作在这之后的 11 月份开始。历时一年多的翻译工作,多少有些收获。

最直接的,我得到了一篇几百页的中译本手稿。不过,我更想说的是那些比较抽象的收获。

  • 成为领域专家

要写出公认专业的算法和软件,首先要成为特定领域的专家,而不是相反。所以,首要的是去学习,从现成的工具着手,从最简单的问题着手,先成为一个专家。

  • 设计模式与知识结构

如果要成功地应用设计模式描述领域问题,那么设计模式所表现出的结构应该和这一领域的知识结构相契合。

举个具体的例子,QuantLib 的核心目的是为一系列金融工具的定价提供一个统一的框架。那么,什么是“定价”?依我的理解,所谓定价就是计算未来预期现金流的贴现值,关键词有这么几个:计算、预期、现金流、贴现。

这几个关键词正好描述了定价问题的知识结构,计算的方式可以分为解析解法、数值解法和随机模拟解法,等等;预期可以指风险中性测度下的期望,或是当前期限结构隐含的均衡结果,等等;现金流可以是固定的(固息债)也可以是随机的(浮息债和期权);贴现则整个就是期限结构选择的问题。每一个关键词都可以成为一个庞杂的研究课题。QuantLib 目前的设计正是将上述几块的知识抽象成模块,再细分成类,将方法封装进类,最后用“配置类实例”的方式将这几若干实例组合成为一个用于定价计算综合实例(从宏观上看就是策略模式)。

  • 知识结构与设计模式

也可以反过来思考,要想理解一个领域的知识结构(前提是已经入门),发现新的细节,就去看这个领域相关的软件库是怎么架构的(最好是 OOP 的)。我关于定价本质的理解正是在研究 QuantLib 架构之后获得启发的,同时也见识到了许多未尝接触过的新课题,比如多曲线贴现。

彩蛋

Luigi 非常热衷于在书中以双关语的形式引经据典,从古典到流行,从神话到科幻,几乎无所不包。这些埋藏的文化彩蛋通常是一些欧美文化圈的人才能熟知的典故,对于汉语文化圈的人来讲可能非常陌生,甚至不知所云。比如这个,第 7 章中出现的“curiouser and curiouser”,这句话是一个彩蛋,它最著名的出处是《爱丽丝梦游仙境》。不过这里用作双关语,用来形容“奇异(Curiously)递归模板模式”中让人费解的继承关系。

在翻译的过程中,我竭尽所能发现尽可能多的彩蛋,考证其出处、注解其语义。寻找彩蛋的过程让耗时枯燥的翻译工作妙趣横生,这完全超出了我的预料。

目前已经找出了大约五十个彩蛋,均以译注的形式呈现出来。

鸣谢

最后,特别感谢林晓博士在百忙之中抽出时间来为本书作序。

本文由作者按照 CC BY 4.0 进行授权