第三节 R的Cholesky函数

在多资产的模拟中,我们需要将相关性矩阵进行Cholesky分解。形成下三角与上三角矩阵的乘积。以一个2╳2的相相关性矩阵为例。M可分解成L与U的乘积。

...........................................................(3.3.1)

#001 R version 3.1.1 (2014-07-10) --"Sock it to Me"

#002 Copyright (C) 2014 The R Foundation for Statistical Computing

#003 用 'demo()' 来看一些示范程序,用 'help()' 来检视线上辅助档案,或

#004 用 'help.start()' 透过 HTML 浏览器来看辅助档案。

#005 用 'q()' 离开 R。

#006

#007 > M <- matrix(c(1.0, 0.8, 0.8,1.0), nrow = 2, ncol = 2, byrow = TRUE)

#008 > U <- chol(M)

#009 > U

#010     [,1] [,2]

#011 [1,]   1  0.8

#012 [2,]   0  0.6

#013 > L <- t(U)

#014 > L

#015     [,1] [,2]

#016 [1,] 1.0  0.0

#017 [2,] 0.8  0.6

#018 > A = L %*% U

#019 > A

#020     [,1] [,2]

#021 [1,] 1.0  0.8

#022 [2,] 0.8  1.0

#023 >

程序行表3.1

程序行表3.1示范了R语言的Cholesky分解函数,#007使用matrix()函数建立M矩阵;先以c()函数建立一维向量,内含四个分量,当作传入数据;然后,说明M矩阵为两列,两行的矩阵,并以列优先的方式,读取c()函数建立的一维向量。#008使用chol()函数执行Cholesky分解,将上三角矩阵传出给U矩阵。#013使用t()函数进行U矩阵的转置,将下三角矩阵传出给L矩阵。#018以L %*% U进行矩阵相乘,结果传给A。如果想知道每个变量的内容,只要在提示符号后输入变量的名称,按Enter就可看到结果。如#009输入U按Enter,便可看到2╳2的上三角矩阵。

第四节 C#多资产的模拟

假设有两资产,契约为买权型式,偿付为两者的价差减去Strike。

...........................................................................................(3.4.1)

契约为一年期,模拟的架构同前。

#001 namespace STBiBSProcess

#002 {

#003     public partial class Form1 : Form

#004     {

#005         publicForm1()

#006         {

#007             InitializeComponent();

#008         }

#009         privatevoid button1_Click(objectsender, EventArgs e)

#010         {

#011             Application.Exit();

#012         }

#013

#014         const int BlocksPerGrid = 256;

#015         const int ThreadsPerBlock = 256;

#016         static int NPath;

#017         static int MStep;

#018         static DateTime RefDate;

#019         static List<DateTime> FixingDate;

#020         static int[] h_StepGrid;

#021

#022         privatevoid button2_Click(objectsender, EventArgs e)

#023         {

#024             doubleAsset1 = 100.0;

#025             doubleAsset2 = 100.0;

#026             doubleStrike = 1.0;

#027             double TTM =1.0;

#028             doubleSigma = 0.3;

#029             doubleRate = 0.04;

#030             doubleYield = 0.02;

#031             doubledt = 1.0 / 365.0;

#032             doubleRho = 0.5;

#033             doubleSqrt1mRho2 = Math.Sqrt(1 - Rho * Rho);

#034

#035             //RandomRnd = new Random(1234);

#036             MersenneTwisterRnd = new MersenneTwister(1234);

#037             StopwatchSW = new Stopwatch();

#038             NPath = ThreadsPerBlock *BlocksPerGrid;

#039             RefDate = newDateTime(2014, 7, 1);

#040             FixingDate = new List<DateTime>();

#041

#042             //MStepdepend on the remaining FixingDay Number, Including RefDate

#043             MStep = 13; // 0, 1, 2,..., 12, 0 for RefDate

#044             for(int i = 0; i < MStep; i++)

#045             {

#046                 FixingDate.Add(RefDate.AddMonths(i));

#047             }

#048

#049             h_StepGrid = new int[MStep];

#050             for(int i = 0; i < MStep; i++)

#051             {

#052                 TimeSpanTS = FixingDate[i].Subtract(RefDate);

#053                 h_StepGrid[i] = (int)TS.TotalDays;

#054             }

#055

#056             double[,]S1 = new double[NPath,MStep];

#057             double[,]S2 = new double[NPath,MStep];

#058             double[]Value = new double[NPath];

#059             doubles1, s2, n1, n2, e1, e2;

#060             SW.Start();

#061             for(int i = 0; i < NPath; i++)

#062             {

#063                 s1 = Asset1;

#064                 s2 = Asset2;

#065                 intdiff = 0;

#066                 S1[i, 0] = s1;

#067                 S2[i, 0] = s2;

#068                 for(int j = 0; j < (MStep - 1); j++)

#069                 {

#070                     diff = h_StepGrid[j + 1] -h_StepGrid[j];

#071                     for(int k = 0; k < diff; k++)

#072                     {

#073                         e1 = DStat.N_Inv(Rnd.NextDouble());

#074                         e2 = DStat.N_Inv(Rnd.NextDouble());

#075                         n1 = e1;

#076                         n2 = Rho * e1 +Sqrt1mRho2 * e2;

#077                         s1 = s1 * Math.Exp(((Rate-Yield) - (Sigma*Sigma)/2.0) * dt

#078                             + (Sigma * Math.Sqrt(dt) * n1));

#079                         s2 = s2 * Math.Exp(((Rate-Yield)- (Sigma*Sigma)/2.0) * dt

#080                             + (Sigma * Math.Sqrt(dt) * n2));

#081                     }

#082                     S1[i, j + 1] = s1;

#083                     S2[i, j + 1] = s2;

#084                 }

#085                 Value[i] = Math.Max((s1-s2) - Strike, 0);

#086             }

#087

#088             doublesum = 0.0;

#089             for(int i = 0; i < NPath; i++)

#090             {

#091                 sum = sum + Value[i];

#092             }

#093             sum = (sum / NPath) * Math.Exp(-(Rate - Yield) * TTM);

#094             SW.Stop();

#095

#096             textBox1.Text =SW.ElapsedMilliseconds.ToString();

#097             textBox2.Text = sum.ToString();

#098             for(int j = 0; j < MStep; j++)

#099             {

#100                 listBox1.Items.Add(S1[0,j].ToString());

#101                 listBox2.Items.Add(S2[0,j].ToString());

#102             }

#103         }

#104     }

#105 }

程序行表4.1

#073与#074产生两个独立的标准常态变量,#075与#076使用(3.1.2)产生两个具相关性的随机变量,#077与#078以之产生两个具相关性的价格程序。执行结果如下。

读者可以调整不同的相关性,看看此参数对价格的影响。事实上,这是一个相当敏感的参数,忽视或估计错误,对结果有很大的影响。

金融工程与并行计算:第三章 多资产模拟与R的使用 Part 2相关推荐

  1. 吴孟达《高等工程数学》第三章知识点和部分答案详解

    第三章知识点 第三章部分习题详解

  2. 期末复习、化学反应工程科目(第三章)

    @Author:Runsen @Date:2020/6/29 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  3. 工程电磁场导论第三章总结

    写在前面:先向大家提一下旋度和散度的概念: 再提一下高斯散度定理和斯托克斯散度定理: 高斯散度定理: 斯托克斯公式: 目录

  4. 随机过程及其在金融领域中的应用 第三章 习题 及 答案

    随机过程及其在金融领域中的应用 第三章 习题 及 答案 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16879515 包含: 1 ...

  5. 《工程伦理与学术道德》第三章习题

    <工程伦理与学术道德>第三章习题 课后习题 讨论题 课后习题 讨论题 第一题: 在促进全体人民共同富裕历史进程中,必须正确处理好效率和公平的关系. 第一,共同富裕是由"共同&qu ...

  6. 工程伦理第三章学习笔记2020最新

    工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...

  7. 金融经济学期末梳理(王江)第二、三章

    金融经济学内容梳理 主要学什么? 第一章 引论 第二章 理论框架 2.1 经济结构 2.1.1 经济环境:风险和时间 2.1.2 经济参与者:内部因素 2.1.3 证券市场结构 2.2 金融经济学的核 ...

  8. 工程伦理 第三章习题 答案

    秋季期末 工程伦理 第三章习题 答案

  9. 高等工程数学 —— 第三章(2)奇异值分解和A的加号逆

    高等工程数学 -- 第三章(2)奇异值分解和A的加号逆 文章目录 高等工程数学 -- 第三章(2)奇异值分解和A的加号逆 奇异值分解 广义逆矩阵 A + A^{+} A+的直接计算方法 奇异值分解计算 ...

最新文章

  1. Grub error17:Cannot mount selected partition启动错误的解决
  2. number of databases available at XJTLU
  3. html中的特性是什么,数据库的四大特性是什么
  4. 设计洪水位与校核洪水位
  5. P3358 最长k可重区间集问题(网络流:串联思想)
  6. 牛客网 【每日一题】5月29日 管道取珠
  7. 牛笔了!Android面试真题解析火爆全网,面试必备
  8. iPhone 14“感叹号”设计没跑:屏下Face ID要等到2024年
  9. golang 将对象转换成string_Golang 匿名 struct 解码数据技巧
  10. OpenCV学习笔记总结
  11. 运行 java applet_创建运行第一个Java Applet程序
  12. matlab打开jpg文件怎么打开,Matlab读取图片、显示和保存图像的详细教程
  13. qpython3编辑器手机版下载_QPython3
  14. 华为云MySQL云数据库,轻松助力数据上云
  15. matlab中disparity,matlab disparity函数
  16. Android studio 设置豆绿色
  17. vue 视频 时间进度条组件-使用npm组件
  18. 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
  19. 顿可集团线上订货平台开发案例
  20. Java常用时间计算

热门文章

  1. 复变函数与积分变换中的英汉单词对照
  2. 使用TextView实现带动画的统计图
  3. 本地GitLab服务器搭建
  4. 自媒体还可以这样做,学会4点轻松赚钱,闷声发财的大咖都在用
  5. 车脉科技:业内首创“车企体验式营销“
  6. 山东大学 软件学院 2020级 2022年 操作系统 期末考试
  7. 2021考研数学笔记
  8. java环境变量如何配置?环境变量有什么用?
  9. FMpeg分析4:AVStream
  10. 机器人 郑佳佳_华为牛人表白女神遭拒,自制女机器人结婚,牛!