C++ for Financial Mathematics 读书笔记
01.简介
C++ for Financial Mathematics于 2017 年出版,作者为 John Armstrong,相比于其他经常被提及的 C++金融编程方面的书籍如C++ Design Patterns and Derivatives Pricing、Introduction to C++ for Financial Engineers和Modeling Derivatives in C++,本书章节脉络更清晰友好,从易到难循序渐进,通过案例方式将 C++的基础的知识串联起来,而且不枯燥(比 int v1, v2;之类的更易接受),到第 9 章初步建立起基于 Monte Carlo Simulation 的期权定价方法,后续逐步完善。而且由于成书较晚,较好的兼顾了 C++11 的一些特性。全书主要围绕如何如何定价金融衍生工具的投资组合(portfolio of financial derivatives)展开,通过具体例子(造一个 FMLib 轮子)循序渐进的回答作者开篇提出的以下三个问题:
How to use C++ language in practice
What kinds of problems banks face
The skills you need to solve them
文如其名,全书内容重在讲解 C++在金融数学编程中的具体应用,最后的附录 A 对期权定价所涉及的理论知识及 Monte Carlo Simulation 等做了简单介绍。
全书共分 21 章,章节如下:
Getting Started
Basic Data Types and Operators
Functions
Flow of Control
Working with Multiple Files
Unit Testing
Using C++ Classes
User-Defined Types
Monte Carlo Pricing in C++
Interfaces
Arrays, Strings, and Pointers
More Sophisticated Classes
The Portfolio Class
Delta Hedging
Debugging and Development Tools
A Matrix Class
An Overview of Templates
The Standard Template Library
Function Objects and Lambda Functions
Threads
Next Steps
读完前 9 章,主要通过具体的金融案例()financial examples)介绍 C++的基础知识如数据类型、函数(通过自己编写的 cdf 函数即可借助 BSM 公式进行欧式期权定价)、控制流、如何组织与管理多个程序文件(建议借助 IDE,自己造一个 MyFMLib 定价轮子🙂)、单元测试(暂时略过没细看,但个人理解是通过定义通用函数对程序文件中出现的大量函数进行计算精度测试、函数调试、错误信息定位等)、标准库使用(<vector>,IO 库读写文件等,顺带介绍如何利用 Google Charts 进行 C++数据可视化的曲线救国🙂)、自定义类的编写等,步步推进,直指通过蒙特卡洛模拟进行期权定价。每章的习题也很有趣不枯燥,即对书本内容进行了非常有益的补充,也是对知识点掌握程度的很好检验,建议先自行尝试解决,再去后续章节程序代码中寻求作者的答案进行比较。即使未接触过 C++,也能在非常实际的例子讲解中做到循序渐进边学边用,如对 C++的一些细节有疑问或想了解更多,可以配套一本 C++ Primer 5th Edition 进行细究。
阅读本书最好有一定的金融数学(主要围绕期权定价)基础知识如金融数学-衍生产品定价引论、金融随机分析等,在此基础上学习如何通过 C++将理论付诸于实践,即面向 Quant Developer 编程🙂。毕竟现在对金融衍生工具进行定价的理论已经非常数学化了,而且不是所有人都热衷于纯理论上的研究,而且金融数学本身就是一门偏实践的学科领域,空有一套完美的理论知识积累却无法将其付诸实践,往往会给人一种无能为力的感觉,因此如何将枯燥的理论通过编程方式进行实现(Toy 级别😅)也许会有另一种味道🍉。
C++之所以能在金融机构编程技术栈中流行至今,既有历史选择的原因,也从一个侧面也体现了 C++的比较优势。C++诞生于 1983 年,1990 年代已发展成一种成熟的编程语言,伴随着 1986 年的金融大爆炸(Big Bang),电子化交易逐步取代传统的面对面喊价。C++的 C with Class 设计既能保证具有 C 语言一样的运行速度,同时又具有极佳的抽象能力,很好的兼顾了金融机构交易及定价系统对性能及编写大型程序的需要。而且随着现有程序代码(屎山🙂)不断积累和业内从业人员知识结构的固化,再想更换另一种语言的代价就变得愈发高昂。
需要强调的是虽然 C++具有上述提及的一些优势,但并非在金融机构所有业务领域都是最优选择。其他如当前流行的 R 及 Python 等通过借助丰富的第三方包或程序库(如 quantmod、numpy、pandas 等)非常适用于金融数据的统计(如估计定价模型中的波动率 volatility)、分析可视化及金融模型的快速实现等领域,而 C++主要还是侧重于开发传统的交易系统。
正如作者所言,虽然本书主要集中于 C++在金融数学中的应用,但如果想立志成为 Quant Developer 的话,对 R、Python 等语言学习将是对金融数学编程技术栈非常有益的补充。因此,在此读书笔记中,对书中一些案例在 C++之外也适当介绍对应的 Python 实现,看看在 Toy 级别孰快孰慢及谁更方便😂。
评论