仿射期限结构模型:理论与实现——实现部分

仿射期限结构模型:理论与实现——实现部分

本文介绍如何以面向对象的方式实现 Affine Term-Structure Models: Theory and Implementation 中的算法,并适当的使用设计模式使代码尽量的优雅。html

引言

金融工程领域的模型和方法之间既有强烈的共性,又有鲜明的个性,这使得“设计模式”的应用瓜熟蒂落。git

金融计算程序中常见的几个设计模式有:github

  • 模板方法模式
  • 策略模式
  • 包装器模式

AffineModel 类与模板方法模式

首先要实现的是 AffineModel 类,它主要负责模拟因子、短时间利率和零息利率的路径。算法

对于仿射模型来讲,由因子计算短时间利率和零息利率的过程是一致的,这部分代码放到基类中,具体的派生类(VasicekCIR)只要专一实现模拟因子路径的计算就能够了。设计模式

基类规划总体计算流程,派生类分别实现总体流程中的细节,这即是“模板方法模式”典型的应用场景。框架

SimulateMethod 类与策略模式

在当前案例中,因子路径的模拟可使用 Euler 和 MIlstein 这类通用的离散方法,也可使用卡尔曼滤波框架下的转移矩阵法。函数

上述方法仅须要知道模型很是基本的信息(例如漂移项、扩散项和参数)即可以工做,所以能够独立于 AffineModel 类存在,而又被 AffineModel 对象使用。测试

将方法抽象成类,再提供给其余类使用,这即是“策略模式”典型的应用场景。优化

KalmanFilterAffineModel

KalmanFilterAffineModel 类负责根据零息利率的历史数据估计出模型参数,整个计算过程围绕观测系统和转移系统中出现的五个关键矩阵展开:ui

  • 观测矩阵
  • 观测截矩矩阵
  • 转移矩阵
  • 转移截矩矩阵
  • 转移协方差矩阵

模型参数蕴涵在这五个矩阵中,借由矩阵和利率数据,经过卡尔曼滤波算法能够算出特定模型参数对应的似然函数值,经过最大化似然函数值就能够估计利率数据对应的模型参数。

在当前案例中,五个矩阵中的前四个仅和模型参数有关,且算法一致,能够放到基类中,最后一个由各个派生类本身实现。

似然函数的计算也由各个派生类本身实现,而最优化部分的代码放在基类中。KalmanFilterAffineModel 类展现了一个中规中矩的面向对象设计案例,稍稍用到了“模板方法模式”。

KalmanFilterVasicek 在似然函数的计算部分借助快速卡尔曼滤波(FKF)。

Helper 类与包装器模式

KalmanFilterAffineModel 类中计算关键矩阵的时候涉及到仿射模型中 \(A(\tau)\)\(B(\tau)\) 的计算,而这部分代码已经出如今 AffineModel 类中。

为了仅复用这部分代码,而不是其余,须要在 AffineModel 类的外侧套一层“壳”,屏蔽一些接口。Helper 类充当了这个角色,有选择的暴露出接口 A(tau)B(tau)KalmanFilterAffineModel 类使用。

复用某些类已有的代码,而以不一样的接口形式呈现,并为其余类所用,这即是“包装器模式”典型的应用场景。

KalmanFilterAffineModel 类和 Helper 类之间是策略模式的关系。

源代码

Affine Term-Structure Models: Theory and Implementation

注意:CIR 的部分运行速度很慢,未被充分测试。

延伸阅读

《仿射期限结构模型:理论与实现——理论部分》

相关文章
相关标签/搜索