当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 仿射期限结构模型:理论与实现——实现部分

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

2020年04月07日  | 移动技术网IT编程  | 我要评论

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

[toc]

本文介绍如何以面向对象的方式实现 affine term-structure models: theory and implementation 中的算法,并适当的使用设计模式使代码尽可能的优雅。

引言

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

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

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

affinemodel 类与模板方法模式

首先要实现的是 affinemodel 类,它主要负责模拟因子、短期利率和零息利率的路径。

对于仿射模型来说,由因子计算短期利率和零息利率的过程是一致的,这部分代码放到基类中,具体的派生类(vasicekcir)只要专注实现模拟因子路径的计算就可以了。

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

simulatemethod 类与策略模式

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

上述方法仅需要知道模型非常基本的信息(例如漂移项、扩散项和参数)便可以工作,因此可以独立于 affinemodel 类存在,而又被 affinemodel 对象使用。

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

kalmanfilteraffinemodel

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

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

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

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

似然函数的计算也由各个派生类自己实现,而最优化部分的代码放在基类中。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 的部分运行速度很慢,未被充分测试。

延伸阅读

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网