首页 技术 正文
技术 2022年11月18日
0 收藏 869 点赞 2,158 浏览 1752 个字

NewQuant的设计思路——整体的领域分析

  “领域驱动设计(DDD)”是著名软件工程建模专家Eric Evans提出的一个重要概念,是“面向对象分析设计(OOAD)”的深化。当业务逻辑变得复杂,系统变得庞大时,OOAD会使人陷入“只见树木不见树林”的处境,而DDD可以指导设计人员暂时忽略掉琐碎细节,高屋建瓴的观察问题。如果要全面了解DDD,请阅读Eric Evans的著作《领域驱动设计》和《实现领域驱动设计》。

  在NewQuant的设计中,DDD的思想给了我很大启发。简单直观地讲,DDD就是仔细的分析业务知识,并把知识对应到相应的软件模块上,把业务中的关键概念对应到软件系统中某些关键的类上。

  NewQuant应用DDD的第一步是“确定领域语言”,就是描述NewQuant系统所使用的专业术语。NewQuant的目标是为数据分析和金融工程计算提供高效优雅的解决方案,NewQuant的大部分内容是特定的数值计算方法和数学模型。这样一来,确定领域语言变得简单,可以直接把这些数值计算方法和数学模型作为NewQuant的领域语言。

  NewQuant应用DDD的第二步是“领域分析”,具体的领域分析的过程其实是一个“苏格拉底式的追问”,在不断细化不断接近问题实质的追问中明确业务的内容。

  先来看“金融工程”模块的分析。金融工程模块是为衍生品等金融产品的定价提供计算服务,金融工程定价的计算存在两大范式,一是模型对应PDE的数值解;二是模型本身的随机模拟(主要是SDE和time series)。PDE的数值解要求对PDE进行离散化得到差分方程,解差分方程的实质是解线性方程组,解线性方程组属于“矩阵计算”范畴,矩阵计算需要设计相应的模块和类来实现。再看随机模拟,无论是SDE和是time series的模拟都是根据模型的结构在递推计算中反复使用特定的随机数,SDE模拟最常用的是正态随机数,time series模拟常用正态和t随机数。由此可以得到两条领域分析的链条:

金融工程——PDE数值解——解方程——矩阵计算

金融工程——随机模拟——SDE&time series——随机数

  再来看“数据分析”模块分析。NewQuant中的数据分析方法有两大来源,计量经济和多元统计分析(其实这两个领域的方法有许多相通之处)。计量经济的计算是一个“三部曲”——估计、检验和预测,而计量经济的两大主题是“回归分析”和“时间序列分析”。从计算的角度讲几种常见的回归方法可以认为是“最小二乘(LS)问题”的变种,最小二乘问题则是属于矩阵计算范畴。时间序列模型的估计常用到MLE,MLE属于数值最优化范畴。模型参数的检验实质上是一个特定的“假设检验”问题,需要比较统计量和特定分布分位数的大小。常见的几种统计分布的相关计算实质上是“特殊函数”(Gamma和Beta)计算的变形。模型的预测,尤其是“区间预测”也需要特定分布分位数的计算。和计量经济中的回归模型类似,一些多元统计模型也是玩弄矩阵的把戏,例如主成分分析和因子分析,要对矩阵做分解。另外一些方法则单纯一些,比如K均值聚类和判别分析,只用到距离的计算,不过某些距离计算的方法也要用到矩阵分解计算。由此可以得到若干条领域分析的链条:

数据分析——计量经济——回归——估计——LS问题——矩阵计算

数据分析——计量经济——回归——检验——假设检验——分位数计算——特殊函数

数据分析——计量经济——回归——预测——假设检验——分位数计算——特殊函数

数据分析——计量经济——时间序列——估计——MLE——数值最优化

数据分析——计量经济——时间序列——检验——假设检验——分位数计算——特殊函数

数据分析——计量经济——时间序列——预测——假设检验——分位数计算——特殊函数

数据分析——多元统计——矩阵分解——矩阵计算

  通过上述领域分析,可以看出来矩阵计算、统计计算、特殊函数、随机数和数值最优化是NewQuant中最为基础的模块,属于“基础设施层”。其他部分是使用基础模块功能的高级模块,属于“应用层”。这几个基础模块中随机数部分可以直接使用C++标准库中的<random>,只要自己编写一些特殊随机数即可,二其他模块需要自己编写。下面的任务是对每一个具体的模块做分析和设计。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,084
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,559
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,408
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,181
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,818
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,901