NewQuant的设计(一)——整体的领域设计
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>,只要自己编写一些特殊随机数即可,二其他模块需要自己编写。下面的任务是对每一个具体的模块做分析和设计。
NewQuant的设计(一)——整体的领域设计的更多相关文章
- .net ef core 领域设计代码转换(上篇)
一.前言 .net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍 传送门:https://docs.microsoft.com/zh-cn/dot ...
- julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域
编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...
- 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑
目录 系列文章 领域逻辑和应用逻辑 多应用层 示例:正确区分应用逻辑和领域逻辑 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落 ...
- .net架构设计读书笔记--第二章 设计体系结构
第五节 探索领域架构 一.领域驱动设计的价值与意义 最初在java中使用,.net要晚些才引入.领域驱动设计出现之初的争议.一个向导,少走弯路 1. 我们真的需要DDD吗? DDD并不适用于每个软 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——1.stm32主控硬件设计
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- 进阶篇:4.1)DFA设计指南:简化产品设计(kiss原则)
本章目的:理解kiss原则,明确如何简化产品的设计. 1.前言:kiss原则,优化产品的第一原则 如果要作者选出一个优化产品的最好方法,那一定是kiss原则莫属.从产品的整体设计到公差的分析,kiss ...
- 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)
本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...
- 【转】App架构设计经验谈:接口的设计
App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用REST ...
随机推荐
- [linux-内核][转]内核日志及printk结构浅析
这段时间复习了一下内核调试系统,注意看了一下printk的实现以及内核日志的相关知识,这里做一下总结. 1.问题的引出: 做DPDK项目时,调试rte_kni.ko时,发现printk并不会向我们想想 ...
- 《嫌疑人X的献身》书评
<嫌疑人X的献身>是日本著名推理小说作家东野圭吾的代表作之一.1985年东野圭吾以一本<放学后>出道,出道初期善于写精巧细致的本格推理,后期文笔愈发老辣.简练.2005年东野圭 ...
- JS常用方法记录
//对Object的num字段进行排序 var compare = function (propertyName) { return function (object1, object2) { var ...
- iOS学习之MVC模式
Modal 模型对象: 模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算.例如,模型对象可能是表示商品数据 list.用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去 ...
- bootstraps字体图标无法显示
使用bootstraps字体图标,必须在css的同级文件夹下,建立新的文件夹为fonts,放入一下文件. 在还是无法显示字体图标的情况下,可查看bootstraps.css中的 @font-face ...
- repo upload上传提交时发生remote rejected异常
部分关键异常内容为: ...... remote:ERROR:committer email address %%%%%% remote:ERROR:does not match your user ...
- failed to push some refs to 'git@github.com:***.git' hint: Updates were rejected b
使用git push origin master的时候出现一下错误: 解决办法: git push -f origin master 如下:
- keyFile 巩固练习
系统 : Windows xp 程序 : noodles-crackme2 程序下载地址 :http://pan.baidu.com/s/1mhJ4Ems 要求 : 编写KeyFile 使用工具 : ...
- eclipse快捷键以及使用技巧大全
eclipse快捷键以及使用技巧大全1. 打开MyEclipse 6.0.1,然后"window"→"Preferences" 2. 选择"java& ...
- C#知识体系(二)用案例来理解委托与事件
上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...