C++和Python计算金融数学方程算法模型

要点

  1. C++代码蒙特卡罗模拟金融产品估值,开发C++并行计算模拟库。

  2. 算法伴随微分计算图及C++代码实现释义:C++应用经典的复合模式构建有向无环图,遍历有向无环图节点C++实现,C++使用懒惰评估计算次序,遍历代码实现,C++代码实现伴随数学形式,伴随传播的遍历策略C++代码。

  3. C++规划金融产品计算节点,存储,运算符和计算模块逻辑。

  4. C++算法伴随微分计算价格与模型参数的差异,串行和并行模拟整个蒙特卡罗评估的伴随物累积到模型参数中。

  5. C++使用检查点算法校准微分,从模型获取敏感性风险报告。

  6. C++算法伴随微分作为多维函数的有效微分,测试结果

  7. 依据数学方程或定律,Python绘制金融市场产品价值曲线:计算价值回报,预测市场波动,利率变化。

  8. Python概率密度函数和累计密度函数等数学计算进行不同产品估值,价值到期

  9. Python快速傅里叶和离散傅里叶变换从不同数学模型,计算金融品价值。

  10. Python使用蒙特卡罗和不同算法模拟金融产品价值

C++蒙特卡罗方法定价模拟

分析模型如下:
C ( S , t ) = S N ( d 1 ) − K e − r T N ( d 2 ) C(S, t)=S N\left(d_1\right)-K e^{-r T} N\left(d_2\right) C(S,t)=SN(d1)KerTN(d2)
其中, S S S 是标的资产价格, K K K 是执行价格, r r r 是利率(或“无风险利率”), T T T 是到期时间, σ \sigma σ 是(常数)标的资产的波动性 S S S

d 1 d_1 d1 d 2 d_2 d2 定义如下:
d 1 = log ⁡ ( S / K ) + ( r + σ 2 2 ) T σ T d 2 = d 1 − σ T \begin{aligned} & d_1=\frac{\log (S / K)+\left(r+\frac{\sigma^2}{2}\right) T}{\sigma \sqrt{T}} \\ & d_2=d_1-\sigma \sqrt{T} \end{aligned} d1=σT log(S/K)+(r+2σ2)Td2=d1σT
N N N 的公式由下式给出:
N ( x ) = 1 2 π ∫ − ∞ x e − t 2 / 2 d t N(x)=\frac{1}{\sqrt{2 \pi}} \int_{-\infty}^x e^{-t^2 / 2} d t N(x)=2π 1xet2/2dt
为了计算这些敏感性,我们需要标准正态分布的概率密度函数公式,如下所示:
f ( x ) = 1 2 π e − x 2 / 2 f(x)=\frac{1}{\sqrt{2 \pi}} e^{-x^2 / 2} f(x)=2π 1ex2/2
在此阶段,该代码将不包含任何面向对象或通用编程技术。 现在的目标是帮助您了解定价引擎的基本 C++ 实现,而不需要所有额外的对象机制来封装数学函数。 我已经完整地写出了该程序,然后下面我将解释每个组件如何工作:

#define USE MATH DEFINES#include <iostream>
#include <cmath>double norm_pdf(const double & x) {return (1.0 / (pow(2∗ M_PI, 0.5)))∗ exp( −0.5∗x∗x);
}double norm_cdf(const double &x) {double k = 1.0 / (1.0 + 0.2316419∗ x);double k sum = k∗(0.319381530 + k∗(−0.356563782 + k∗(1.781477937 +k∗(−1.821255978 + 1.330274429∗ k))));i f(x >= 0.0) {return (1.0−(1.0 / (pow(2∗M_PI, 0.5)))∗ exp(−0.5∗ x∗ x)∗ k sum);}else {return 1.0− norm_cdf(−x);}
}double d_j(const int & j,const double & S,const double & K,const double & r,const double & v,const double & T) {return (log(S/K) + (r + (pow(−1, j−1))∗ 0.5∗ v∗ v)∗ T) / (v∗(pow(T, 0 .5)));
}double call-price(const double & S,const double & K,const double & r,const double & v,const double & T) {return S∗ norm_cdf(d j(1,S,K,r,v,T))− K∗ exp(−r∗T)∗norm_cdf(d j(2, S, K, r, v, T));
}double put_price(const double & S,const double & K,const double & r,const double & v,const double & T) {return −S∗ norm_cdf(−d_j(1,S,K,r,v,T)) + K∗exp(−r∗T)∗norm_cdf(−d_j(2, S, K, r, v, T));
}
int main(int argc, char∗∗ argv) {double S = 1 0 0 .0; double K = 1 0 0 .0; double r = 0 .0 5; double v = 0 .2; double T = 1 .0; double call = call_price(S,K,r,v,T);double put = put_price(S,K,r,v,T);std:: cout << ”Underlying: ” << S <<std::endl;std:: cout << ”Strike: ” << K <<std::endl;std:: cout << ”Risk−FreeRate: ” << r <<std::endl;std:: cout << ”V o l a t i l i t y: ” << v <<std::endl;std:: cout << ”Maturity: ” << T <<std::endl;std:: cout << ”C all P ri c e: ” <<call <<std::endl;std:: cout << ”Put P ri c e: ” << put << std::endl;return 0;
}

代码释义

第一行是一个预处理器宏,它告诉 C++ 编译器使用 C 标准数学常量。 请注意,某些编译器可能不完全支持这些常量。 请务必先测试它们!

#def ine USE MATH DEFINES

下一部分导入 iostream 和 cmath 库。 这使得我们可以使用std::cout命令来输出代码。 此外,我们现在可以访问 C 数学函数,例如 exp、pow、log 和 sqrt:

#include <iostream>
#include <cmath>

一旦我们导入了正确的库,我们就需要创建核心统计函数,这些函数构成了价格的大部分计算。 这是标准正态概率密度函数。 M_PI 是 π 的 C 标准数学常数。

参阅:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论复习(最短路、最小生成树)

图论复习 拓扑排序 原题链接&#xff1a;AcWing 848. 有向图的拓扑序列 - AcWing 在建图时&#xff0c;记录每个节点的入度&#xff0c;首先把入度为0的点都存到队列里。 然后在搜索时&#xff0c;每搜到一个点&#xff0c;就把这个点的入度 -1 &#xff0c;当它的入度变为…

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图&#xff0c;build的重要过程中会调用_element!.markNeedsBuild();&#xff0c;而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中&#xff0c;BuildOwner负责管理构建…

计算机视觉之三维重建(2)---摄像机标定

文章目录 一、回顾线代1.1 线性方程组的解1.2 齐次线性方程组的解 二、透镜摄像机的标定2.1 标定过程2.2 提取摄像机参数2.3 参数总结 三、径向畸变的摄像机标定3.1 建模3.2 求解 四、变换4.1 2D平面上的欧式变换4.2 2D平面上的相似变换和仿射变换4.3 2D平面上的透射变换4.4 3D…

使用 VMWare 安装 Android-x86 系统(小白版)

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统&#xff0c;每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

实例:NX二次开发使用链表进行拉伸功能(链表相关功能练习)

一、概述 在进行批量操作时经常会利用链表进行存放相应特征的TAG值&#xff0c;以便后续操作&#xff0c;最常见的就是拉伸功能。这里我们以拉伸功能为例子进行说明。 二、常用链表相关函数 UF_MODL_create_list 创建一个链表&#xff0c;并返回链表的头指针。…

认识String类

认识String类 前面我们学习了类和对象&#xff0c;这一小节咱们来谈String类 目录 认识String类前言一、String类的创建方式二、String引用类型的特点及方法1.存储内容2.String对象的比较3.字符串查找在这里插入图片描述4.转换&#xff08;一&#xff09;数字转为为字符串&…

阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_tokenHMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY 导读&#xff1a;本文总结了熟悉系统主要分三部分&#xff1a;业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题&#xff0c;这些问题…

单片机MCU,MPU,SOC的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理2.1,时钟系统2.2,存储器系统2.3,处理器2.4,输入输出系统3,结构特点3.1,中央处理器(CPU)3.2,存储器3.3,I/O端口3.4,定时器/计数器3.5,中断系统3.6,

集成学习 | 集成学习思想:Stacking思想

目录 一. Stacking 思想 一. Stacking 思想 Stacking(或stacked generalization)&#xff0c;是指训练一个模型用于组合(combine)其他各个模型 Stacking有两层第一层是不同的基学习器&#xff08;classifiers/regressors&#xff09;第二层是用于组合基学习器的元学习&#xf…

怎么实现redis的高可用

要实现 Redis 的高可用性&#xff0c;可以考虑以下几种方法&#xff1a; 主从复制&#xff08;Master-Slave Replication&#xff09;&#xff1a; 在 Redis 中&#xff0c;可以配置主从复制&#xff0c;将主节点的数据同步到从节点&#xff0c;当主节点宕机时&#xff0c;可以…

Reactor Netty

在springframework 里面&#xff0c;我们只有connection id。但是在底层的reactor netty,我们除了connection id还有local address and remote address HTTP/1 HTTP/2

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码&#xff0c;debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

GuLi商城-商品服务-API-三级分类-网关统一配置跨域

参考文档&#xff1a; https://tangzhi.blog.csdn.net/article/details/126754515 https://github.com/OYCodeSite/gulimall-learning/blob/master/docs/%E8%B0%B7%E7%B2%92%E5%95%86%E5%9F%8E%E2%80%94%E5%88%86%E5%B8%83%E5%BC%8F%E5%9F%BA%E7%A1%80.md 谷粒商城-day04-完…

[数据结构初阶]二叉树

各位读者老爷好&#xff0c;鼠鼠我现在浅浅介绍一些关于二叉树的知识点&#xff0c;在各位老爷茶余饭后的闲暇时光不妨看看&#xff0c;鼠鼠很希望得到各位老爷的指正捏&#xff01; 开始介绍之前&#xff0c;给各位老爷看一张风景照&#xff0c;有读者老爷知道在哪里吗&#x…

003- AutoCoder 使用Web版大模型,性感的Human As Model 模式

这是下面这篇文章的继续。 002- 用 AutoCoder 添加和修改代码 前面我们提到&#xff0c;如何解决你没有API版大模型&#xff0c;或者你的API版大模型太弱&#xff0c;而你只有Web版本的诸如 Kimi/GPT4 的情况下&#xff0c;改如何让AutoCoder帮助你完成编程&#xff1f; 我们有…

Excel数字乱码怎么回事 Excel数字乱码怎么调回来

在日常工作中&#xff0c;Excel是我们最常使用的数据处理软件之一&#xff0c;它强大的功能使得数据处理变得既简单又高效。然而&#xff0c;用户在使用Excel时偶尔会遇到数字显示为乱码的问题&#xff0c;这不仅影响了数据的阅读&#xff0c;也大大降低了工作效率。那么&#…

StringRedisTemplate Autowired注入为空解决

如下注入方式报空指针异常&#xff1a; java.lang.NullPointerException: null Autowiredprivate StringRedisTemplate redisTemplate; 解决办法&#xff1a;查看该类上有没有加注解&#xff0c;如Component等&#xff0c;没加的话加上。 还有一种是在工具类中使用&#xff0c;…

会员中心微服务

文章目录 1.环境配置1.创建会员中心模块2.检查父子模块的pom.xml1.父模块注意&#xff1a;如果父模块中的依赖显示not found&#xff0c;原因是子模块并没有引用&#xff0c;不用在意 2.子模块 3.pom.xml 引入相关依赖&#xff08;别忘记刷新maven&#xff09;4.application.ym…

【Node.js】全局变量和全局 API

node 环境中没有 dom 和 bom &#xff0c;此外 es 基本上都是可以正常使用的。 如果一定要使用 dom 和bom&#xff0c;可以借助第三方库 jsdom 帮助我们实现操作。npm i jsdom 实例&#xff1a; const fs require(node:fs) const {JSDOM} require(jsdom)const dom new JS…

scrapy爬虫框架

scrapy爬虫框架 一、scrapy的概念作用和工作流程1、scrapy的概念2、scrapy框架的作用3、scrapy的工作流程&#xff08;重点&#xff09;3.1 回顾之前的爬虫流程3.2 改写上述流程3.3 scrapy的流程3.4 scrapy的三个内置对象3.5 scrapy中每个模块的具体作用 二、scrapy的入门使用1…